In WordPress wird im Falle eines toten Links der HTTP-Statuscode 404 Not Found ('HTTP/1.0 404 Not Found'
) zurückgegeben und die Template Datei 404.php, sofern im Theme vorhanden, geladen.
In einigen Fällen kann es für den Besucher hilfreich sein, den Pfad eines toten Links bzw. den Query String auszulesen und diesen als Suchbegriff an die Suchergebnisseite weiterzugeben.
Auslesen lässt sich der Pfad beispielsweise mit der vordefinierten Variable $_SERVER['REQUEST_URI']
1, bei der der Server die verwendete URI der aufgerufenen Seite auswertet.
Der zu Begin des Pfades angegebene Schrägstrich (engl. slash) kann u.a. mit der String-Funktionen substr()
2 entfernt werden. Diese Funktion kann drei Parameter enthalten: die Zeichenkette, die ausgewertet werden soll (engl. string) und zwei ganze Zahlen (engl. integer). Die Angabe des ersten Integers bestimmt, an welcher Stelle die Ausgabe des Strings beginnen soll und die optionale Angabe des zweiten Integers bestimmt, wie viele Teile des Strings zurückgegeben werden sollen. Weil der Slash als erstes Zeichen (1 nicht zurückgegeben werden soll, lautet die Funktion, die einer Variable namens $path_404
übergeben wurde, wie folgt:
<?php $path_404 = substr( $_SERVER['REQUEST_URI'], 1 ); ?>
Da der String, der den Pfad enthält, weitere Slashes und Bindestriche (engl. hyphens) besitzt, die zur Suche ungeeignet sind, muss der String mit Hilfe der String-Funktion str_replace()
3 wie folgt erneut angepasst werden:
<?php $path_404 = str_replace( '/', '+', $path_404 ); ?>
<?php $path_404 = str_replace( '-', '+', $path_404 ); ?>
Anschließend kann die Variable $path_404
, die den String mit dem umgewandelten Pfad enthält, dem Query String zur Suche (/?s=) mitgegeben werden.
Dies kann entweder wie folgt mittels JavaScript geschehen:
<script>window.location = "' . get_site_url() . '/?s='. $path_404 . '"</script>
oder mit PHP und der Netzwerk-Funktion header()
4:
<?php header('Location: ' . get_site_url() . '/?s=' . $path_404); die(); ?>
Das PHP-Script kann anschließend in die Theme-Datei 404.php5 im Child Theme eingefügt werden:
<?php $path_404 = substr( $_SERVER['REQUEST_URI'], 1 ); ?>
<?php $path_404 = str_replace( '/','+',$path_404 ); ?>
<?php $path_404 = str_replace( '-','+',$path_404 ); ?>
<?php header( 'HTTP/1.0 404 Not Found' ); ?>
<?php header( 'Location: ' . get_site_url() . '/?s=' . $path_404 ); ?>
<?php die(); ?>
Ebenfalls lässt sich der Codeschnipsel, zusammen mit dem Conditional Tag is_404()
6 auch in eine Funktion einfügen, die anschließend dem Action Hook 'template_redirect'
7 mitgeben werden kann. Füge hierfür folgendes Snippet in die Datei functions.php im Child Theme oder in ein eigenes Plugin ein:
function weiterleitung_suche(){
if( is_404() ) {
$path_404 = substr( $_SERVER['REQUEST_URI'], 1 );
$path_404 = str_replace( '/','+',$path_404 );
$path_404 = str_replace( '-','+',$path_404 );
header( 'HTTP/1.0 404 Not Found' );
header( 'Location: ' . get_site_url() . '/?s=' . $path_404 );
die();
}
}
add_action( 'template_redirect', 'weiterleitung_suche' );
Anschließend wird der Besucher bei einem totem Link zur entsprechenden Suchergebnisseite umgeleitet.
Hinweis: Bei dieser Methode wird, wie von Google gewünscht, weiterhin der HTTP-Statuscode 404 Not Found an den Crawler zurückgegeben.
Links
- 1↑ PHP-Handbuch › Sprachreferenz › Vordefinierte Variablen ›
$_SERVER
: - 2↑ PHP-Handbuch › Funktionsreferenz › String-Funktionen:
- 3↑ PHP-Handbuch › Funktionsreferenz › String-Funktionen:
- 4↑ PHP-Handbuch › Funktionsreferenz › Netzwerk-Funktionen:
- 5↑ Codex Editing an Error 404 Page:
- 6↑ Codex Function Reference/is 404:
- 7↑ Code Reference
do_action( 'template_redirect' )
: