Google Search Console: "Serverfehler (5xx)" für WordPress-Theme abstellen
Ich bekam eine Mail von Google, dass es ein Problem mit der Indexabdeckung gibt. In der Search Console finden weitere Informationen zu dem Fehler: Der Googlebot hat versucht, das WordPress-Theme-Verzeichnis direkt aufzurufen.
Erklärung, wie der HTTP 500 zu Stande kommt
Aus WordPress-Sicht ist der Fehler vollkommen normal, da normalerweise die index.php
im
Theme-Verzeichnis niemals direkt aufgerufen wird. Stattdessen würde der Rewrite-Mechanismus
des Webservers die zentrale WordPress-index.php
ausführen, die u. a. guckt, welches Theme
du ausgewählt hast und dann erst die index.php
im Theme-Verzeichnis einbinden. Zu diesem
Zeitpunkt stehen in der PHP-Umgebung alle WordPress-Funktionen zur Verfügung und das Theme macht
seine Magic, um am Ende die Inhalte an der Nutzer präsentieren zu können.
Im Falle von Google, bei dem die Theme-index.php
direkt angefordert wird, fehlen die
WordPress-Funktionen und der PHP-Interpreter bricht die Script-Ausführung mit Fehler ab.
Und das wiederum führt zum beobachtbaren HTTP 500. Im Apache-Logfile kann man den Fehler in der
error.log
nachvollziehen:
PHP Fatal error: Call to undefined function get_header() in /srv/apache2/thehacker.blog/wp-content/themes/thehacker.blog/index.php on line 1
get_header
ist eine WordPress-Funktion
und dafür zuständig, den Header-Bereich der Webseite auszugeben. Es kann durchaus sein, dass du
in deinem Theme eine andere Fehlermeldung bekommst, wenn der Theme-Autor vorher eine andere
WordPress-Funktion aufruft.
Abstellen des Fehlers
Grundsätzlich: Das ist kein schlimmes Problem. Der Googlebot tut etwas, was er nicht tun sollte. Dass er in diesem Fall einen Fehler bekommt, da ist er selber schuld. Aber natürlich wäre es doch viel schöner, den hässlichen Fehler-Eintrag in der Search Console wegzubekommen. Das tun wir jetzt.
In die passende Apache-Konfiguration fügen wir hierzu einfach einen kleinen Block ein, der den Aufruf von genau dieser einen URL verbietet:
## Google ruft das Verzeichnis direkt auf, was zu 500 führt. Wir triggern 403.
<LocationMatch "^/wp-content/themes/thehacker.blog/?$>
Require all denied
</LocationMatch>
Der Webserver wird nun HTTP 403 senden und dem Googlebot damit klar machen, dass es ihm verboten ist, diese URL aufzurufen.
Fehler als gelöst markieren
Zum Schluss kann man in der Search Console durch einen entsprechenden Button-Klick den Fehler als gelöst markieren. Beim nächsten Crawling der URL durch den Googlebot erhält man dann eine Mail, dass der Fehler behoben ist: