Jalara Studio

Tote Links zur Suchergebnisseite umleiten

# # #


In WordPress wird im Falle eines toten Links der HTTP-Statuscode 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 auszulesen und diese Ausgabe als Query Parameter für die Suchergebnisseite zu verwenden.

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 Slash (/) kann u.a. mit der String-Funktionen substr()2 entfernt werden. Diese Funktion kann drei Parameter enthalten: die Zeichenkette (engl. string) und zwei Integer, die bestimmen welcher Teil des Strings zurückgegeben werden soll. Weil der Slash als erstes Zeichen 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 PHP und JavaScript geschehen:

<?php echo '<script>window.location = "' . get_site_url() . '/?s='. $path_404 . '"</script>'; ?>

oder ausschließlich 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('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 'wp_head'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( 'Location: ' . get_site_url() . '/?s=' . $path_404 );
	 	die();
    }
}
add_action( 'wp_head', '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