Die perfekte Wartungs-Seite – auch für Google & Co.

Wer im Internet sein Geld verdient, indem er etwa einen Online-Shop betreibt muss dafür sorgen, dass seine Webseite in den gängigen Suchmaschinen auf den vorderen Plätzen positioniert ist.

Genau deshalb sollten gelegentliche Optimierungen am Shop-System, Webserver, Netzwerk etc. die einen “Wartungszustand” des Shops erfordern keine Nachteile bei Suchmaschinen hervorrufen. Die sogenannten “Crawler” sind bei gutplatzierten Shops unermüdlich am Einsammeln von Informationen und jeder “Ausfall” führt hier u. U. zu Nachteilen in der Positionierung.

Im Google Webmaster Central Blog wird hierzu folgende Auskunft gegeben:

If my site is down for maintenance, how can I tell Googlebot to come back later rather than to index the “down for maintenance” page?
You should configure your server to return a status of 503 (network unavailable) rather than 200 (successful). That lets Googlebot know to try the pages again later.

googleUnter den Google Webmaster Tools werden die Probleme dargestellt. Fälschlicherweise denken viele man sollte bei der Wartungsseite bzw. temporären Problemen einen 302-HTTP-Header senden.

Zwei Fliegen mit einer Klappe schlagen

Doch genug geredet, wir schreiten zur Tat. Mit den folgenden Anweisungen richten wir eine Warteseite für unsere Webseite ein, die für menschliche Besucher die entsprechende Info enthält, aber auch die richtige Antwort für Google & Co. bereithält:

.htaccess

Glücklich wer einen Apache Server mit aktiviertem mod_rewrite sein eigen nennen kann (das sind über 95% von uns :-). Damit gehts bequem über die “.htaccess”-Datei, die wir im Root-Verzeichnis der Webseite mit folgendem Inhalt anlegen:

  1. Als erstes aktivieren wir das mod_rewrite Modul:
    Options +FollowSymLinks
    RewriteEngine On
  2. Dann definieren wir die Umleitungsregel. Bei welchen Zugriffen oder Seiten soll diese Regel NICHT greifen, die Warteseite selber und eventuell verwendete Bilder:
    ##-- Wartungsseite aktivieren START
    RewriteCond %{REQUEST_URI}       !^/index_wartung\.php$
    RewriteCond %{REQUEST_URI}       !^/images/logo\.jpg$

    und Zugriffe vom eigenen Rechner aus, wir wollen schliesslich eventuell die Webseite bzw. Änderung testen. Hier wird die IP-Adresse überprüft und ausgenommen. Die eigene IP-Adresse kann z.bsp. bei wieistmeineip.de herausgefunden werden:

    RewriteCond %{REMOTE_ADDR}       !111.111.111.111$
  3. Anschliessend setzen wir eine Umleitung aller Zugriffe (.*) auf die Warteseite:
    RewriteRule .*                   /index_wartung.php  [L]
    ##-- Wartungsseite aktivieren ENDE

index_wartung.php

Nachdem wir die korrekte Umleitung erledigt haben kümmern wir uns um die Warteseite, die den Hauptteil der SEO-konformen Warteseite erledigt. Ich mache diese hier beispielhaft in PHP, sie könnte aber genauso gut in PERL oder ASP geschrieben sein:

  1. Wir prüfen, ob es sich um einen Robot oder einen menschlichen Besucher handelt:

    [sourcecode language=”php”]

  2. mithilfe des ermittelten Wertes von “$robot” erstellen wir die Antwort für den Besucher:

    [sourcecode language=”php”]
    if($robot){
    @header(‘HTTP/1.1 503 Service Temporarily Unavailable’);
    @header(‘Status: 503 Service Temporarily Unavailable’);
    @header(‘Retry-After: 3600’);
    exit;
    }
    ?>
    [/sourcecode]
    Der Wert in “Retry-After” gibt dem Crawler die Information er/sie/es solle in einer Stunde nochmal vorbeischauen (Angabe in Sekunden). Der Klammeraffe vor den headers unterdrückt eventuelle Fehlerausgaben.

  3. Anschliessend geben wir die HTML-Seite für den ganz normalen Besucher aus, damit der weiß was los ist:[sourcecode language=”html”]





    Zur Zeit nicht erreichbar

    Unser Shop wird zur Zeit komplett überarbeitet und neu
    gestaltet. Wir bitten um Ihr Verständnis und bitten Sie es
    später nocheinmal zu versuchen.




    [/sourcecode]

Zurück in den Live-Zustand

Nach Abschluss der Arbeiten müssen lediglich die Einträger in der .htaccess Datei korrigiert werden und eine zusätzliche Zeile hinzugefügt bzw. aktiviert werden:

RewriteRule index_wartung\.php$   /index.php [R,L]

Die Wartungsseite selber bleibt bis auf Abruf im Root-Verzeichnis stehen.

Nach auskommentieren der entsprechenden Zeilen sollten die Zeilen in der .htaccess im Live-Zustand komplett so aussehen:

Options +FollowSymLinks
RewriteEngine On
##-- Wartungsseite aktivieren START
#RewriteCond %{REQUEST_URI}       !^/index_wartung\.php$
#RewriteCond %{REQUEST_URI}       !^/images/bild_wartung\.jpg$
#RewriteCond %{REMOTE_ADDR}       !111.111.111.111$
#RewriteRule .*                   /index_wartung.php  [L]
RewriteRule index_wartung\.php$   / [R,L]
##-- Wartungsseite aktivieren ENDE

Ausblick

Man könnte diese Geschichte noch ein wenig optimieren, indem man die Erkennung der Crawler noch über eine Liste steuert um so möglichst alle mit dem richtigen Header zu versorgen, denke aber der Aufwand dieser Lösung hält sich in Grenzen und ist doch effektiv.

Bin gespannt auf Kommentare von Euch.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.