Wie Google die robots.txt-Spezifikation interpretiert

Die automatisierten Crawler von Google unterstützen das Protokoll zum Ausschluss von Robots (Robots Exclusion Protocol, REP). Das bedeutet, dass die Crawler von Google vor dem Crawlen die robots.txt-Datei der Website herunterladen und parsen, um zu ermitteln, welche Teile der Website gecrawlt werden dürfen. Das REP gilt nicht für Google-Crawler, die von Nutzern verwaltet werden (z. B. Feedabos), oder Crawler, die zur Verbesserung der Nutzersicherheit verwendet werden (z. B. für die Malwareanalyse).

Auf dieser Seite wird beschrieben, wie Google das REP interpretiert. Den ursprünglichen Standard findest du unter RFC 9309.

Was ist eine robots.txt-Datei?

Wenn du nicht möchtest, dass Crawler auf bestimmte Bereiche deiner Website zugreifen, kannst du eine robots.txt-Datei mit den entsprechenden Regeln erstellen. Eine robots.txt-Datei ist eine einfache Textdatei mit Regeln, die festlegen, welche Crawler auf welche Teile einer Website zugreifen dürfen. Die robots.txt-Datei für example.com könnte beispielsweise so aussehen:

# This robots.txt file controls crawling of URLs under https://example.com.
# All crawlers are disallowed to crawl files in the "includes" directory, such
# as .css, .js, but Google needs them for rendering, so Googlebot is allowed
# to crawl them.
User-agent: *
Disallow: /includes/

User-agent: Googlebot
Allow: /includes/

Sitemap: https://example.com/sitemap.xml

Wenn du mit robots.txt noch nicht vertraut bist, lies zuerst die Einführung zu robots.txt-Dateien. Hier findest du Tipps zum Erstellen einer robots.txt-Datei.

Dateispeicherort und Gültigkeitsbereich

Die robots.txt-Datei muss, unter Berücksichtigung der unterstützten Protokolle, im Stammverzeichnis der Website abgelegt werden. Bei der URL für die robots.txt-Datei wird wie bei anderen URLs zwischen Groß- und Kleinschreibung unterschieden. Bei der Google Suche werden die Protokolle HTTP, HTTPS und FTP unterstützt. Unter HTTP und HTTPS rufen Crawler die robots.txt-Datei mit einer nicht konditionalen HTTP-GET-Anforderung ab. Unter FTP verwenden Crawler den Standardbefehl RETR (RETRIEVE) mit anonymer Anmeldung.

Die in der robots.txt-Datei enthaltenen Regeln gelten nur für den Host, auf dem sich die robots.txt-Datei befindet, das zugehörige Protokoll und die entsprechende Portnummer.

Beispiele für gültige robots.txt-URLs

Die folgende Tabelle enthält Beispiele für robots.txt-URLs und dafür, für welche URL-Pfade sie gültig sind. Spalte 1 enthält die URL einer robots.txt-Datei. Spalte 2 enthält Domains, auf die diese robots.txt-Datei angewendet würde, sowie Domains, auf die sie nicht angewendet würde.

Beispiele für robots.txt-URLs
https://example.com/robots.txt

Diese URL entspricht dem üblichen Schema. Sie gilt nicht für andere Subdomains, Protokolle oder Portnummern. Sie gilt für alle Dateien in allen Unterverzeichnissen auf demselben Host, mit demselben Protokoll und derselben Portnummer.

Gültig für:
  • https://example.com/
  • https://example.com/folder/file
Nicht gültig für:
  • https://other.example.com/
  • http://example.com/
  • https://example.com:8181/
https://www.example.com/robots.txt

Eine robots.txt-Datei in einer Subdomain gilt nur für die jeweilige Subdomain.

Gültig für: https://www.example.com/

Nicht gültig für:

  • https://example.com/
  • https://shop.www.example.com/
  • https://www.shop.example.com/
https://example.com/folder/robots.txt Dies ist keine gültige robots.txt-Datei. Crawler suchen nicht in Unterverzeichnissen nach robots.txt-Dateien.
https://www.exämple.com/robots.txt

