Suchmaschinenbetreiber scheinen es als Herausforderung zu betrachen, Entwickler von Websites mit Missachtung zu strafen. Speziell dynamische Websiten mit Cookies und Querystrings werden oftmals von den Crawlern einfach ignoriert.
So kann Google laut Doku zwar eine Seite mit Querystring in der URL indizieren, in der Praxis findet sich so eine Seite aber nie wieder in der Search Engine.
www.devtrain.de/news.asp?artnr=523
Mit einem ISAPI Filter lässt sich aber obiger Querstring in eine einfache URL mappen z.B. in der Form
www.devtrain.de/artikel/artnr/523/news.aspx
Wir haben selbiges in einem vorhergehenden Artikel bereits besprochen und die nötige ISAPI.DLL kostenfrei zur Verfügung gestellt.
In ASP .NET lässt sich dieses Problem mit einem HTTPModule lösen. Die grundlegende Funktionsweise wurde ebenfalls bereits in einem vorigen Beitrag beschrieben.
Sie müssen den Namespace System.Web importieren um die Klassen nutzen zu können.
In der Init Funktion der Klasse legen Sie einen Funktionszeiger auf die Startfunktion. In dieser können Sie dann per ReWritePath die Seite umleiten.
Was dann folgt ist eine mehr oder weniger elegante String Operation. Mir gefällt die Methode mit dem Split Befehl ganz gut, weil man damit sehr wenige Zeilen tippen muss. Am Schluss setzen Sie einen String zusammen der auf die Seite zeigt die den eigentlichen Job tun soll.
Die Umleitung des Requests erfolgt über die Funktion RewritePath.
Public Class URLMapper1 Implements IHttpModule Public Sub Init(ByVal app As HttpApplication) Implements IHttpModule.Init AddHandler app.BeginRequest, AddressOf BeginRequest AddHandler app.EndRequest, AddressOf EndRequest End Sub Public Sub Dispose() Implements IHttpModule.Dispose End Sub Public Sub BeginRequest(ByVal s As Object, ByVal e As EventArgs) Dim app As HttpApplication app = CType(s, HttpApplication) Dim strURL As String = app.Request.Url.ToString.ToLower If InStr(strURL, "artikel") > 0 Then 'wwww.devtrain.de/artikel/artnr/523/news Dim strCutURL As String = strURL.Substring(String.Compare(strURL, "artikel")) Dim arrPars As String() = strURL.Split("/") app.Context.RewritePath("/webui/news.aspx?" & arrPars(5) & "=" & arrPars(6)) End If End Sub Public Sub EndRequest(ByVal s As Object, ByVal e As EventArgs) End Sub End Class |
Die Funktion Dispose kann man hier leer lassen ebesno wie Endrequest.
Am Schluss müssen Sie das Modul noch über die Datei web.config registrieren.
<httpModules> <add type="WebUI.URLMapper1,WebUI" name="URLMapper1" /> </httpModules> |
Diese Methode bietet eine komfortable alternative zur statischen HTML Seite. Dank Caching ist die Performance ähnlich wie bei puren HTML.