WordPress: Suchmaschinen sagen, dass Inhalte weg sind
Alexander Trust, den 19. Januar 2016Wer mit WordPress Suchmaschinen sagen will, dass Inhalte auf Dauer weg sind, der hat theoretisch sehr viele Möglichkeiten dazu. Wir wollen euch eine sehr bequeme Lösung mit der status_header()
-Funktion vorstellen.
Die Search Console von Google (ehemals Webmaster Tools) ist dafür bekannt, Webmastern eine Vielzahl von Informationen zu liefern. Eine Liste, über die regelmäßig in Googles Webmaster-Foren diskutiert wird, ist diejenige mit den Crawling-Fehlern.
Crawling-Fehler beheben
Der erste Schritt, den man in dem Fall immer unternehmen sollte, um Crawling-Fehler zu beheben, ist nach den Ursachen zu forschen, und eventuell Weiterleitungen einzurichten. Denn die Liste von Crawling-Fehlern in der Search Console ist lange Zeit nicht bedrohlich, wenn aber tausende von Einträgen darin auftauchen, und man diese beheben möchte, hat man es schwer.
Status-Code senden
Von den Weiterleitungen einmal abgesehen, kann man zusätzlich einen HTTP-Statuscode mitteilen. Richter man beispielsweise in einem System mit Apache-Webserver per htaccess
-Datei Weiterleitungen ein, dann wird automatisch mitgeteilt, dass es sich dabei um eine 301- oder 302-Weiterleitung handelt. Der Code 301 steht für „dauerhafte Weiterleitung“, 302 meint eine „temporäre Weiterleitung“.
410 Gone
Doch was ist, wenn man die Suchmaschinen darüber informieren möchte, dass Inhalte auf Dauer von einer Webseite verschwunden sind? Denn immer wieder gibt es in Googles Foren Anfragen, in denen Nutzer sagen, das sind Seiten, die gibt es schon viele Jahre nicht mehr. Damit man Google, Bing und Co. beim Vergessen dieser Seiten helfen kann, muss man ihnen den Statuscode 410 übermitteln, der aussagt, dass es diese Seite nicht mehr gibt.
Wie machen wir das auf Sajonara? Wir haben zwei Seiten eingerichtet. Eine lautet auf den Titel Qualitätssicherung, die andere auf den Namen Fehlervermeidung. Letztere ist vor allem als Punkt für Bots gedacht. Dort landen aber trotzdem ab und zu Menschen, die durch ein technisches Missgeschick oder aus Versehen dort landen. Bei der Qualitätssicherungsseite hingegen handelt es sich um eine, auf die wir die Leute weiterleiten, wenn wir den URL einer Seite geändert haben, oder es Inhalte nicht mehr gibt, bspw. weil wir Sponsored Posts gelöscht haben, oder weil wir wegen einer Abmahnung den Inhalt aus dem Netz nehmen mussten. Normalerweise würden beide Seiten einen Statuscode 301 aufweisen, doch wir manipulieren diesen über die functions.php
mit einer kleinen Funktion, die wir zu einem Zeitpunkt aufrufen, an dem der Kopf der Seite noch nicht gesendet wurde (pre_get_posts
, vgl. https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts).
function handle_410() {
if( is_page( ID_XYZ )) {
status_header( 410 );
nocache_headers();
}
}
add_action( 'pre_get_posts', 'handle_410' );
Wir fragen zunächst ab, ob es sich um die Seite mit der ID XYZ handelt – natürlich nicht. An dieser Stelle müsstet ihr die ID oder die IDs eintragen, von derjenigen Seite, die euch als 410-Statusseite dienen soll und auf die ihr die entfernten Inhalte umleitet. Wollt ihr mehrere Seiten nutzen, so wie wir mit QA und FTW, dann ändert den Conditional Tag is_page()
(vgl. https://codex.wordpress.org/Function_Reference/is_page) wie folgt:
function handle_410() {
if( is_page( array(ID_X,ID_Y) )) {
status_header( 410 );
nocache_headers();
}
}
add_action( 'pre_get_posts', 'handle_410' );
Dies funktioniert allerdings nur bei Browsern von Nutzern und bei schlauen Bots, wie dem GoogleBot oder anderen, die ähnlich funktionieren wie ein Browser. Denn die Übertragung des Statuscodes 410 setzt die Ansicht der Webseite über WordPress voraus. Wer beispielsweise im Terminal die Funktion curl
verwendet, um die Funktionalität zu überprüfen, und nicht den korrekten userAgent
eingibt, der erhält den Statuscode 200 ausgegeben, was so viel bedeutet, dass die Seite fehlerfrei abgerufen werden konnte.
Caching vermeiden
Sowohl WordPress als auch Webserver und PHP nutzen Cache, speichern als Dinge zwischen. Internetanbieter nutzen Proxyserver, auf denen ebenfalls gecacht wird. Um zu vermeiden, dass der Statuscode womöglich später als nötig erkannt wird, weil noch eine gecachte Variante im Browser oder anderswo befindlich ist, nutzen wir außerdem die Funktion nocache_headers()
.
Vorsicht
Mit dem Statuscode 410 sollte man vorsichtig umgehen. Denn es ist immer besser eine Weiterleitung einzurichten und den Statuscode bei 301 (oder 302) zu belassen, wenn man kann. Warum? Haben die Suchmaschinen einmal verstanden, dass ein Inhalt fort ist, wird alles, was er vielleicht an positiven Rankingsignalen mitgebracht hat, ebenfalls vergessen.