2009-09-09 10 views
7

Estoy usando ASP.NET con MasterPages. Por lo tanto, no puedo colocar este enlace en mis páginas que hacen referencia a mi página maestra.¿Agregar la etiqueta CANONICAL a mi página para SEO a través del código?

<link rel="canonical" href="http://www.erate.co.za/" /> 

Necesito colocar este enlace en mi carga de página de cada una de mis páginas. ¿Cómo haré esto a través del código? Estoy usando VB.NET pero C# también me ayudará en la dirección correcta.

Así es como lo hice para mi etiqueta DESCRIPTION en mi código.

Dim tag As HtmlMeta = New HtmlMeta() 
    tag.Name = "description" 
    tag.Content = "Find or rate any company in South Africa for FREE and rate them" 
    Header.Controls.Add(tag) 

¡Gracias de antemano!

Respuesta

11

Esto es lo que tenido que hacer ..................

Dim seoTag As HtmlLink = New HtmlLink() 
    seoTag.Attributes.Add("rel", "canonical") 
    seoTag.Href = "http://www.erate.co.za/" 
    Header.Controls.Add(seoTag) 

Más información Here

2

Por qué no crear su elemento canónica como un control de servidor:

<link rel="canonical" href="" runat="server" id="canonical"/> 

Entonces manipular el objeto canónica en su clase de página (o página maestra). etiquetas genéricas son tratados como casos de HtmlGenericControl el cual le permite a uno para establecer los atributos arbitrarios:

canonical.Attributes["href"] = whatever; 
+0

Esto es lo que hice, lo coloco su enlace dentro de mi etiqueta de cabecera MasterPage. Pero luego, desde mi página normal, tu código no funciona. No capta el atributo canónico. – Etienne

+0

Consulte la respuesta de Danrichardson (http://stackoverflow.com/questions/1398821/adding-the-canonical-tag-to-my-page-for-seo-through-code-behind/1399522#1399522) para acceder a una página maestra control desde la página. – Richard

0

De acuerdo con la respuesta de Richard, en su lado de la página de código que tendrá que hacer referencia a la página maestra. Probar:

((HtmlLink)this.Page.Master.FindControl("canonical")).Href = "whatever"; 

o el equivalente VB :)

0

Tengo la siguiente configuración.

Crea una clase que hereda de System.Web.UI.Page como una clase de tipo "BasePage".

añadir un método para que:

public class BasePage: System.Web.UI.Page { 

    // I've tended to create overloads of this that take just an href and type 
    // for example that allows me to use this to add CSS to a page dynamically 
    public void AddHeaderLink(string href, 
          string rel, 
          string type, 
          string media) { 
    HtmlLink link = new HtmlLink(); 
    link.Href = href; 

    // As I'm working with XHTML, I want to ensure all attributes are lowercase 
    // Also, you could replace the length checks with string.IsNullOrEmpty if 
    // you prefer. 
    if (0 != type.Length){ 
     link.Attributes.Add(HtmlTextWriterAttribute.Type.ToString().ToLower(), 
          type); 
    } 

    if (0 != rel.Length){ 
     link.Attributes.Add(HtmlTextWriterAttribute.Rel.ToString().ToLower(), 
          rel); 
    } 

    if (0 != media.Length){ 
     link.Attributes.Add("media", media); 
    } 

    Page.Header.Controls.Add(link); 
    } 
} 

continuación, puede crear páginas .aspx que heredan de la clase base, y luego llamar a AddHeaderLink en que:

public partial class MyPage : BasePage { 

    protected void Page_Load(object sender, EventArgs e) { 

    // Or however you're generating your canonical urls 
    string cannonicalUrl = GetCannonicalUrl(); 

    AddHeaderLink(cannonicalUrl, "canonical", string.Empty, string.Empty); 
    } 
} 
1

Trate de utilizar: En primer lugar crear clase BasePage así:

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Text.RegularExpressions; 

namespace MMSoftware.TheMMSoft.UI 
{ 
    public class BasePage : System.Web.UI.Page 
    { 
     private string _canonical; 
     // Constructor 
     public BasePage() 
     { 
      Init += new EventHandler(BasePage_Init); 
     } 

     // Whenever a page that uses this base class is initialized 
     // add link canonical if available 
     void BasePage_Init(object sender, EventArgs e) 
     {    
      if (!String.IsNullOrEmpty(Link_Canonical)) 
      { 
       HtmlLink link = new HtmlLink(); 
       link.Href = Link_Canonical; 
       link.Attributes.Add(HtmlTextWriterAttribute.Rel.ToString().ToLower(), "canonical"); 
       link.Attributes.Add(HtmlTextWriterAttribute.Type.ToString().ToLower(), ""); 
       link.Attributes.Add("media", ""); 
       Header.Controls.Add(link); 
      } 
     } 

     /// <summary> 
     /// Gets or sets the Link Canonical tag for the page 
     /// </summary> 
     public string Link_Canonical 
     { 
      get 
      { 
       return _canonical; 
      } 
      set 
      { 
       _canonical = value; 
      } 
     }     
    } 
} 

segundos crean las páginas .aspx que heredan de la clase base como esto:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : MMSoftware.TheMMSoft.UI.BasePage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

último paso:

<%@ Page Title="" 
     Language="C#" 
     MasterPageFile="~/design/MasterPage.master" 
     AutoEventWireup="true" 
     CodeFile="Default.aspx.cs" 
     Inherits="_Default" 
     CodeFileBaseClass="MMSoftware.TheMMSoft.UI.BasePage" 
     Link_Canonical="http://yourCanonicalUrl/" 
%> 

Recuerde agregar en C: \ Program Files \ Microsoft Vi sual Studio 9.0 \ Common7 \ Packages \ schemas \ html \ page_directives.xsd el atributo:

<xsd:attribute name="Link_Canonical" vs:nonfilterable="true" /> 

en la sección tipoCompuesto

<a href="http://www.dowebpage.com">Michele - MMSoftware </a> 
Cuestiones relacionadas