Die IDNs entsprechen ihren Punycode-Versionen. Weitere Informationen finden Sie in RFC 3492.

Gültig für:
  • https://www.exämple.com/
  • https://xn--exmple-cua.com/

Nicht gültig für: https://www.example.com/

ftp://example.com/robots.txt

Gültig für: ftp://example.com/

Nicht gültig für: https://example.com/

https://212.96.82.21/robots.txt

Eine robots.txt-Datei, bei der eine IP-Adresse als Hostname verwendet wird, ist nur für das Crawlen genau dieser IP-Adresse als Hostname gültig. Sie gilt nicht automatisch für alle unter dieser IP-Adresse gehosteten Websites. Es ist allerdings möglich, dass die robots.txt-Datei von mehreren Domains gemeinsam genutzt wird. In diesem Fall steht sie auch unter dem gemeinsamen Hostnamen zur Verfügung.

Gültig für: https://212.96.82.21/

Nicht gültig für: https://example.com/ (auch wenn auf 212.96.82.21 gehostet)

https://example.com:443/robots.txt

Die standardmäßigen Portnummern (bei HTTP 80, bei HTTPS 443, bei FTP 21) entsprechen den jeweiligen standardmäßigen Hostnamen.

Gilt für:

  • https://example.com:443/
  • https://example.com/

Nicht gültig für: https://example.com:444/

https://example.com:8181/robots.txt

robots.txt-Dateien auf nicht standardmäßigen Portnummern gelten nur für Inhalte, die über diese Portnummern zur Verfügung gestellt werden.

Gültig für: https://example.com:8181/

Nicht gültig für: https://example.com/

Behandlung von Fehlermeldungen und HTTP-Statuscodes

Beim Anfordern einer robots.txt-Datei wirkt sich der HTTP-Statuscode der Serverantwort darauf aus, wie die Google-Crawler die robots.txt-Datei verwenden. In der folgenden Tabelle wird zusammengefasst, wie der Googlebot robots.txt-Dateien mit verschiedenen HTTP-Statuscodes behandelt.

Behandlung von Fehlermeldungen und HTTP-Statuscodes
2xx (success) Bei HTTP-Statuscodes, die eine erfolgreiche Aktion signalisieren, verarbeiten die Google-Crawler die robots.txt-Datei in der Form, wie sie vom Server bereitgestellt wird.
3xx (redirection)

Google folgt mindestens fünf Weiterleitungs-Hops gemäß Definition im RFC 1945, beendet dann den Vorgang und geht von einem 404-Fehler für die robots.txt-Datei aus. Das gilt auch in Bezug auf alle (mit „disallow“) für das Crawlen gesperrten URLs in der Weiterleitungskette, da der Crawler aufgrund der Weiterleitungen keine Regeln abrufen konnte.

Google ignoriert logische Weiterleitungen in robots.txt-Dateien (Weiterleitungen per Frames, JavaScript oder Meta-Refresh).

4xx (client errors)

Die Google-Crawler behandeln alle 4xx-Fehler mit Ausnahme von 429 so, als wäre keine gültige robots.txt-Datei vorhanden. Google geht also davon aus, dass es keine Crawling-Einschränkungen gibt.

5xx (server errors)

Da der Server keine eindeutige Antwort auf die robots.txt-Anforderung von Google geben konnte, interpretiert Google die Serverfehler 5xx und 429 vorübergehend so, als wäre die Website insgesamt nicht für das Crawlen zugelassen. Google versucht so lange, die robots.txt-Datei zu crawlen, bis ein anderer als ein Serverfehler-HTTP-Statuscode zurückgegeben wird. Der Fehler 503 (service unavailable) hat relativ häufige Wiederholungsversuche zur Folge. Wenn die robots.txt-Datei länger als 30 Tage nicht erreichbar ist, verwendet Google die letzte im Cache gespeicherte Kopie der robots.txt-Datei. Falls keine solche Datei verfügbar ist, geht Google davon aus, dass es keine Crawling-Einschränkungen gibt.

