Was ist robots.txt und wie liest man die Datei?

Veröffentlicht:

15 Min. Lesezeit

Acar Diveroli
Autor: Acar Diveroli
Eine Dokumentkarte mit den Zeilen User-agent, Disallow und Allow, verbunden mit einem Bot-Würfel

Hängen Sie an die Adresse einer beliebigen Website /robots.txt an und öffnen sie, sehen Sie meist eine einfache Textdatei mit wenigen Zeilen. In dieser Datei sagt die Website Suchmaschinen, Crawlern und Scrapern: „Diese Pfade bitte nicht crawlen." Für SEO-Fachleute ist sie eine Einstellung, die beeinflusst, wie die Website in Suchmaschinen erscheint; für Entwickler, die Daten erfassen, ist sie das erste Dokument, das vor dem Start zu lesen ist.

In diesem Artikel erklären wir, was robots.txt ist, wo die Datei liegt und wie die Regeln zu lesen sind, einschließlich User-agent, Disallow, Allow, Platzhaltern und der Regel des längsten Treffers. Danach behandeln wir die Zeilen Crawl-delay und Sitemap, die Frage, ob die Datei rechtlich bindend ist, wie ein Scraper robots.txt mit Python lesen sollte (und wann der Parser der Standardbibliothek falsch liegt), häufige SEO-Fehler und Zeilen für KI-Bots.

Was ist robots.txt?

robots.txt ist die Datei des Robots Exclusion Protocol, das seit 1994 genutzt wird und sich jahrelang ohne schriftlichen Standard verbreitet hat. 2022 wurde das Protokoll mit RFC 9309 zum offiziellen Standard. Er legt das Format der Datei fest, wie Regeln abgeglichen werden und was zu tun ist, wenn die Datei nicht erreichbar ist.

Die Aufgabe der Datei ist einfach: Der Websitebetreiber gibt an, von welchen Pfaden sich automatisierte Besucher fernhalten sollen. Typische Gründe:

  • Serverlast: Pfade wie Such- und Filterseiten, die bei jeder Anfrage die Datenbank belasten.
  • Wenig wertvolle oder doppelte Inhalte: Tausende gleiche Seiten durch Sortierparameter, Warenkorb- und Kontoseiten.
  • Crawl-Budget: die Zeit von Suchmaschinen-Bots auf wichtige Seiten lenken.
  • Präferenz zur Inhaltsnutzung: bestimmte Bots, etwa solche, die Daten für KI-Training sammeln, vom Crawlen abhalten.

robots.txt ist kein Sicherheitsmechanismus. Die Datei ist öffentlich, und einen Pfad mit Disallow zu sperren, verrät auch, dass es ihn gibt. Seiten, die privat bleiben müssen, gehören hinter Passwörter, Zugriffskontrolle oder Methoden wie noindex.

Wo liegt robots.txt?

Die Datei liegt immer im Stammverzeichnis der Website und heißt in Kleinbuchstaben robots.txt:

  • https://example.com/robots.txt ist gültig.
  • https://example.com/folder/robots.txt liest kein Bot.

Die Regeln gelten pro Protokoll, Host und Port. https://example.com/robots.txt gilt nur für https://example.com; die Subdomain https://shop.example.com braucht eine eigene Datei. Auch die Versionen http:// und https:// sind technisch getrennte Dateien.

RFC 9309 legt fest, was geschieht, wenn die Datei nicht erreichbar ist:

  • Eine 4xx-Antwort (die Datei existiert nicht): Der Crawler darf annehmen, dass es auf der Website keine Beschränkungen gibt.
  • Eine 5xx-Antwort oder ein Netzwerkfehler (die Datei ist nicht erreichbar): Der Crawler soll annehmen, dass die gesamte Website gesperrt ist.

Der Standard sagt außerdem, dass Crawler die Datei zwischenspeichern dürfen, eine gespeicherte Version aber in der Regel nicht länger als 24 Stunden nutzen sollten. Eine Änderung an der Datei kann also bis zu einem Tag brauchen, bis sie bei Bots ankommt.

Wie liest man die Regeln?

Unten sehen Sie eine realistische Beispieldatei für einen Onlineshop:

