Crawlablelinkbutton : updatepanel et référencement

Description

L'utilisation des UpdatePanels peut avoir des impacts non négligeable sur le référencement des moteurs de recherche.

Ce contrôle permet de remedier à ce problème. Le CrawlableLinkButton hérite de LinkButton et lui rajoute la propriété NavigateUrl. Son rendu sera alors le suivant :

<a href="navigateurl" onclick="void(__doPostBack(...));return false">...

Ainsi, lorsqu'un utilisateur riche cliquera sur le lien, il fera un postback comme un classique LinkButton, par contre les robots iront référencer la page NavigateUrl. Il vous faudra donc gérer 2 cas : le cas du postback et le cas du classique lien.

Ci-dessous : un exemple d'utilisation de ce contrôle.

Source / Exemple :


<%@ Page Language="C#" MasterPageFile="~/Master/MasterPage.master" AutoEventWireup="true"
    CodeFile="temp.aspx.cs" Inherits="temp" Title="Untitled Page" %>

<script type="text/C#" runat="server">

    void Page_Load(Object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindData();
        }
    }

    private System.Diagnostics.Process _currentProcess;
    public System.Diagnostics.Process CurrentProcess {
        get {
            if (_currentProcess == null) {
                int pid = -1;
                if (Page.IsPostBack) {
                    if (ViewState["PID"] != null) {
                        pid = (int)ViewState["PID"];
                    }
                } else {
                    int.TryParse(Request.QueryString["PID"], out pid); 
                }
                if (pid > -1) { 
                    _currentProcess = Processes.Find(delegate(
                            System.Diagnostics.Process process){ 
                        return process.Id == pid;
                    });
                } else {
                    _currentProcess = Processes[0]; 
                }
            }
            return _currentProcess;
        }
        set {
            ViewState["PID"] = value.Id; 
            _currentProcess = value; 
        }
    }

    private static List<System.Diagnostics.Process> _processes;
    public static List<System.Diagnostics.Process> Processes
    {
        get
        {
            // Ne faites pas ça, c'est pour l'exemple mais attention 
            // c'est pas thread safe ...
            if (_processes == null)
            {
                _processes = new List<System.Diagnostics.Process>(
                        System.Diagnostics.Process.GetProcesses());
            }
            return _processes;
        }
    }

    void gvProcess_SelectedIndexChanged(object sender, EventArgs e)
    {
        // ca aussi c'est mal, c'est pour simplifier l'exemple
        CurrentProcess = Processes[gvProcess.SelectedIndex];
    }
    
    void BindData()
    {
        gvProcess.DataSource = Processes;
        gvProcess.DataBind();
    }

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="CPH1" runat="Server">
    <asp:UpdatePanel runat="server" UpdateMode="Conditional" >
        <ContentTemplate>
            <%=CurrentProcess.ProcessName %>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="gvProcess" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:GridView runat="server" ID="gvProcess" AutoGenerateColumns="false" 
        OnSelectedIndexChanged="gvProcess_SelectedIndexChanged">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <cs:CrawlableLinkButton runat="server" CommandName="Select" 
                        Text="Select" NavigateUrl='<%# "temp.aspx?PID=" + Eval("id").ToString() %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="ProcessName" />
            <asp:BoundField DataField="VirtualMemorySize" />
        </Columns>
    </asp:GridView>
</asp:Content>

Conclusion :


Attention le référencement est un art plus complexe que ça, ce controle permet simplement de rendre référencables les linkbuttons. Il va de soit qu'il faut penser toute l'application pour qu'elle soit référencable et bien réfléchir à comment les robots vont naviguer sur le site.

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.