Wenn du das Crawling vorübergehend aussetzen musst, empfehlen wir, für jede URL auf der Website den HTTP-Statuscode 503 anzugeben.

Sollten wir feststellen, dass eine Website aufgrund fehlerhafter Konfiguration statt des Statuscodes 404 für fehlende Seiten den Statuscode 5xx zurückgibt, behandeln wir den 5xx-Fehler von dieser Website als einen 404-Fehler. Lautet die Fehlermeldung einer Seite, die den Statuscode 5xx zurückgibt, beispielsweise „Seite nicht gefunden“, wird der Statuscode als 404 (not found) interpretiert.

Weitere Fehler Eine robots.txt-Datei, die aufgrund von DNS- oder Netzwerkproblemen – z. B. Zeitüberschreitungen, ungültigen Antworten, zurückgesetzten oder unterbrochenen Verbindungen und HTTP-Chunking-Fehlern – nicht abgerufen werden kann, wird als Serverfehler eingestuft.

Caching

Google speichert den Inhalt der robots.txt-Datei normalerweise bis zu 24 Stunden lang im Cache. Sollte die Aktualisierung der im Cache gespeicherten Version jedoch nicht möglich sein, beispielsweise aufgrund einer Zeitüberschreitung oder eines 5xx-Fehlers, kann der Inhalt auch länger im Cache verbleiben. Die Antwort im Cache kann von verschiedenen Crawlern genutzt werden. Google kann die Verweildauer im Cache entsprechend der Anweisung „max-age“ im HTTP-Headerfeld „Cache-Control“ erhöhen oder verringern.

Dateiformat

Die robots.txt-Datei muss eine UTF-8-codierte Nur-Text-Datei sein und die Zeilen müssen durch CR, CR/LF oder LF getrennt sein.

Google ignoriert ungültige Zeilen in robots.txt-Dateien, einschließlich der Unicode-Byte Order Mark (BOM) am Anfang der robots.txt-Datei, und verwendet nur gültige Zeilen. Wenn die heruntergeladenen Inhalte statt aus robots.txt-Regeln aus HTML bestehen, versucht Google, die Inhalte zu parsen und Regeln zu extrahieren. Alles andere wird ignoriert.

Wenn die Zeichencodierung der robots.txt-Datei nicht UTF‑8 ist, kann es sein, dass Google Zeichen ignoriert, die nicht zum UTF‑8-Bereich gehören. Hierdurch können auch robots.txt-Regeln ungültig werden.

Google erzwingt für robots.txt-Dateien derzeit eine Höchstgrenze von 500 Kibibyte (KiB). Alles, was sich jenseits der maximalen Dateigröße befindet, wird ignoriert. Du kannst die Größe der robots.txt-Datei verringern, indem du Regeln zusammenfasst, die sonst zu einer übergroßen robots.txt-Datei führen. Platziere beispielsweise ausgeschlossenes Material in einem separaten Verzeichnis.

Syntax

Gültige robots.txt-Zeilen bestehen aus einem Feld, einem Doppelpunkt und einem Wert. Leerzeichen sind optional, werden aber empfohlen, um die Lesbarkeit zu verbessern. Leerzeichen am Anfang und Ende der Zeile werden ignoriert. Wenn du Kommentare hinzufügen möchtest, stelle dem Kommentar das Zeichen # voran. Alle Zeichen nach dem Zeichen # werden ignoriert. Das allgemeine Format ist <field>:<value><#optional-comment>.

Google unterstützt die folgenden Felder:

  • user-agent: Gibt an, für welchen Crawler die Regeln gelten.
  • allow: Gibt einen URL-Pfad an, der gecrawlt werden darf.
  • disallow: Gibt einen URL-Pfad an, der nicht gecrawlt werden darf.
  • sitemap: Gibt die vollständige URL einer Sitemap an.

Die Felder allow und disallow werden auch als Regeln (oder Anweisungen) bezeichnet. Die Regeln werden immer im Format rule: [path] angegeben, wobei [path] optional ist. Standardmäßig gibt es keine Beschränkungen für das Crawlen durch die angegebenen Crawler. Regeln ohne [path] werden von Crawlern ignoriert.

