2009-09-09 18 views
7

MasterPages ile ASP.NET kullanıyorum. Bu yüzden bu bağlantıyı sadece MasterPage'e referans veren sayfalara yerleştiremiyorum.Geri kod aracılığıyla SEO için sayfama CANONICAL etiket ekleme?

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

Bu bağlantıyı, sayfalarımın her birinin Sayfa Yükü sayfamda olmasına rağmen yerleştirmem gerekiyor. Bunu kodla nasıl yaparım? VB.NET kullanıyorum ama C# da bana doğru yönde yardımcı olacak.

Bu, kodumun arkasında bulunan DESCRIPTION etiketim için yaptım.

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) 

Şimdiden teşekkürler!

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

Sonra sayfası (veya ana sayfa) sınıfında kanonik nesneyi işlemek: Bir sunucu kumanda olarak kanonik elemanı oluşturmaz Neden

cevap

11

Bu ne i yapmak zorunda ..................

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

fazla bilgi Here

2

. Jenerik etiketler kimse keyfi özelliklerini ayarlamak için izin veren HtmlGenericControl örnekleri olarak ele alınır:

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

Bu ne yaptım, benim AnaSayfa başlık etiketinin içinde bağlantı yeri. Ancak normal sayfamdan kodunuz çalışmıyor. Kanonik özniteliği almıyor. – Etienne

+0

Ana sayfaya erişim için Danrichardson'un yanıtına bakın (http://stackoverflow.com/questions/1398821/adding-the-canonical-tag-to-my-page-for-seo-through-code-behind/1399522#1399522). sayfadan kontrol. – Richard

0

Richard'ın Yanıt başına olduğu gibi, sayfa kod tarafında kalıp sayfaya başvurması gerekecektir. Dene:

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

veya VB eşdeğer :)

0

kurduğum aşağıdaki seçeneklerin.

System.Web.UI.Page "BasePage" tür sınıfı olarak devralan bir sınıf oluşturun.

buna bir yöntem ekleyin: Sonra

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); 
    } 
} 

Eğer temel sınıfından .aspx sayfaları oluşturmak ve sonra bu konuda AddHeaderLink arayabilirsiniz:

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

deneyin kullanmak: Öncelikle böyle BasePage sınıfı oluşturun:

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) 
    { 

    } 
} 

Son adım:

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; 
      } 
     }     
    } 
} 

Saniye böyle temel sınıfından .aspx sayfaları oluşturmak

<%@ 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/" 
%> 

C: \ Program Files \ Microsoft Vi'yu eklemeyi unutmayın. sual Studio 9.0 \ Common7 \ Packages \ schemas \ html \ page_directives.xsd özellik:

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

complexType bölüm

<a href="http://www.dowebpage.com">Michele - MMSoftware </a> 
İlgili konular