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.