Der Wert [path] gilt, falls angegeben, relativ zum Stammverzeichnis der Website, von der die robots.txt-Datei abgerufen wurde. Dabei werden dasselbe Protokoll, dieselbe Portnummer, derselbe Host und dieselben Domainnamen verwendet. Der Pfadwert muss mit dem Zeichen / beginnen, das die Stammebene kennzeichnet. Beim Wert wird zwischen Groß- und Kleinschreibung unterschieden. Weitere Informationen zur auf Pfadwerten basierenden URL-Übereinstimmung

user-agent

Die Zeile user-agent gibt an, für welchen Crawler die Regeln gelten. Eine vollständige Liste der User-Agent-Strings, die du in deiner robots.txt-Datei verwenden kannst, findest du unter Google-Crawler (User-Agents).

Beim Wert der Zeile user-agent wird nicht zwischen Groß- und Kleinschreibung unterschieden.

disallow

Die disallow-Regel gibt Pfade an, auf die bestimmte Crawler nicht zugreifen dürfen. Diese Crawler sind in der user-agent-Zeile für die Gruppe angegeben, in der sich die disallow-Regel befindet. Regeln ohne Pfad werden von Crawlern ignoriert.

Wenn Seiten nicht gecrawlt werden dürfen, kann Google deren Inhalt zwar nicht indexieren, aber die URL kann möglicherweise dennoch indexiert und ohne Snippet in den Suchergebnissen angezeigt werden. Informationen zum Blockieren der Indexierung

Beim Wert der disallow-Regel wird zwischen Groß- und Kleinschreibung unterschieden.

Verwendung:

disallow: [path]

allow

Die allow-Regel gibt Pfade an, auf die die angegebenen Crawler zugreifen dürfen. Falls kein Pfad angegeben ist, wird die Regel ignoriert.

Beim Wert der allow-Regel wird zwischen Groß- und Kleinschreibung unterschieden.

Verwendung:

allow: [path]

sitemap

Google, Bing und andere größere Suchmaschinen unterstützen das Feld sitemap in robots.txt (definiert auf sitemaps.org).

Beim Wert des Feldes sitemap wird zwischen Groß- und Kleinschreibung unterschieden.

Verwendung:

sitemap: [absoluteURL]

Die Zeile [absoluteURL] verweist auf den Speicherort einer Sitemap- oder Sitemap-Indexdatei. Es muss sich um eine voll qualifizierte URL handeln, bei der das Protokoll und der Host angegeben sind. Die URL muss nicht URL-codiert sein. Sie muss sich auch nicht auf dem gleichen Host wie die robots.txt-Datei befinden. Du kannst mehrere sitemap-Felder angeben. Das Sitemap-Feld ist an keinen bestimmten User-Agent gebunden. Es kann von allen Crawlern befolgt werden, sofern Crawling für das Feld zugelassen ist.

Beispiel:

user-agent: otherbot
disallow: /kale

sitemap: https://example.com/sitemap.xml
sitemap: https://cdn.example.org/other-sitemap.xml
sitemap: https://ja.example.org/テスト-サイトマップ.xml

Gruppierung von Zeilen und Regeln

Du kannst Regeln, die für mehrere User-Agents gelten, gruppieren, indem du für jeden Crawler die user-agent-Zeile wiederholst.

Beispiel:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

user-agent: e
user-agent: f
disallow: /g

user-agent: h

In diesem Beispiel gibt es vier unterschiedliche Regelgruppen:

  • Eine Gruppe für den User-Agent „a“.
  • Eine Gruppe für den User-Agent „b“.
  • Eine Gruppe für die User-Agents „e“ und „f“.
  • Eine Gruppe für den User-Agent „h“.

Die technische Beschreibung einer Gruppe findest du in Abschnitt᠎ 2.1 des REP.

Reihenfolge der User-Agents

