Im Originalzustand zeigt BlogEngine.NET beim Umgang mit 404 Fehlern ein etwas seltsames Verhalten, dass so auf den ersten Blick nicht ersichtlich ist aber unter Umständen unangenehme folgen haben kann.
Wird eine vom Benutzer angegebene Seite oder ein Artikel nicht gefunden, leitet BlogEngine.NET den Benutzer auf eine eigene 404 Fehlerseite um und bietet einige relevante oder ähnliche Seiten zur Auswahl an. Soweit ist daran nichts verwerfliches zu finden. Betrachtet man dabei aber den Netzwerkverkehr in einem Analysewerkzeug wie etwa Fiddler, wird das Verhalten sichtbar.

Wie in folgender Grafik zu sehen ist, wird beim Aufruf einer nicht verfügbaren Ressource mittels 302 auf die error404.aspx umgeleitet. Die error404.aspx wird jetzt wie jede andere Seite des Blog an den Client ausgeliefert, Auch mit dem selben Statuscode; 200 OK.

falscher Status bei einem 404 Fehler Wenn am anderen Ende als Client ein Benutzer mit einem Browser sitzt, ist dieses Verhalten nicht weiter schlimm. Was wenn der Client aber der Bot einer Suchmaschine ist? Der freut sich nicht über eine schön gestaltete Fehlerseite. Für ihn ist das die temporär verschobene, aber ursprünglich angeforderte, Ressource. Wenn jetzt der Suchmaschinenrobot einem Link von einer anderen Seite gefolgt ist, auf der die Adresse falsch geschrieben wurde, wird die Fehlerseite error404.aspx als der angegebene Link indiziert. Dieses Verhalten will bestimmt niemand haben.

Die Lösung des Problems ist denkbar einfach. Bei der Verarbeitung der Fehlerseite muss lediglich der Statuscode 404 an den Client zurückgegeben werden. Dies wird mit einer Zeile Code am Ende der Page_Load Ereignis der error404.aspx.cs erreicht:

Page.Title += Server.HtmlEncode(" - " + "Page not found");

// Fehlercode 404 zurückgeben
this.Response.StatusCode = 404;

Was verändert sich dadurch?
Die 302 Weiterleitung auf die Fehlerseite wird nach wie vor durchgeführt. Dann aber wird der richtige Statuscode 404 gesendet.

richtiger Status bei einem 404 FehlerFür den Benutzer mit dem Browser ändert sich dabei nicht. Der Suchmaschinen Bot aber weiß jetzt, die angegebene Ressource gibt es auf dem Server nicht. Also wird auch keine falsche Seite in den Index der Suchmaschine geschrieben.

Technorati-Tags:  |  | 
Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitte "kicken" sie ihn.
kick it on dotnet-kicks.de