Permanente Umleitung in ASP.NET MVC
Kommentare

Für Entwickler und Endbenutzer gibt es nahezu keinen Unterschied zwischen einer normalen und einer permanenten Umleitung. Für eine Suchmaschine dagegen ist es ein gewaltiger Unterschied. Um die integrierte SEO-Funktionalität (Search Engine Optimization) zu verbessern, hat das Response-Objekt in ASP.NET 4 eine neue Methode bekommen. Die mit RedirectPermanent benannte neue Methode erlaubt es, im Rückgabewert den Browser mit einem ganz spezifischen HTTP-Statuscode darüber zu informieren, dass die angeforderte Ressource permanent an einen anderen Standort verschoben wurde. In ASP.NET MVC wird eine Antwort in einem Aktionsergebnisobjekt verpackt und ein Ad-hoc-Objekt existiert nicht.

Wenn Sie in ASP.NET die Methode Response.Redirect aufrufen, geben Sie dem Browser den HTTP-Code 302 zurück. Dieser bedeutet, dass der angeforderte Inhalt jetzt an einem anderen spezifizierten Speicherort zur Verfügung steht. Darauf basierend führt der Browser eine zweite Anforderung zur angegebenen Adresse aus und ruft alle Inhalte ab, die ihm zurückgegeben werden. Dieses Verhalten wurde für einen Browser zugeschnitten, dessen einzige Aufgabe darin besteht, Inhalte an sich zu bringen und anzuzeigen.

Demgegenüber ist eine Suchmaschine, die Ihre Seite besucht, kein Browser. Eine Suchmaschine nimmt die Bedeutung des HTTP-Codes 302 wörtlich. Genauer gesagt zeigt der HTTP-Statuscode 302 an, dass die angeforderte Seite temporär zu einer neuen Adresse verschoben wurde. Eine Suchmaschine aktualisiert deshalb ihre internen Nachschlagetabellen im Endeffekt auch nicht. Für die Suchmaschine befindet sich die Ressource immer noch an ihrem ursprünglichen Standort. Die Suchmaschine liefert die alte Adresse, wenn sie einen Link zur Ressource ausgeben muss. Wird nun eine HTTP-301-Umleitung ausgelöst, erkennt eine Suchmaschine die zurückgegebenen Informationen, die den neuen Standort einschließen, und aktualisiert ihre Datensätze. Damit erhöht sich der Rang der Ressource in der Suchmaschine. In diesem Sinne ist zu beachten, dass die Suchmaschine einige Zeit braucht, um die Änderung zu verdauen. Es erwarteten Sie also keine sofortigen Indizierungsergebnisse, nachdem Sie den Standort einer Seite geändert und die passenden HTTP-301-Umleitungen angewendet haben.

Permanente Umleitungen in ASP.NET 4

Die permanente Umleitung ist schon vor langer Zeit im Standard HTTP 1.1 festgeschrieben worden. In Ihren Webanwendungen können Sie eine permanente Umleitung unabhängig vom verwendeten Framework implementieren. In einer klassischen ASP.NET-Anwendung sieht das aus, wie in Listing 1 zu sehen ist.

void PermanentRedirect(string url, bool endRequest) 
{ 
    Response.Clear(); 
    Response.StatusCode = 301; 
    Response.AddHeader("Location", url); 

    // Optionally end the request
    if (endRequest)
       Response.End(); 
}  

Der Code in Listing 1 setzt die Eigenschaft StatusCode auf 301. Vor allem aber fügt er den Location Header hinzu und setzt ihn auf den neuen Standort der Ressource. Der hier gezeigte Code ist zu einer neuen ASP.NET 4-Methode formalisiert worden – der Methode RedirectPermanent der Klasse HttpResponse. Die Methode verwenden Sie in der gleichen Weise wie die klassische Methode Response.Redirect. Wie bereits erwähnt, ist das Ganze für den Browser unerheblich, für Suchmaschinen aber ein wesentlicher Unterschied.

In ASP.NET 4 können Sie auf die Methode auch über die Klasse HttpResponseBase Response-Objekts, das für die Laufzeit-Shell von ASP.NET MVC verfügbar gemacht wird. Die Einführung derartiger Abstraktionen gegenüber immanenten Objekten ist der Schlüssel zu dem hohen Niveau an Testmöglichkeiten, das in ASP.NET MVC vorhanden ist.

Soweit es die klassische ASP.NET 4-Plattform angeht, gibt es nichts weiter zu sagen: Man hat eine unmittelbar einsetzbare und konfigurierbare Methode, um eine permanente Umleitung zu arrangieren und das SEO-Niveau der Site zu erhöhen. Wie steht es nun mit ASP.NET MVC?

Permanente Umleitungen in ASP.NET MVC

In ASP.NET MVC wird die Antwort jeder Anforderung in einem Aktionsergebnisobjekt verpackt. Dabei handelt es sich um ein Objekt, das von ActionResult erbt. Mit der im Framework vordefinierten Klasse RedirectResult können Sie Standardumleitungen anordnen. Wie jede andere Aktionsergebnisklasse überschreibt RedirectResult die Methode ExecuteResult, um die typischen Aktionen auszuführen, die eine HTTP-Anforderung abschließen würden. Die Methode ExecuteResult ist demzufolge unter anderem dafür zuständig, den Inhaltstyp, Zwischenspeicheroptionen, den Statuscode und – last but not least – die erwartete Ausgabe festzulegen. Die Methode ExecuteResult der Klasse RedirectResult ist bei Weitem einfacher, da sie lediglich die Methode Redirect des nativen Response-Objekts aufruft. Von nun an ist klar, dass RedirectResult eine temporäre Umleitung ist. Um permanente Umleitungen in ASP.NET MVC zu unterstützen, brauchen Sie eine benutzerdefinierte PermanentRedirectResult-Klasse. Doch wie würden Sie diese schreiben?

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -