Wie optimiere ich meine ASP.NET-Webseiten für Suchmaschinen?

Veröffentlicht: 22. Aug 2007

Das Problem

Wer möchte nicht ganz weit oben stehen? Tipps und Tricks zu Suchmaschinenoptimierung gibt es viele, die meisten sind auf der HTML-Ebene. Was man in ASP.NET tun kann, ist die Vermeidung von URL-Parametern in Webseiten. Seitenadressen wie http://www.dotnetframework.de/glossar/3777/LINQ.aspx wird den meisten Suchmaschinen bei der Suche nach "LINQ" besser angesehen als http://www.dotnetframework.de/glossar/details.aspx?id=3777.

Die Lösung

Natürlich wäre es Unsinn, von genau so viele Webseiten anzulegen wie es Datenbankeinträge gibt. Der Trick besteht darin, in dem globalen Application_BeginRequest-Ereignis in der global.asax die Aufrufe nach den fiktiven Seiten abzufangen und an die parametrisierten Seiten weiterzugeben. Dann kann man die Links auf die Seite auf die vorgetäuschten Adressen setzen. Diese "Vortäuschung" ist nicht verboten, weil sie damit ja nicht mehr Seiten als die tatsächlich haben erzeugen, sondern nur die URL vereinfachen.

Innerhalb von Application_BeginRequest findet man üblicherweise drei Schritte:

Auswertung von Request.Url mit Hilfe eines regulären Ausdrucks um festzustellen, ob eine Seite angefragt wurde, die umgelenkt werden soll.

Extrahieren der notwendigen Parameter

Umlenkung mit Context.RewritePath auf die Zielseite

Dieses Verfahren kann man übrigens auch einsetzen, wenn sich Seitenadressen im Zuge der Restrukturierung einer Website geändert haben.

Code

CS:

protected void Application_BeginRequest(object sender, EventArgs e)
 {
  // Regulärer Ausdruck
  System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex("([0-9][0-9][0-9][0-9])");
  // Match gegen vorletztes Segment der URL ausführen
  System.Text.RegularExpressions.Match m = re.Match(Request.Url.Segments[Request.Url.Segments.Length - 2]);
  // Wenn Match erfolgreich...
  if (m.Success)
  {
   // Zahl extrahieren
   long ID = Convert.ToInt64(m.Captures[0].Value);
   // Umlenken
   Context.RewritePath("~/Detailseite.aspx", "", "id=" + ID.ToString(), true);
  }
 }            
          

VB:

Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
  ' Regulärer Ausdruck
  Dim re As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex_
                        ("(?<ID>[0-9][0-9][0-9][0-9])(.aspx)", RegexOptions.IgnoreCase)
  ' Match gegen vorletztes Segment der URL ausführen
  Dim m As System.Text.RegularExpressions.Match = re.Match(Request.Url.Segments(Request.Url.Segments.Length - 1))
  ' Wenn Match erfolgreich...
  If m.Success Then
   ' Zahl extrahieren
   Dim ID As Long = Convert.ToInt64(m.Groups("ID").Captures(0).Value)
   ' Umlenken
   Context.RewritePath("~/CS/Detailseite.aspx", "", "id=" & ID.ToString(), True)
  End If
 End Sub