Für einen bestimmten Crawler gilt jeweils nur eine Gruppe. Die Google-Crawler bestimmen die richtige Regelgruppe, indem sie in der robots.txt-Datei diejenige Gruppe ermitteln, deren User-Agent am besten mit dem User-Agent des Crawlers übereinstimmt. Andere Gruppen werden ignoriert. Jeder nicht übereinstimmende Text wird ignoriert. Zum Beispiel sind sowohl googlebot/1.2 als auch googlebot* gleichwertig mit googlebot. Die Reihenfolge der Gruppen innerhalb der robots.txt-Datei spielt keine Rolle.

Wenn es für einen User-Agent mehr als eine bestimmte Gruppe gibt, werden alle Regeln aus den Gruppen, die für den bestimmten User-Agent gelten, intern zu einer einzelnen Gruppe zusammengefasst. Bestimmte User-Agent-Gruppen und globale Gruppen (*) werden nicht kombiniert.

Beispiele

Übereinstimmung von user-agent-Feldern

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

Die relevante Gruppe wird von den einzelnen Crawlern so bestimmt:

Befolgte Gruppe pro Crawler
Googlebot-News googlebot-news befolgt Gruppe 1, da dies die spezifischste Gruppe ist.
Googlebot (Web) googlebot befolgt Gruppe 3.
Googlebot StoreBot Storebot-Google befolgt Gruppe 2, da es keine spezifische Storebot-Google-Gruppe gibt.
Googlebot-News (beim Crawlen von Bildern) Beim Crawlen von Bildern befolgt googlebot-news Gruppe 1. googlebot-news crawlt die Bilder für Google Bilder nicht und befolgt daher nur Gruppe 1.
Otherbot (Web) Andere Google-Crawler befolgen Gruppe 2.
Otherbot (News) Andere Google-Crawler, die Nachrichteninhalte crawlen, aber nicht als googlebot-news zu erkennen sind, befolgen Gruppe 2. Auch wenn ein Eintrag für einen ähnlichen Crawler besteht, gilt dieser nur bei genauer Übereinstimmung.

Gruppierung von Regeln

Wenn eine robots.txt-Datei mehrere Gruppen enthält, die für einen bestimmten User-Agent relevant sind, werden die Gruppen von den Google-Crawlern intern zusammengeführt. Beispiel:

user-agent: googlebot-news
disallow: /fish

user-agent: *
disallow: /carrots

user-agent: googlebot-news
disallow: /shrimp

Die Crawler gruppieren die Regeln intern nach dem User-Agent. Beispiel:

user-agent: googlebot-news
disallow: /fish
disallow: /shrimp

user-agent: *
disallow: /carrots

Andere Regeln als allow, disallow und user-agent werden vom robots.txt-Parser ignoriert. Das bedeutet, dass das folgende robots.txt-Snippet als eine Gruppe behandelt wird und daher sowohl user-agent a als auch b von der Regel disallow: / betroffen sind:

user-agent: a
sitemap: https://example.com/sitemap.xml

user-agent: b
disallow: /

Bei der Verarbeitung der robots.txt-Regeln ignorieren die Crawler die Zeile sitemap. Beispielsweise würden die Crawler das vorherige robots.txt-Snippet so interpretieren:

user-agent: a
user-agent: b
disallow: /

Auf Pfadwerten basierende URL-Übereinstimmung

Google stellt anhand des Pfadwerts in den allow- und disallow-Regeln fest, ob eine Regel für eine bestimmte URL einer Website gilt. Hierzu wird die Regel mit der Pfadkomponente der URL verglichen, die der Crawler abrufen möchte. Zeichen im Pfad, die keine 7‑Bit-ASCII-Zeichen sind, können als UTF‑8-Zeichen oder als durch ein Escapezeichen (Prozentzeichen) gekennzeichnete UTF‑8-codierte Zeichen gemäß RFC 3986 eingeschlossen werden.

Google, Bing und andere größere Suchmaschinen unterstützen eine eingeschränkte Form von Platzhaltern für Pfadwerte. Diese Platzhalterzeichen sind:

  • * gibt 0 oder mehr Instanzen eines beliebigen Zeichens an.
  • $ kennzeichnet das Ende der URL.

