Crawler-Steuerung mit robots.txt – Regeln verstehen und Auswirkungen kennen
1. Kurzeinführung
Üblicherweise interessieren sich nur zwei Parteien für diese unscheinbare Textdatei: Entweder Crawler oder Personen, die sich mit Suchmaschinenoptimierung befassen.
Wenn du diesen Artikel liest, gehörst du vermutlich zu einer dieser Parteien. Wenn du ein Crawler bist, dann befolgst du hoffentlich bereits die Regeln aus dem Robots Exclusion Protocol. Wenn du ein Mensch bist, dann kannst du hier mehr über die robots.txt lernen: Von der Erstellung der Datei, über Syntax und Regeln bis hin zum Monitoring.
Da im deutschsprachigen Raum die Suchmaschine Google die größte Verbreitung hat, konzentrieren wir uns hier auf Regeln, welche die Google-Crawler betreffen.
Was ist der Zweck der robots.txt? Mit den Anweisungen in dieser Datei kannst du Suchmaschinen mitteilen, auf welche Seiten oder Seitenbereiche deiner Website sie zugreifen dürfen und auf welche nicht.
2. Erstellung und Implementierung
Die meisten modernen Content-Management-Systeme sowie Blog- und Shop-Systeme generieren automatisch eine robots.txt Datei. Sollte das nicht der Fall sein, kannst du für die Erstellung der Datei jedes beliebige Textverarbeitungsprogramm verwenden. Wichtig ist nur, dass der Dateiname robots und die Dateiendung .txt ist. Außerdem muss die robots.txt nach UTF-8 codiert sein sowie im Stammverzeichnis (root) abgelegt und damit unter https://www.deinewebsite.com/robots.txt aufrufbar sein.
3. Aufbau und Syntax
Der Aufbau und die Syntax einer robots.txt sind vergleichsweise einfach. Es gibt nur vier mögliche Anweisungen, die jeweils mit einem Doppelpunkt abgeschlossen werden. Leerzeichen sind optional und dienen hauptsächlich der Lesbarkeit. Hier ein Beispiel:
User-agent: Googlebot
Disallow: /verzeichnis/
Allow: /verzeichnis/seite.html
Sitemap: https://deinewebsite.com/sitemap.xml
Mit user-agent sprichst du den Crawler an, für den Deine Regeln gelten sollen. Mit allow und disallow kannst du dem Crawler dann anzeigen, auf welche Website-Bereiche er entsprechend zugreifen oder nicht zugreifen darf. Falls du eine XML-Sitemap hast, kannst du dem Crawler mit sitemap die entsprechende (absolute) URL mitteilen.
Für disallow und allow gilt dabei immer das gleiche Schema:
Regel: Pfad
4. Sonderzeichen
Außer den vier Anweisungen können noch drei Sonderzeichen verwendet werden, um Anweisungen oder Regeln zu modifizieren.
- Mit # wird eine Kommentarzeile eingeleitet. Alle Inhalte innerhalb eines Kommentars werden ignoriert. Das gilt auch, wenn darin sonst gültige Anweisungen vorhanden wären. Ein Beispiel:
# Das ist ein Kommentar in einer robots.txt Datei
User-agent: Googlebot
Disallow: /verzeichnis/
- Mit * wird ein Platzhalter angegeben, der für ein beliebiges Zeichen stehen kann. Dieses Zeichen kann sowohl in der user-agent als auch in der allow oder disallow Anweisung verwendet werden. Ein Beispiel:
# Verwendung des * Sonderzeichens in einer robots.txt Datei
User-agent: *
Disallow: /verzeichnis/
In dieser robots.txt Datei wird allen Crawlern der Zugriff auf das Verzeichnis verwehrt, nicht wie in den vorherigen Beispielen nur dem Googlebot. Übrigens: Ein * am Ende einer Anweisung ist bereits impliziert und damit nicht notwendig.
- Das $-Zeichen kennzeichnet das Ende des jeweils angegebenen Pfads. Die Anweisung gilt also nur für Seiten, die bis zu diesem Zeichen übereinstimmen. Falls ein Pfad weitere nachfolgende Zeichen beinhaltet, dann greift die Anweisung nicht mehr. Ein Beispiel:
# Verwendung des $ Sonderzeichens in einer robots.txt Datei
User-agent: Googlebot
Disallow: /verzeichnis/*.pdf$
In dieser robots.txt Datei wird dem Googlebot der Zugriff auf alle Dateien verwehrt, die mit PDF enden und sich im angegebenen Verzeichnis befinden.
5. Erweiterte Regeln und Sonderfälle
Auch wenn der Aufbau und die Syntax der robots.txt vergleichsweise einfach ist, gibt es im Detail doch einige Besonderheiten und Stolperfallen, die du beachten solltest.
5.1 Regex
Wenn du bereits reguläre Ausdrücke (regular expressions, kurz: regex) kennst, dann kommen Dir die Sonderzeichen * oder $ bekannt vor. Aber leider ist die Verwendung von regulären Ausdrücken in der robots.txt nicht möglich. Wenn du ein wiederkehrendes Muster in einer Regel abdecken möchtest, dann verwende entweder den Platzhalter (*) oder liste alle möglichen Muster als separate Regeln auf.
Wenn du beispielsweise die beiden Verzeichnisse /tmp/ und /temp/ ausschließen möchtest, gehe wie folgt vor:
# Regex funktioniert leider nicht:
User-agent: *
Disallow: \/(tmp|temp)\/
# Verwende stattdessen zwei separate Ausschlussanweisungen:
User-agent: *
Disallow: /tmp/
Disallow: /temp/
5.2 Groß- und Kleinschreibung
Wichtig: Die Anweisungen in der robots.txt sind case sensitive, d.h. es wird zwischen Groß- und Kleinschreibung unterschieden. Falls du den Pfad /Verzeichnis/ ausschließen möchtest, würde folgende Anweisung nicht greifen:
# /Verzeichnis/ wird mit dieser Regel nicht abgedeckt:
User-agent *
Disallow: /verzeichnis/
5.3 Subdomains
Subdomains müssen separat behandelt werden. Sprich, für jede vorhandene Subdomain muss eine eigene robots.txt Datei angelegt werden.
5.4 Widersprüchliche Anweisungen
Bei widersprüchlichen Anweisungen wird der Googlebot die am wenigsten restriktive Anweisung befolgen. Ansonsten gilt: Die spezifischste Anweisung (Pfadlänge) gewinnt.
# Widersprüchliche Anweisung
User-agent: *
Allow: /verzeichnis/
Disallow: /verzeichnis/
In diesem Beispiel würde https://www.deinewebsite.com/verzeichnis/test.html gecrawlt werden.
6. Häufig gemachte Fehler
6.1 Fehler 1: robots.txt zur Indexierungssteuerung verwenden
Es ist zunächst ein plausibler Gedankengang, dass solange Suchmaschinen nicht auf bestimmte Seiten oder Seitenbereiche zugreifen dürfen, diese dann auch nicht indexiert werden. Crawling und Indexierung sind jedoch zwei getrennte Vorgänge.
Die Anweisung an eine Suchmaschine, eine bestimmte Ressource nicht in ihren Index aufzunehmen, kann jedoch erst bei Aufruf dieser Ressource gelesen werden. Ob die „noindex“-Anweisung dabei per x-robots tag im HTTP header oder per meta robots Angabe im HTML erteilt wird, macht dabei keinen Unterschied. Wenn Crawler durch eine robots.txt Anweisung daran gehindert werden, die entsprechende Ressource aufzurufen, kann auch die dazugehörige „noindex“-Anweisung nicht gelesen werden.
Falls von extern auf eine vom Crawling ausgeschlossene Seite verwiesen wird, kann es also dazu kommen, dass die entsprechende URL dennoch indexiert wird. Da der Inhalt nicht gelesen werden kann, erscheint das Suchergebnis dann ohne Snippet (Seitenbeschreibung).
6.2 Fehler 2: Blockieren von renderkritischen Ressourcen
Um Crawling-Ressourcen zu sparen könnte man auf die Idee kommen, „unnötige“ Dateitypen per robots.txt Anweisung auszuschließen. Schließlich sollen nur relevante Seiten für Suchmaschinen zugänglich gemacht werden. Manchmal stößt man noch auf robots.txt Dateien, in denen pauschal alle JS- und CSS-Dateien vom Crawling ausgeschlossen werden:
# Nicht empfehlenswert:
User-agent: *
Disallow: /*.css
Disallow: /*.js
Das Problem dabei: Im Prinzip rendert der Googlebot eine Seite wie ein Browser und verwendet dazu ebenfalls alle entsprechenden Ressourcen. Darunter fallen auch CSS- und JS-Dateien. Wenn diese Ressourcen nun vom Crawling ausgeschlossen werden, kann es zu Render- und Indexierungsproblemen und damit letztendlich auch zu Problemen im Ranking kommen.
Wenn du einen Google Search Console Account hast, wirst du ggf. auch eine Benachrichtigung erhalten, wenn der Googlebot-Zugriff auf CSS- und JS-Ressourcen blockiert wird.
Achtung: Selbst wenn CSS- und JS-Dateien nicht pauschal ausgeschlossen werden, kann das gleiche Problem auftreten. Dieses Szenario tritt auf, wenn sich relevante Ressourcen in einem Verzeichnis befinden, welches vom Crawling ausgeschlossen wird. In diesem Fall könnte eine Lösung folgendermaßen aussehen:
# In /ressourcen/ befinden sich auch renderkritische Ressourcen:
User-agent: *
Disallow: /ressourcen/
Allow: /ressourcen/*.css
Allow: /ressourcen/*.js
6.3 Fehler 3: User-agent Gruppierungen
In folgendem Beispiel möchte der Webseitenbetreiber den Zugriff auf /verzeichnis1/ und auf /verzeichnis2/ für alle Crawler (d.h. inklusive Googlebot) sperren. Für den Googlebot gilt jedoch zusätzlich eine Ausnahme. Diese wird explizit als eigene Anweisung angegeben:
# Falsch:
User-agent: *
Disallow: /verzeichnis1/
Disallow: /verzeichnis2/
User-agent: Googlebot
Allow: /verzeichnis1/ausnahme.html
Allerdings gilt, ähnlich wie bei der Pfadlänge, auch bei der user-agent Ansprache: Die spezifischste Anweisung gewinnt. Der Googlebot liest die robots.txt nicht zeilenweise von oben nach unten und folgt den Anweisungen dann Schritt-für-Schritt, sondern verarbeitet die Datei als Ganzes und befolgt dabei die Gruppe an Anweisungen, die am spezifischsten ist. In diesem Beispiel würde der Googlebot keinerlei Crawling-Einschränkung erhalten, da in seiner Anweisungsgruppe keine Ausschlussregeln vorhanden sind.
Damit der Googlebot in diesem Beispiel auch die ursprünglich angedachten Ausschlüsse aus der ersten Anweisungsgruppe befolgt, muss die entsprechende robots.txt folgendermaßen aussehen:
# Richtig:
User-agent: *
Disallow: /verzeichnis1/
Disallow: /verzeichnis2/
User-agent: Googlebot
Disallow: /verzeichnis1/
Disallow: /verzeichnis2/
Allow: /verzeichnis1/ausnahme.html
7. Testing
Sonderfälle, Sonderzeichen und komplexe Website- und URL-Strukturen können die Regelerstellung in der robots.txt zu einer Herausforderung machen. Je mehr Regeln und user-agent Gruppierungen verwendet werden, desto unübersichtlicher kann es werden. Daher ist es sinnvoll, wenn du Deine Anweisungen vor einer Implementierung im Live-System testest.
Leider gibt es von Google kein offiziell unterstütztes Testing-Tool (mehr). Als Alternative kann ich Dir zum Beispiel https://technicalseo.com/tools/robots-txt/ empfehlen. Dieses Tool hat sowohl eine Live-Testfunktion als auch eine Editor-Funktion, mit der du potentielle Neuerungen oder Änderungen an Deiner robots.txt vorab testen kannst.
8. Monitoring
Das beste Testing bringt jedoch nichts, wenn andere Personen außer Dir bewusst oder unbewusst und ohne dein Wissen Änderungen an der robots.txt vornehmen. Bedenke: Mit einer einzigen Anweisung kann jeglicher Zugriff von Suchmaschinen auf die Website ausgeschlossen werden. Und sollte die robots.txt über einen längeren Zeitraum einen Serverfehler als Status zurückgeben (Status 5xx), dann kann eine Website auch komplett aus der Google Suche entfernt werden, auch wenn der Rest der Seite zugänglich ist. Beide Szenarien wirken sich dann entsprechend auf Rankings, Traffic und Umsatz aus.
Es ist daher immer empfehlenswert, ein entsprechendes robots.txt Monitoring aufzusetzen.
Google selbst bietet inzwischen nur noch indirekt eine robots.txt Monitoring-Funktion in der Google Search Console an. Solltest du blockierte Seiten oder Seitenbereiche haben, findest du diese im Bereich „Indexierung“ unter „Seiten > Seitenindexierung > Durch robots.txt-Datei blockiert“. Wenn du anschließend auf eine URL klickst, wird die jeweils betroffene Zeile in der robots.txt markiert.
Daher solltest du entweder intern eine Eigenlösung erstellen lassen oder ein geeignetes Monitoring-Tool einsetzen. Ein Beispiel für ein Monitoring-Tool wäre „Little Warden“, welches unter anderem die Erreichbarkeit und die Inhalte/Anweisungen in der robots.txt dauerhaft überwacht und Dich bei Änderungen automatisch benachrichtigt.
9. Bonus: Mehr als nur SEO
Wer berufsbedingt oder aus Interesse beim Surfen in verschiedene robots.txt Dateien schaut, entdeckt dort manchmal auch kreative Inhalte. Nicht selten verstecken Unternehmen dort Stellenangebote, siehe z.B. https://www.airbnb.com/robots.txt oder https://www.tripadvisor.com/robots.txt.
In anderen robots.txt Dateien toben sich ASCII-Art Künstler aus. Das vermutlich bekannteste Beispiel ist https://www.nike.com/robots.txt, die dort ihr Logo verewigt haben.
Auch Sci-Fi Fans findet man in manch einer robots.txt Datei, wie mit den drei Asimov’schen Robotergesetzen bei https://www.yelp.com/robots.txt oder Terminator-Anweisungen bei https://www.breuninger.com/robots.txt:
# To all time-travelling robots:
# Disallow: /time-machine/
# We've seen what you do in the movies.
# For Terminator robots... just in case:
# User-agent: T-800
# User-agent: T-1000
# User-agent: T-3000
# Disallow: /
# Not today, Skynet.
Du brauchst noch mehr Insides zu einem technischen SEO Thema? Dann schaue mal bei unserem Artikel zu strukturierten Daten vorbei.