Eine 404 Fehlerseite an Google senden die wirklich funktioniert

Sie möchten einen alten Artikel aus dem Google-Index entfernen dann sollten Sie vorher diesen Beitrag lesen

Einstieg in HTML und CSS

Einstieg in HTML und CSS - Webseiten erstellen mit HTML und CSS – ganz ohne Vorwissen. Sie suchen eine gute Einführung in die Gestaltung von Webseiten mit HTML und CSS? Dann liegen Sie mit diesem Buch genau richtig! Peter Müller erklärt Ihnen einprägsam und mit der richtigen Prise Humor, was Sie bei der modernen Webgestaltung mit HTML und CSS beachten müssen von den grundlegenden Prinzipien bis hin zu den neuesten Entwicklungen. Immer kompetent, klar und verständlich. Die anschaulichen Beispiele aus der Praxis können Sie leicht auf eigene Projekte anwenden. Mit vielen Abbildungen, die Ihnen das Verständnis der wichtigsten Webkonzepte erleichtern. Und der komplette Beispielcode steht Ihnen zum Lernen und Üben bereit. Perfekt für Webseiten-Selbermacher!

Kaufen...

Das Problem mit 404 Seiten

Das Problem ist hinlänglich bekannt, ein gut rankender Beitrag wurde von der Webseite entfernt oder verschoben und in Folge dessen, leidet das Ranking bei Google. Der Grund dafür ist, das Google (trotzt korrekter sitemap.xml) nach wie vor versucht, den Beitrag zu rufen und ihn natürlich in seinen Suchergebnissen gelistet hat und genau da muss er nun daherhaft raus. Für dieses Ziel existieren unterschiedliche Methoden, die unterschiedlich erfolgreich sind.

Zwar erkennt Google durchaus, das ein Beitrag von der Webseite gelöscht ist aber auf Grund der Tatsache, das der Beitragslink auch in externen Webseiten (weil der Beitrag woanders verlinkt ist) noch gefunden wird, nimmt Google diesen erneut in den Suchindex wieder auf.

RedirectPermanent - den Beitrag dauerhaft verschieben

Mit der Anweisung RedirectPermanent kann der Suchmaschine mitgeteilt werden, das ein Beitrag dauerhaft an einen neuen Platz verschoben wurde, in etwa so:

RedirectPermanent /thema-alt/beitrag-alt    https://www.domain.de/thema-neu/beitrag-neu

Diese Anweisung soll in der Datei .htaccess auf dem Server eingebaut werden, damit der Server den URI Request sofort umleiten kann und der Suchmaschine einen Returncode 301 zurückgibt.

Auch wenn dies gut funktioniert, gibt es ein Problem. Bei sehr alten Webseiten mit hoher externer Verlinkung verschwinden alte Links aus der Google-Suche nicht und halten sich hartnäckig. Der Grund wurde bereits oben aufgeführt - es sind alte, externe Links die Google und co auf anderen Webseiten findet und folglich diesen Link erneut in den Index aufnimmt.

Diese Technik funktioniert bei kleinen Webseiten mit geringem Beitragsvolumen ziemlich gut und ist auch von Google bevorzugt. Bei sehr großen Webseiten ist jedoch manchmal nicht ganz klar von wo eine alte Bildsource oder Beitrag, in eine neue Source übergeht und die Weiterleitung wird schwierig.

HTTP 404 oder 410 Error Seite senden

Für die ganz hartnäckigen Fälle ist es ratsam eine eigene 404 (nicht gefunden) oder 410 (Entfernt) Fehlerseite dem Aufrufer zu senden, um unmißverständlich klar zu machen, das es diesen Beitrag nicht mehr gibt. Die ganze Sache wird schwierig wenn unterschiedliche CMS verwendet werden und 404 oder 410 Errors unterschiedlich behandelt werden, daher macht es mehr Sinn ein eigenes kleines PHP-Script zu erstellen, das in allen CMS oder Webseiten funktionieren kann.

Zunächst ein korrekter Codeschnipsel zum senden eines 404 an den Aufrufer:

... <?php
...    ...
...    header("HTTP/1.1 404");
...    echo '<?xml version="1.0" encoding="iso-8859-1">';
...    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
...    echo '<html xmlns="https://www.w3.org/1999/xhtml">';
...    echo '<head>';
...    echo '<meta name="robots" content="noindex, follow" />';
...    echo '</head>';
...    echo '<body>';
...    echo '<h1>Error 404</h1>';
...    echo '<p>Der Beitrag wurde gelöscht, bzw. die Suchmaschine wurde mit einem Error 404 angewiesen, diesen Beitrag aus dem Index dauerhaft zu entfernen.</p>';
...    echo '<hr>';
...    echo '&copy by Administrator';
...    echo '</body>';
...    echo '</html>';
...    exit;
...    ...
... ?>

Beispielcode einer 404 Fehlerseite

Senden von header("HTTP/1.1 404")

