Bei allen serverseitigen Weiterleitungen per PHP, dem Location Header, wird standardmäßig der Statuscode 302 und somit ein temporärer Redirect, verwendet. Das ist natürlich genau dann ein Nachteil, wenn diese Weiterleitung eben nicht nur vorrübergehend ist, sondern eine dauerhafte Lösung sein soll. Dieser Fall tritt eigentlich recht häufig auf, ist im Prinzip einem menschlichen Besucher aber relativ egal. Dieser wird weitergeleitet und vom Statuscode bekommt man nichts zu sehen.

Etwas anders verhält sich das bei Suchmaschinen. Der Spider bekommt bei einer PHP-Standard-Weiterleitung den Status 302 und so den Hinweis, dass die Datei zwar an einem anderen Ort liegt, es sich hierbei aber nur um eine temporäre Ortsverlagerung handelt.

PHP-Redirect aus Sicht einer Suchmaschine

Um einer Suchmaschine zu signalisieren, dass die angeforderte Datei nun an einem anderen Ort liegt, und nicht mehr hier gesucht werden muss, gibt man bei der Weiterleitung den HTTP-Statuscode 301 mit. Anders als bei einem Statuscode 302, der auf eine temporäre Weiterleitung hinweist, signalisiert diese Art einer Weiterleitung einem Suchmaschinen-Crawler, dass das Dokument nun unter einer neuen Adresse erreichbar ist und das künftig auch so sein wird. Im Index einer Suchmaschine kann somit, vereinfacht ausgedrückt, die alte Adresse durch die neue Adresse ausgetauscht werden, der Rest (Platzierung, Suchbegriffe usw.) bleibt jedoch wie er ist.

Ein Beispiel: Eine PDF namens php-weiterleitung.pdf wird auf einer Webseite zum Download angeboten. Sucht man bei Google nach Inhalten aus dieser PDF, so ist sie ordentlich im Index positioniert und man weiß auch, dass so immer wieder Besucher zu diesen Informationen gelangen. Nun wurde die Datei inhaltlich überarbeitet und aus der php-weiterleitung.pdf wird eine aktualisierte Version php5-weiterleitung-301.pdf. Natürlich sollen die Suchmaschinen nun nicht das bereits gewonnene Vertrauen in diesen Inhalt verlieren, indem die alte Datei einfach vom Netz genommen wird und die Crawler sich die neue Datei selbst suchen können. Mit der neuen Dateiversion würde man im Suchindex wieder von vorn beginnen und Besucher ggf. würden anfangs vom Link der Suchmaschine zu einer 404 Error-Meldung.

Also nehmen wir die Suchmaschinen-Crawler und unseren menschlichen Besucher an die Hand und führen sie mit unserem PHP-Script zurück auf den richtigen Weg.

Code-Beispiel für eine PHP 301-Weiterleitung

<?php
// dauerhafte PHP-Weiterleitung (Statuscode 301)
header("HTTP/1.1 301 Moved Permanently");
// Weiterleitungsziel. Wohin soll eine permanente Weiterleitung erfolgen?
header("Location:http://www.redirect301.de/php-redirect-301.html");
// zur Sicherheit ein exit-Aufruf, falls Probleme aufgetreten sind
exit;
?>

Unter www.php-weiterleitung.redirect301.de/permanent.php erfolgt eine PHP-Weiterleitung zu diesem Artikel. Das dortige PHP-Script arbeitet genau mit dem hier vorgestellten PHP-Code-Beispiel.
Vor dem PHP-Code darf natürlich keine andere Ausgabe an den Browser erfolgen. Weder über ein echo noch durch versehentliche (Leer-)Zeichen vor dem php-Tag.
Das exit; unterbindet eine eventuell fehlerhafte Ausführung der Weiterleitung und darauf sollte nicht verzichtet werden.

Welcher Status im HTTP-Header gesendet wurde, lässt sich u.a. mit den im Artikel Statuscode ermitteln beschriebenen Werkzeugen überprüfen.