In der folgenden Tabelle siehst du, wie sich die verschiedenen Platzhalterzeichen auf das Parsen auswirken:

Übereinstimmungen von Beispielpfaden
/ Jedes Stammverzeichnis und jeder URL auf einer niedrigeren Ebene stimmt mit dem Platzhalter überein.
/* Gleichbedeutend mit /. Der nachgestellte Platzhalter wird ignoriert.
/$ Nur das Stammverzeichnis stimmt überein. Alle URLs auf einer niedrigeren Ebene sind für das Crawling zulässig.
/fish

Jeder Pfad stimmt überein, der mit /fish beginnt. Dabei wird zwischen Groß- und Kleinschreibung unterschieden.

Übereinstimmungen:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Nicht-Übereinstimmungen:

  • /Fish.asp
  • /catfish
  • /?id=fish
  • /desert/fish
/fish*

Gleichbedeutend mit /fish. Der nachgestellte Platzhalter wird ignoriert.

Übereinstimmungen:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Nicht-Übereinstimmungen:

  • /Fish.asp
  • /catfish
  • /?id=fish
  • /desert/fish
/fish/

Sämtliche Inhalte im Ordner /fish/ stimmen überein.

Übereinstimmungen:

  • /fish/
  • /fish/?id=anything
  • /fish/salmon.htm

Nicht-Übereinstimmungen:

  • /fish
  • /fish.html
  • /animals/fish/
  • /Fish/Salmon.asp
/*.php

Jeder Pfad stimmt überein, der .php enthält.

Übereinstimmungen:

  • /index.php
  • /filename.php
  • /folder/filename.php
  • /folder/filename.php?parameters
  • /folder/any.php.file.html
  • /filename.php/

Nicht-Übereinstimmungen:

  • / (auch wenn auf /index.php verwiesen wird)
  • /windows.PHP
/*.php$

Jeder Pfad stimmt überein, der mit .php endet.

Übereinstimmungen:

  • /filename.php
  • /folder/filename.php

Nicht-Übereinstimmungen:

  • /filename.php?parameters
  • /filename.php/
  • /filename.php5
  • /windows.PHP
/fish*.php

Jeder Pfad stimmt überein, der /fish und .php in dieser Reihenfolge enthält.

Übereinstimmungen:

  • /fish.php
  • /fishheads/catfish.php?parameters

Nicht-Übereinstimmungen: /Fish.PHP

Reihenfolge der Regeln

Beim Abgleichen von robots.txt-Regeln mit URLs verwenden Crawler die Regel, die gemessen an der Länge des Regelpfads am spezifischsten ist. Bei widersprüchlichen Regeln, einschließlich Regeln mit Platzhaltern, verwendet Google die am wenigsten restriktive.

Die folgenden Beispiele zeigen, welche Regeln von Google-Crawlern auf eine bestimmte URL angewendet werden.

Beispielsituationen
https://example.com/page
allow: /p
disallow: /

Anwendbare Regel: allow: /p, da sie spezifischer ist.

https://example.com/folder/page
allow: /folder
disallow: /folder

Anwendbare Regel: allow: /folder, da Google im Fall von widersprüchlichen Regeln die am wenigsten restriktive verwendet.

https://example.com/page.htm
allow: /page
disallow: /*.htm

Anwendbare Regel: disallow: /*.htm, da der Regelpfad länger ist. Außerdem stimmt die Regel mit mehr Zeichen in der URL überein und ist daher spezifischer.

https://example.com/page.php5
allow: /page
disallow: /*.ph

Anwendbare Regel: allow: /page, da Google im Fall von widersprüchlichen Regeln die am wenigsten restriktive verwendet.

https://example.com/
allow: /$
disallow: /

Anwendbare Regel: allow: /$, da sie spezifischer ist.

https://example.com/page.htm
allow: /$
disallow: /

Anwendbare Regel: disallow: /, da die Regel allow nur für die Stamm-URL gilt.