ASP.NET: Canonical-Link-Tag dynamisch anpassen und einfügen

Doppelte Inhalte mögen Suchmaschinen bekanntermaßen nicht. Doch meistens können Webseiten über http://domain.de und http://www.domain.de erreicht werden. Für die Suchmaschine sind das zwei unterschiedliche Dinge.

Ein recht einfacher Ansatz mit ASP.NET kann so aussehen:

// using System.Web.UI.HtmlControls;

HtmlLink canonicalLink = new HtmlLink();
canonicalLink.Attributes["rel"] = "canonical";
canonicalLink.Href = Request.Url.AbsoluteUri.Replace("www.", "");
Page.Header.Controls.Add(canonicalLink);

Das ganze kommt dann z.B. in den Event-Handler Page_Load (Master-Datei, Basisklasse, …). Es wird dann im HTML-Head der Seite das entsprechende Tag erzeugt:
<link rel=“canonical“ href=“http://domain.de/site.aspx“ />

Über Request.Url.AbsoluteUri wird die aktuelle URL samt Host und Parametern ermittelt und per Replace(„www.“, „“) einfach, sofern vorhanden, das „www.“ entfernt. Aber Vorsicht: Alle Fundstellen mit „www.“ werden entfernt! Also auch etwaige übergebenen Parameter > d.h bei Bedarf nachbessern.

Alternativ kann aber auch per 301-Redirect in der global.asax umgeleitet werden.
Das könnte dann wie folgt aussehen:

<%@ Application Language="C#" %>
<script runat="server">
void Application_BeginRequest(object sender, EventArgs e)
{
  string url = HttpContext.Current.Request.Url.ToString().ToLower();
  
  if (!url.StartsWith("http://domain.de"))
  {
    // alle auf .de leiten
    url = url.Replace("domain.net", "domain.de");
    url = url.Replace("domain.com", "domain.de");
  
    // "www." entfernen
    url = url.Replace("http://www.domain", "http://domain");

    // permanente (301) Umleitung
    HttpContext.Current.Response.Status = "301 Moved Permanently";
    HttpContext.Current.Response.AddHeader("Location", url);
  }
}
</script>

Hier wird jeden Anfrage geprüft und ggf. auf die bevorzugte Domain per 301 umgeleitet – sprich das „www.“ einfach entfernt.