Die Header-Anweisung, senden den gewünschten Fehlercode an den Aufrufer zurück, also Google oder Bing. Der Code signalisiert der Suchmaschine, das der Beitrag nicht gefunden wurde. Alternativ kann auch ein 410 Error gesendet werden, der anzeigt, das die Seite entfernt wurde - beide Varianten werden laut Google-Doku (https://support.google.com/webmasters/answer/9689846#make_permanent ) unterstützt und bevorzugt.

Setzen von noindex für Robots

Darüber hinaus ist es sehr wichtig, das noindex Tag für die meta-Angabe robots korrekt zu setzen, denn die Suchmaschine muss angewiesen werden, die Seite aus dem Index zu streichen.

Der Rest des Codeschnipsels ist im wesentlichen obligatorischer HTML-Code, der nach belieben verschönert werden kann.

Gelöschte Beitrag mit Error 404 oder 410 abfangen

Das oben gezeigte Codeschnipsel muss nur noch sinnvoll in ein Script eingebaut werden, um konkrete Beiträge mit der Error 404 oder der Error 410 Seite abzufangen. Es könnte etwa so aussehen:

...
... $content = explode("\n", file_get_contents("liste-geloeschter-beitraege.txt"));
...
... if (in_array($_SERVER['REQUEST_URI'], $content)) 
... {
...    file_put_contents("logfile.txt", $_SERVER['REQUEST_URI']).' - '.$_SERVER['HTTP_USER_AGENT']."\n", FILE_APPEND | LOCK_EX)!==false;
...
...    header("HTTP/1.1 404");
...    echo '<?xml version="1.0" encoding="iso-8859-1">';
...    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
...    echo '<html xmlns="https://www.w3.org/1999/xhtml">';
...    echo '<head>';
...    echo '<meta name="robots" content="noindex, follow" />';
...    echo '</head>';
...    echo '<body>';
...    echo '<h1>Error 404</h1>';
...    echo '<p>Der Beitrag wurde gelöscht, bzw. die Suchmaschine wurde mit einem Error 404 angewiesen, diesen Beitrag aus dem Index dauerhaft zu entfernen.</p>';
...    echo '<hr>';
...    echo '&copy by Administrator';
...    echo '</body>';
...    echo '</html>';
...    exit;
... }
...

Dieser Code kann in die index.php ganz an den Anfang kopiert werden

Kopieren Sie den Code am besten in die index.php des betreffenden CMS ganz nach oben, damit im Falle eines Error 404 die weitere Verarbeitung durch den Befehl exit verhindert wird.

Bei dem CMS Pico ist Vorsicht geboten. Das Codebeispiel muss zwischen die bestehenden PHP-Tags kopiert werden, da sonst das Sitemap-Plugin nicht mehr korrekt funktionieren könnte.

Eingabe-Liste gelöschter Beiträge

Als nächstes wird eine Liste mit allen URL angelegt, deren Beiträge als gelöscht (410) oder nicht gefunden (404) behandelt werden sollen. Im Code-Beispiel oben heißt die Datei:

liste-geloeschter-beitraege.txt

Die Datei nimmt URL für die Prüfung auf

und liegt im Wurzelverzeichnis, wie auch die index.php Datei. In dieser Liste werden die verschiedenen URL wie folgt nacheinander notiert:

/thema-a/beitrag-aa-alt
/thema-a/beitrag-ab-alt
/thema-b/beitrag-ab-alt
/thema-b/beitrag-bb-alt

Je Zeile eine URL eintragen

In der Eingabedatei werden die physikalischen URL (Slug) des gelöschten Beitrags notiert, ohne den führenden Domain-Namen und beginnend mit dem Schrägstrich. Die korrekte Schreibweise ist hier bedeutsam, da der IF in Zeile 3 einen exakten Vergleich der beiden Strings durchführt. Im Falle eines Treffers, sendet das Script dann den Error 404 an die Suchmaschine oder den Aufrufer, gibt eine passende Meldung am Browser aus und stoppt jedwede Weiterverarbeitung.

Das Script legt zudem ein kleines logfile.txt an, in dem es die mit Error 404 oder 410 behandelten Aufrufe sauber notiert. Diese Liste sollte vom Admin regelmäßig untersucht werden.

Sperrung durch robots.txt

Natürlich bestünde auch die Möglichkeit, die Suchmaschine anzuweisen, bestimmte Verzeichnisse nicht mehr zu crawlen, ein Eintrag in der robots.txt erledigt das ganz einfach. Google findet dies allerdings sehr schlecht und straft das Ranking hart ab. Zudem hält sich nicht jeder Bot an die Anweisungen der robots.txt und durchsucht den Content der Webseiten trotzdem.

Fazit

RedirectPermanent: Diese Methode funktioniert bei kleinen Webseiten sehr gut, sogar gelöschte Beiträge können so abgehandelt werden, indem die alte URL auf einen Artikel verweist, der mit dem noindex Tag in den Meta-Attributen versehen ist. Bei sehr großen Webseiten, bei denen sich die Beitragsstrukturen und Namen im laufe der Jahre entwickelt haben kommt diese Methode an die Grenze des machbaren. Es entstünden Redirekt-Einträge in der htaccess mit vielen 1000 Einträgen - das ist nicht mehr wartbar.

Error 404 und Error 410: Wenn unmißverständlich klar gemacht werden soll, das es diesen Beitrag nicht mehr gibt oder die Domain aus vielen hundert Beiträgen besteht, dann ist das der beste Weg, der zudem auch von Google laut Doku bevorzugt wird. Allerdings dürfen dann auch keine weiteren Sourcen wie Bilder oder PDF unter der alten URL erreichbar sein - beispielsweise ist der Bot der Google-Bildersuche einer, der solche Sourcen dennoch finden würde und die Seite sofort wieder indexiert.

Externe Webseiten: Die Entfernung eines Beitrags aus dem Google-Index dauert seine Zeit. Maßgeblich davon beeinflusst ist auch, ob dieser Beitrag wonders im Internet referenziert wird, dann wird es schwierig, denn das sieht Google ebenfalls. Es bleibt daher immer ein kleiner Bodensatz von URL übrig, die dann mittels RedirectPermanent auf eine Beitragsseite mit noindex-Attribut weitergeleitet werden können.


von Oliver Lohse