text
User-agent: *
Disallow: /cart
Disallow: /account/
Disallow: /search
Allow: /search/popular
Disallow: /*?sort=
Disallow: /*.pdf$
Crawl-delay: 5

User-agent: ExamplePriceBot
Disallow: /account/
Allow: /

User-agent: GPTBot
Disallow: /

Sitemap: https://example.com/sitemap.xml
ZeileBedeutung
User-agent: *Die Regeln dieser Gruppe gelten für jeden Bot ohne eigene Gruppe
Disallow: /cartJeder Pfad, der mit /cart beginnt: /cart, /cart/add, sogar /cartoon
Disallow: /account/Der Ordner /account/ und alles darunter; /account (ohne Schrägstrich am Ende) passt nicht
Disallow: /search/search, /search?q=phone, /search/popular
Allow: /search/popularEine Ausnahme vom vorigen Verbot; sie ist länger, daher darf dieser Pfad gecrawlt werden
Disallow: /*?sort=* steht für eine beliebige Zeichenfolge: jede Adresse mit dem Parameter ?sort=
Disallow: /*.pdf$$ markiert das Ende der Adresse: Adressen, die auf .pdf enden; /catalog.pdf?v=2 passt nicht
Crawl-delay: 5Die Bitte, zwischen Anfragen 5 Sekunden zu warten (nicht standardisiert, unten erklärt)
User-agent: ExamplePriceBotEine Gruppe nur für diesen Bot; er liest die *-Gruppe oben gar nicht
Allow: /Für diesen Bot ist alles außer den Kontoseiten offen
User-agent: GPTBot + Disallow: /GPTBot soll die Website überhaupt nicht crawlen
Sitemap:Die Adresse der Sitemap; unabhängig von Gruppen

User-agent-Gruppen

Die Datei besteht aus Gruppen. Jede Gruppe beginnt mit einer oder mehreren User-agent-Zeilen, und die folgenden Regeln gehören zu dieser Gruppe. Liest ein Bot die Datei:

  1. Sucht er eine Gruppe, die zu seinem Namen passt. Abgeglichen wird das Produkttoken des Bots (zum Beispiel GPTBot), ohne Beachtung der Groß- und Kleinschreibung, nicht die vollständige User-Agent-Zeichenkette des Browsers.
  2. Findet er eine eigene Gruppe, wendet er nur deren Regeln an. Die Regeln der *-Gruppe kommen für diesen Bot nicht hinzu.
  3. Gibt es keine eigene Gruppe, wendet er die *-Gruppe an.
  4. Gibt es gar keine Gruppen, nimmt er an, dass die Website keine Beschränkungen hat.

Punkt 2 wird oft übersehen. Im Beispiel oben hat ExamplePriceBot eine eigene Gruppe, daher betreffen ihn weder die Verbote für /cart und /search noch die Bitte um Crawl-delay.

Disallow, Allow und die Regel des längsten Treffers

Regeln passen als Pfadpräfix: Disallow: /cart erfasst jeden Pfad, der mit /cart beginnt. Treffen mehrere Regeln auf eine Adresse zu, gewinnt laut RFC 9309 die längste passende Regel. Die Adresse /search/popular passt sowohl zu Disallow: /search (7 Zeichen) als auch zu Allow: /search/popular (15 Zeichen); das längere Allow gewinnt, und die Seite darf gecrawlt werden.

Sind zwei Regeln gleich lang und eine ist Allow, die andere Disallow, empfiehlt der Standard, Allow zu bevorzugen. Die Reihenfolge der Regeln in der Datei ändert das Ergebnis nicht. Wie wir unten sehen, setzen manche Parser genau das nicht korrekt um.

Platzhalter

  • * passt auf null oder mehr Zeichen: Disallow: /*?session= sperrt jede Adresse mit einem Sitzungsparameter.
  • $ markiert das Ende der Adresse: Disallow: /*.pdf$ sperrt nur Adressen, die auf .pdf enden.

Bleibt der Wert einer Disallow:-Zeile leer (Disallow:), wird kein Pfad gesperrt. Disallow: / sperrt die gesamte Website. Der Unterschied von einem Zeichen zwischen diesen beiden Zeilen kann einen der teuersten SEO-Fehler verursachen.

Die Zeilen Crawl-delay und Sitemap

Crawl-delay ist die Bitte an einen Bot, zwischen aufeinanderfolgenden Anfragen an dieselbe Website eine bestimmte Zahl von Sekunden zu warten. Sie ist nicht Teil von RFC 9309, wird aber von vielen Crawlern und Scrapern gelesen. Google unterstützt die Zeile Crawl-delay nicht; die Crawl-Geschwindigkeit von Google legen dessen eigene Systeme fest. Einige andere Suchmaschinen berücksichtigen die Zeile.

Für einen Scraper ist der Wert von Crawl-delay eine ausdrücklich geäußerte Geschwindigkeitspräferenz des Betreibers, und auch ohne Standard ist sie ein Signal, dem man folgen sollte. Weitere Wege, Rate-Limits zu respektieren, beschreibt Web Scraping ohne Sperren.

Die Zeile Sitemap gibt die vollständige Adresse der Sitemap-Datei an. Sie ist unabhängig von Gruppen, darf überall in der Datei stehen und mehrfach vorkommen. Für Suchmaschinen wie für Scraper ist sie der direkte Weg zur Seitenliste, statt die ganze Website Link für Link zu durchsuchen.

Ist robots.txt rechtlich bindend?

Technisch ist robots.txt eine Bitte, keine Zugriffssperre. Dass ein Pfad in der Datei gesperrt ist, verhindert den Zugriff nicht physisch. Die Antwort auf „Muss ich robots.txt befolgen?" ist daher eher rechtlich und ethisch als technisch.

Was Sie in der Praxis wissen sollten:

  • Jeder legitime Crawler befolgt sie. Suchmaschinen, Archivdienste und Unternehmens-Crawler lesen und befolgen robots.txt.
  • Sie wird zusammen mit den Bedingungen der Website betrachtet. Viele Nutzungsbedingungen regeln automatisierten Zugriff mit Verweis auf robots.txt. Die Nutzungsbedingungen von Google etwa zählen automatisierten Zugriff, der gegen maschinenlesbare Anweisungen wie robots.txt verstößt, zu den Beispielen für Missbrauch.
  • Sie kann in Streitfällen ein entscheidendes Signal sein. Ein Scraper, der ausdrücklich gesperrte Pfade crawlt, gilt als jemand, der die Präferenz der Website wissentlich ignoriert hat.
  • robots.txt zu befolgen, macht nicht alles legal. Personenbezogene Daten von einem offenen Pfad zu erfassen, ist von Pflichten nach Gesetzen wie der DSGVO nicht ausgenommen.

Den rechtlichen Rahmen der Datenerfassung behandeln wir in Ist Web Scraping legal?. Dieser Artikel ist keine Rechtsberatung; für Ihren Fall empfehlen wir, eine Anwältin oder einen Anwalt zu konsultieren.

Wie sollte ein Scraper robots.txt lesen?

Die Python-Standardbibliothek enthält das Modul urllib.robotparser, dessen offizielle Dokumentation die Grundnutzung beschreibt. Als wir das Modul mit der Beispieldatei oben testeten, wich es jedoch an vier Stellen von RFC 9309 ab:

FallRFC 9309urllib.robotparser
Erst Disallow: /search, dann Allow: /search/popular/search/popular darf gecrawlt werden (längste Regel)Darf nicht gecrawlt werden; es gilt die erste passende Regel
Dieselben zwei Regeln in umgekehrter ReihenfolgeDarf gecrawlt werdenDarf gecrawlt werden
Disallow: /*?sort=/category?sort=price ist gesperrtOffen; * wird nicht unterstützt
Disallow: /*.pdf$/catalog.pdf ist gesperrtOffen; $ wird nicht unterstützt

Dazu kommen zwei Verhaltensunterschiede:

  • Übergibt man als Bot-Namen die vollständige User-Agent-Zeichenkette (Mozilla/5.0 (compatible; GPTBot/1.2; ...)), fand das Modul die eigene Gruppe des Bots nicht und wandte die *-Gruppe an. Der Funktion darf nur das Produkttoken (GPTBot) übergeben werden.
  • Antwortet die Datei mit 401 oder 403, betrachtet das Modul die gesamte Website als gesperrt. RFC 9309 behandelt 4xx-Antworten dagegen als „Datei existiert nicht". Weil die Funktion read() des Moduls die Datei mit dem Standard-User-Agent von Python und ohne Timeout herunterlädt, kann auf einer Website, die diesen Wert sperrt, fälschlich „alles gesperrt" herauskommen.

Deshalb ist es sicherer, die Datei mit dem eigenen Client herunterzuladen, an parse() zu übergeben und bei Dateien mit Platzhaltern einen umfassenderen Parser zu nutzen:

python
from urllib.parse import urlsplit
from urllib.robotparser import RobotFileParser

import requests

BOT_NAME = "ExamplePriceBot"
USER_AGENT = f"{BOT_NAME}/1.0 (+https://example.com/about-our-bot)"


def robots_for(site, session):
    """Lädt robots.txt und wendet das 4xx- und 5xx-Verhalten aus RFC 9309 an."""
    parser = RobotFileParser()
    try:
        response = session.get(f"{site}/robots.txt", timeout=10)
    except requests.RequestException:
        parser.parse(["User-agent: *", "Disallow: /"])  # nicht erreichbar: alles gesperrt
        return parser
    if response.status_code >= 500:
        parser.parse(["User-agent: *", "Disallow: /"])
    elif response.status_code >= 400:
        parser.parse([])  # keine Datei: keine Beschränkungen
    else:
        parser.parse(response.text.splitlines())
    return parser


session = requests.Session()
session.headers["User-Agent"] = USER_AGENT

url = "https://example.com/product/123"
site = "{0.scheme}://{0.netloc}".format(urlsplit(url))
robots = robots_for(site, session)

if robots.can_fetch(BOT_NAME, url):
    delay = robots.crawl_delay(BOT_NAME) or 2
    print(f"Crawlbar, zwischen Anfragen werden {delay} s gewartet")
else:
    print("robots.txt sperrt diese Adresse, wird übersprungen")

print("Sitemaps:", robots.site_maps())

Zwei Details im Beispiel sind wichtig: can_fetch erhält nur den Bot-Namen, nicht die vollständige User-Agent-Zeichenkette; und die Datei wird pro Website einmal geladen und im Speicher gehalten, nicht für jede Seite neu.

Sind Ihnen Platzhalter und die Regel des längsten Treffers wichtig, setzt die von Scrapy genutzte Bibliothek protego diese Regeln näher am RFC um. Welchen Parser Sie auch nutzen, prüfen Sie die Ergebnisse, indem Sie einige Adressen von Hand gegen die Datei der Zielseite abgleichen.

Häufige SEO-Fehler

Weil robots.txt die Sichtbarkeit in Suchmaschinen direkt beeinflusst, wird die Datei auch auf SEO-Seite oft falsch konfiguriert:

  • Beim Livegang die Zeile Disallow: / vergessen. Die Zeile, die in der Testumgebung die Website sperrt, gelangt auf die Live-Website, und die Website verschwindet aus der Suche.
  • Eine Seite per robots.txt aus dem Index entfernen wollen. Disallow verhindert, dass die Seite gecrawlt wird, nicht, dass sie indexiert wird. Eine gesperrte Seite mit Links von anderen Websites kann nur mit ihrer Adresse in den Suchergebnissen erscheinen, ohne dass der Inhalt gelesen wurde. Zum Entfernen aus dem Index muss die Seite crawlbar sein und noindex tragen.
  • CSS- und JavaScript-Dateien sperren. Die Suchmaschine kann die Seite nicht korrekt darstellen, und die Bewertung von Mobilfreundlichkeit und Inhalt leidet.
  • Schrägstriche am Ende verwechseln. Disallow: /blog sperrt sowohl den Ordner /blog/ als auch eine Seite /blogger-guide.
  • Groß- und Kleinschreibung übersehen. Pfadabgleiche unterscheiden Groß- und Kleinschreibung: Disallow: /Search sperrt /search nicht.
  • Keine Datei auf der Subdomain ablegen. shop.example.com braucht eine eigene robots.txt.
  • Sofortige Wirkung erwarten. Bots lesen die Datei aus dem Cache; eine Änderung kann bis zu einem Tag brauchen.

Die Dokumentation von Google Search Central erklärt ausführlich, wie Google robots.txt auslegt, einschließlich Dateigrößenlimit und Verhalten bei Fehlercodes. Zur Prüfung von Suchergebnissen in verschiedenen Ländern sehen Sie sich unsere Seite zur SEO-Proxy-Lösung an.

Zeilen für KI-Bots

In den letzten Jahren wurden robots.txt-Dateien am häufigsten um Zeilen für die Crawler von KI-Unternehmen ergänzt. Manche dieser Bots sammeln Daten für das Modelltraining, andere rufen auf die Frage eines Nutzers hin eine Seite in Echtzeit ab. Verbreitete Produkttokens:

  • GPTBot (OpenAI)
  • ClaudeBot (Anthropic)
  • CCBot (Common Crawl)
  • Google-Extended: kein eigener Crawler, sondern ein Token, das steuert, ob von bestehenden Google-Bots erfasste Inhalte in Gemini-Modellen genutzt werden; es beeinflusst die Sichtbarkeit in der Google-Suche nicht.

Eine Website, die das Crawlen für Trainingszwecke sperren, für Suchmaschinen aber offen bleiben will, kann etwa diese Zeilen ergänzen:

text
User-agent: GPTBot
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: Google-Extended
Disallow: /

Unternehmen fügen von Zeit zu Zeit neue Bot-Namen hinzu oder teilen die Aufgaben bestehender Bots auf. Prüfen Sie beim Schreiben dieser Zeilen oder beim Einstellen eines Scrapers darauf die aktuelle Dokumentation des jeweiligen Unternehmens. Ein Beispiel für Maßnahmen, die Websites auf anderen Ebenen gegen Bots ohne robots.txt-Treue ergreifen, finden Sie in Cloudflare Precursor. Wie KI-Modelle Webdaten nutzen, zeigt Web Scraping mit GPT-6 Astra.

Bauen Sie Ihren eigenen KI-Agenten oder Scraper, geben Sie ihm ein festes Produkttoken und lesen Sie robots.txt mit diesem Namen. Der Websitebetreiber kann dann eine Gruppe nur für Sie schreiben und Ihnen seine Crawling-Präferenzen direkt mitteilen.

Anwendungsfälle

  • Ein großer Crawler: lädt robots.txt einmal pro Domain, speichert sie zwischen und prüft jede Adresse, bevor sie in die Warteschlange kommt. Die Skalierung beschreibt unsere Seite zur Web-Crawler-Lösung.
  • Ein Skript zur Preisbeobachtung: nimmt Produktadressen aus der Sitemap, besucht die von robots.txt gesperrten Such- und Filterseiten nie und beachtet Crawl-delay. Den allgemeinen Aufbau zeigt unsere Seite zur Datenerfassung.
  • Ein SEO-Audit: prüft vor dem Livegang, dass robots.txt keine wichtigen Seiten sperrt und die Sitemap-Zeile korrekt ist.
  • Eine Richtlinie für KI-Bots festlegen: Der Inhaltseigentümer entscheidet, welche Bots die Website zu welchem Zweck crawlen dürfen, und ergänzt die entsprechenden Zeilen.

Manche Websites platzieren außerdem versteckte Links, um Bots in von robots.txt gesperrte Pfade zu locken; ein Crawler, der robots.txt befolgt, bleibt diesen Fallen von selbst fern. Den Mechanismus erklären wir in Honeypot-Fallen.

Häufige Fehler (Scraper-Seite)

  • robots.txt gar nicht lesen. Mit dem Crawlen beginnen, ohne eine ausdrücklich geäußerte Präferenz der Website zu kennen.
  • urllib.robotparser blind vertrauen. Bei Regelreihenfolge und Platzhaltern kann es falsche Ergebnisse liefern.
  • can_fetch die vollständige User-Agent-Zeichenkette übergeben. Die eigene Gruppe des Bots wird nicht gefunden.
  • Annehmen, dass die eigene Gruppe des Bots mit der *-Gruppe zusammengeführt wird. Gibt es eine eigene Gruppe, gilt nur diese.
  • Die Datei bei jeder Anfrage neu laden. Das belastet die Website unnötig; laden Sie sie pro Website einmal und speichern Sie sie zwischen.
  • Bei einer 5xx-Antwort weitercrawlen. Der Standard sieht vor, die gesamte Website als gesperrt zu behandeln, wenn die Datei nicht erreichbar ist.
  • Crawl-delay ignorieren, weil es nicht standardisiert ist. Es ist eine ausdrückliche Geschwindigkeitsbitte des Betreibers.

Entscheidungshilfe

Ihre SituationEmpfehlung
Die Adresse ist mit Disallow gesperrtNicht crawlen
Die Adresse ist offen und es gibt Crawl-delayMindestens so lange zwischen Anfragen warten
robots.txt antwortet mit 404Als ohne Beschränkungen behandeln, Bedingungen trotzdem prüfen
robots.txt antwortet mit 5xx oder ist nicht erreichbarWebsite als gesperrt behandeln und später erneut versuchen
Die Datei nutzt die Platzhalter * oder $Einen RFC-konformen Parser nutzen
Es gibt eine Gruppe für Ihren BotNur diese Gruppe anwenden
Es gibt eine Sitemap-ZeileAdressen aus der Sitemap nehmen
Sie wollen eine Seite aus der Suche entfernenNicht robots.txt, sondern noindex

Häufig gestellte Fragen

Darf ich eine Website ohne robots.txt crawlen?

Gibt es keine robots.txt, gilt die Website als ohne Crawling-Beschränkungen. Das heißt nicht, dass Nutzungsbedingungen, Rate-Limits und Datenschutzgesetze nicht gelten.

Was ist der Unterschied zwischen Disallow und noindex?

Disallow verhindert, dass ein Bot die Seite crawlt, also ihren Inhalt herunterlädt. noindex bittet darum, die Seite nicht in Suchergebnissen anzuzeigen, und setzt voraus, dass der Bot die Seite lesen kann. Sperren Sie eine Seite mit Disallow und setzen zugleich noindex, sieht der Bot das noindex-Tag nie.

Liest Google die Zeile Crawl-delay?

Nein. Google unterstützt die Zeile nicht und legt die Crawl-Geschwindigkeit mit eigenen Systemen fest. Einige andere Suchmaschinen und viele Crawler berücksichtigen sie jedoch.

Wie groß darf eine robots.txt-Datei sein?

RFC 9309 verlangt, dass Crawler eine Datei von mindestens 500 Kibibyte verarbeiten können; Regeln jenseits dieser Grenze dürfen ignoriert werden. In der Praxis liegen robots.txt-Dateien weit darunter, und kurze Dateien verringern das Fehlerrisiko.

Kann ich KI-Bots mit robots.txt sperren?

Bei Bots, die robots.txt befolgen, ja: Legen Sie eine Gruppe mit dem jeweiligen Produkttoken an und schreiben Sie Disallow: /. Bei Bots, die robots.txt nicht befolgen, brauchen Sie zusätzliche Maßnahmen auf Server- oder CDN-Seite.

Welchen User-agent-Namen sollte mein Scraper nutzen?

Einen Wert mit kurzem Produkttoken, das Ihren Bot identifiziert, und einer Kontaktadresse: ExamplePriceBot/1.0 (+https://example.com/about-our-bot). Beim Prüfen von robots.txt nutzen Sie nur den Teil ExamplePriceBot.

Fazit

robots.txt ist die Datei im Stammverzeichnis einer Website, die Bots mitteilt, welche Pfade sie nicht crawlen sollen. Regeln sind in User-agent-Gruppen gegliedert; hat ein Bot eine eigene Gruppe, gilt nur diese, bei widersprüchlichen Regeln gewinnt der längste Treffer, und * sowie $ dienen als Platzhalter. Crawl-delay ist nicht standardisiert und wird von Google nicht unterstützt, ist für Scraper aber eine ausdrückliche Geschwindigkeitsbitte. Das Python-Modul urllib.robotparser weicht bei Regelreihenfolge und Platzhaltern vom RFC ab; laden Sie die Datei mit Ihrem eigenen Client und prüfen Sie die Ergebnisse. Für regelkonforme Datenerfassung sehen Sie sich unsere Proxy-Dienste an.

ChatGPT fragenClaude fragen