Thiemo Mättig

Googles robots.txt-Erweiterung

Google versteht zwei Erweiterungen des von vielen als unzureichend bemängelten robots.txt-Standards: „*“ für beliebige Zeichenfolgen sowie den Ende-Anker „$“. Im Gegensatz zum üblichen Standard, der keine Platzhalter erlaubt und bei dem die Suchmuster grundsätzlich am Anfang verankert sind, lässt sich damit deutlich flexibler arbeiten. Es wird möglich, bestimmte Dateiendungen oder sogar Skriptaufrufe mit bestimmten Parametern von der Indizierung auszuschließen.

Wer mit regulären Ausdrücken vertraut ist, mag sich vorstellen, dass „Disallow: /x“ auf den regulären Ausdruck „^/x.*$“ oder „^/x“, was gleichbedeutend ist, abgebildet wird. Beides trifft nur zu, wenn der Ausdruck auf den Anfang des Dateinamens passt, wobei nachfolgende Zeichen egal sind. Google erweitert diesen Standard um „*“, was in der Sprache der regulären Ausdrücke zu „.*“ wird, und um die Möglichkeit, den Ende-Anker „$“ explizit anzugeben.

Im Stil einer Liste typischer Fehler möchte ich im Folgenden einen Einblick liefern, was die Google-Erweiterung kann und was nicht.

Keine Suchmaschine kennt Teilzeichenketten ohne Platzhalter.

Falsch:
User-agent: *
Disallow: mitgliederbereich
Die Suche nach Teilzeichenketten wird in dieser Form von keiner Suchmaschine unterstützt, da die Suchmuster immer nur auf den Beginn eines Dateinamens zutreffen können. Da außerdem jeder Dateiname zwangsläufig mit einem Schrägstrich beginnt, bewirkt das obige Beispiel normalerweise gar nichts.

Manche Suchroboter ergänzen den fehlenden Schrägstrich am Anfang automatisch, so dass das Muster dann wieder mit „/mitgliederbereich“ identisch ist. Auf Dateinamen, die diesen Begriff weiter hinten beinhalten, trifft das Muster jedoch niemals zu.

Google unterstützt Platzhalter, um diesen Mangel zu beheben. Für alle anderen Suchmaschinen müssen alle denkbaren Anfänge explizit aufgelistet werden.

Richtig:
User-agent: Googlebot
Disallow: /*mitgliederbereich
User-agent: *
Disallow: /mein_mitgliederbereich
Disallow: /pfad/mitgliederbereich
Disallow: /beispiel/mitgliederbereich

Mit den Platzhaltern kann nur Google etwas anfangen.

Falsch:
User-agent: *
Disallow: /*/referrers
Disallow: /geheim
Platzhalter und Anker werden nur von Google verstanden. Alle anderen Suchmaschinen sollten damit nicht verwirrt werden.
Richtig:
User-agent: Googlebot
Disallow: /*/referrers
User-agent: *
Disallow: /geheim

Auch Google-Muster sollten mit „/“ beginnen.

Falsch:
User-agent: Googlebot
Disallow: *.tar
Disallow: *privat
Der Dateiname sollte prinzipiell mit einem Schrägstrich beginnen. Dieser Schrägstrich repräsentiert das Stammverzeichnis der Domain. Da es keine Internetadresse der Form „http://www.example.comdatei.html“ und somit auch keinen Dateinamen der Form „datei.html“ geben kann, kann es auch keine robots.txt-Zeile ohne Schrägstrich am Anfang geben. Der Platzhalter „*“ macht die explizite Angabe des Schrägstriches zwar nicht unbedingt erforderlich, es ist aus Gründen der Eindeutigkeit jedoch sehr zu empfehlen.
Richtig:
User-agent: Googlebot
Disallow: /*.tar
Disallow: /*privat

Google-Muster können statt mit „/“ auch mit „*/“ beginnen.

Falsch:
User-agent: Googlebot
Disallow: /*/referrers
Das Suchmuster im obigen Beispiel blockiert nur „/pfad/referrers“, „/a/referrers_sites“ etc., nicht jedoch „/referrers“. Die Lösung, das Muster mit „*/“ beginnen zu lassen, stellt die einzige Ausnahme von der Regel dar, dass Suchmuster mit einem Schrägstrich als erstes Zeichen beginnen sollten.
Richtig:
User-agent: Googlebot
Disallow: */referrers

Platzhalter am Ende sind sinnlos.

Falsch:
User-agent: Googlebot
Disallow: /*
Disallow: /privat/*
Disallow: /geheim/*$
Der normale robots.txt-Standard ist bereits so definiert, dass die Suchmuster auch dann zutreffen, wenn im Dateinamen noch weitere Zeichen folgen. Der Stern am Ende bewirkt also nichts. Das Konstrukt „*$“ ist mit einem einfachen „*“ am Ende identisch und somit ebenfalls völlig wirkungslos.
Richtig:
User-agent: *
Disallow: /
Disallow: /privat/
Disallow: /geheim/

Vergisst man das "$", wird aus einer "endet mit"-Suche eine "enthält"-Suche.

Falsch:
User-agent: Googlebot
Disallow: /*.mp3
Disallow: /privat/*.zip
Disallow: /*.cgi
Das Muster „/*.mp3“ sucht nicht wie gewünscht nach Dateiendungen, sondern nach dem Vorkommen des Textes „.mp3“ innerhalb des Dateinamens. Es wird fälschlicherweise also auch „/mein.mp3-tutorial.html“ blockiert. Dieses Verhalten kann allerdings auch gewünscht sein. So soll beispielsweise „/skript.cgi?parameter=15“ auch dann blockiert werden, wenn dahinter weitere Zeichen folgen.
Richtig:
User-agent: Googlebot
Disallow: /*.mp3$
Disallow: /privat/*.zip$
Disallow: /*.cgi

Nicht sorgfältig konstruierte Suchmuster blockieren zuviel.

Falsch:
User-agent: Googlebot
Disallow: /*referrers
Das obige Suchmuster blockiert fälschlicherweise auch Dateinamen wie z.B. „/meinereferrerstrings.html“ und „/referrers.html“, obwohl es nur „/pfad/referrers“, „/a/referrers_sites“ etc. blockieren soll. Das besondere hierbei ist, dass ein mit „/*/“ beginnendes Suchmuster zwei Schrägstriche fordert, also nicht auf das Stammverzeichnis „/referrers“ zutrifft.
Richtig:
User-agent: Googlebot
Disallow: /*/referrers

Quellen: