molily: Googlebot kommt zu oft

Hallo zusammen,

ich betreue eine Webseite mit circa dreißig für Suchmaschinen indizierbaren mit PHP dynamisch generierten Dokumenten. Dynamisch in erster Linie, weil Kopf, Navigation und Fuß des Layouts jeweils über ein Script mittels include eingebunden werden. Darüber hinaus ist der Hauptinhalt von einigen Dokumenten zwar selbst statisch, andere werden aber komplett dynamisch unter Rückgriff auf verschiedene Bibliotheken-Scripts generiert, welche wiederum auf Datendateien zugreifen. Es gibt auch Dokumente, welche auf eine MySQL-Datenbank zurückgreifen. Theoretisch kann sich jedes Dokument somit von Zugriff zu Zugriff ändern, praktisch hat das aber wenig Relevanz, weil die Inhalte momentan recht selten aktualisiert werden und die Informationen über einen längeren Zeitraum erhalten bleiben (und dann ins Archiv wandern, welches ein Link entfernt liegt). Die wirklich dynamischen Seiten, welche beispielsweise das Durchblättern einer Datenbank beziehungsweise eine Sucheingabe ermöglichen und entsprechend GET- und POST-Parameter erwarten, sollen Suchmaschinen sowieso nicht indizieren.

Das Problem ist nun, dass der Googlebot seit kurzem andauernd vorbeikommt. Das heißt, er kommt zumindest einmal täglich und crawlt *alle* der circa dreißig PHP-Seiten, obwohl sie sich teilweise seit Monaten nicht geändert haben. Manche Dokumente werden auch bis zu viermal täglich angefordert (ohne dass sie sich geändert hatten), manchmal im Abstand von wenigen Stunden. Am 29.08. wurde die robots.txt vom Googlebot achtzehn Mal angefordert, ansonsten mindestens zweimal täglich. Es gibt auch einige komplett statische .html-Seiten, welche er entsprechend seltener crawlt, weil der Server deren Last-Modified kennt. Aber auch mit denen habe ich Probleme, denn Google sendet zwar brav einen Conditional GET, dann aber direkt danach einen gewöhnlichen, nach folgendem Schema:

64.68.82.195 - [03/Sep/2003:23:41:36 +0200] "GET /bla1.html HTTP/1.0" 304 - "-" "Googlebot/2.1 (+http://www.googlebot.com/bot.html)"
64.68.82.195 - [03/Sep/2003:23:41:39 +0200] "GET /bla1.html HTTP/1.0" 200 2332 "-" "Googlebot/2.1 (+http://www.googlebot.com/bot.html)"
64.68.82.37 - [03/Sep/2003:23:48:31 +0200] "GET /bla2.html HTTP/1.0" 304 - "-" "Googlebot/2.1 (+http://www.googlebot.com/bot.html)"
64.68.82.37 - [03/Sep/2003:23:49:03 +0200] "GET /bla2.html HTTP/1.0" 200 2603 "-" "Googlebot/2.1 (+http://www.googlebot.com/bot.html)"
64.68.82.26 - [04/Sep/2003:01:27:17 +0200] "GET /bla3.html HTTP/1.0" 304 - "-" "Googlebot/2.1 (+http://www.googlebot.com/bot.html)"
64.68.82.26 - [04/Sep/2003:01:27:30 +0200] "GET /bla3.html HTTP/1.0" 200 2680 "-" "Googlebot/2.1 (+http://www.googlebot.com/bot.html)"

Dadurch werden die statischen Dokumente meinem Geschmack nach ebenfalls zu oft gecrawlt. Da sich das Last-Modified seit Monaten nicht geändert hat, weiß ich nicht, warum Google alle paar Tage bis mehrmals täglich mit If-Modified-Since nachfragt und in vielen Fällen die Datei sowieso neu crawlt.

Mein Hauptaugenmerk liegt aber auf den dynamischen Seiten. Ich würde natürlich einen korrekten Last-Modified-Header senden, wenn es denn so einfach wäre, diesen Zeitpunkt festzustellen. Wie gesagt sind bei der Generierung eines Dokuments zahlreiche Lib-Scripte und Datenbanken in Form von Textdateien und MySQL involviert. Es wäre ein riesiger Aufwand, die Änderungsdaten aller Kindscripte und Kindeskinderincludes auszulesen - nun gut, wirklich relevant wären nur die Datenbanken, die Libs verarbeiten nur und generieren das Markup - und einen entsprechenden Last-Modified-Header zu berechnen. Das wäre noch mehr Flickschusterei als ich jetzt schon habe.

Es würde mir absolut reichen, wenn Google jede Woche die häufig aktualisierenden Seiten crawlt und beim monatlichen Dance den Rest überprüft. Warum Google die Seite so hoch bewertet, ist mir schleierhaft, sie hat einen vergleichsweise niedrige Linkpopularität und ändert sich wie gesagt selten (ich nehme an, Google vergleicht Prüfsummen?). Da die Seite momentan auch wenig Besucher hat, macht Googlebot zehn Prozent des Traffics aus. Was kann ich das verhindern, ohne die halbe Seite umzuschreiben? Wenn ich beispielsweise output buffering verwende, würde es etwas helfen, wenn ich einen ETag durch MD5 generiere (unterstützt der Googlebot das, ich finde dazu nichts)?

Grüße,
Mathias

  1. Das Problem ist nun, dass der Googlebot seit kurzem andauernd vorbeikommt. Das heißt, er kommt zumindest einmal täglich

    Das Problem habe ich ebenfalls, wenn auch nicht ganz so extrem (oder es ist mir noch nicht so aufgefallen).

    Es gibt auch einige komplett statische .html-Seiten, welche er entsprechend seltener crawlt, weil der Server deren Last-Modified kennt.

    Hast Du mal versucht, nur für den GoogleBot (User-Agent) eine irgendwie halbwegs passende Last-Modified-Angabe zu senden? Sie muß ja nicht exakt stimmen.

    Aber auch mit denen habe ich Probleme, denn Google sendet zwar brav einen Conditional GET, dann aber direkt danach einen gewöhnlichen, nach folgendem Schema:

    Sei froh, daß er bei Dir überhaupt If-Last-Modified sendet ;) Andere Leute werden gleich plattgewalzt..

    Wenn ich beispielsweise output buffering verwende, würde es etwas helfen, wenn ich einen ETag durch MD5 generiere

    Rein vom Gefühl her würde ich mir von einer Zeitangabe (eben Last-Modified) mehr versprechen, denn eine Prüfsumme sagt eher noch weniger als Last-Modified darüber aus, wie oft sich ein Neubesuch lohnt. Wie dem auch sei: Probieren geht über studieren.

    Vielleicht solltest Du Dich auch mal bei Google beschweren. Du bist nicht der einzige, der von Google terrorisiert wird, vielleicht merken die ja irgendwann mal was.

    Gruß,
      soenk.e