Specificaties voor robots.txt

Samenvatting

In dit document wordt uitgelegd hoe Google het robots.txt-bestand verwerkt waarmee u bepaalt hoe de websitecrawlers van Google openbaar toegankelijke websites crawlen en indexeren.

Terug naar boven

Vereisten voor de taal

De zoekwoorden 'MOET', 'MOET NIET", 'VEREIST', 'MAG', 'MAG NIET', 'ZAL', ZAL NIET', 'AANBEVOLEN', 'KAN' en 'OPTIONEEL' in dit document moeten worden geïnterpreteerd zoals beschreven in RFC 2119.

Terug naar boven

Basisdefinities

  • crawler: een crawler is een service of agent waarmee websites worden gecrawld. Over het algemeen verkrijgt een crawler automatisch en herhaaldelijk toegang tot bekende URL's van een host die inhoud aanbiedt die toegankelijk is via standaardbrowsers. Wanneer er nieuwe URL's worden gevonden (op verschillende manieren, bijvoorbeeld via links op bestaande, gecrawlde pagina's of via sitemapbestanden), worden deze op dezelfde manier gecrawld.
  • user-agent: een manier om een specifieke crawler of groep crawlers te identificeren.
  • instructies: de lijst van toepasselijke richtlijnen voor een crawler of groep crawlers zoals uiteengezet in het robots.txt-bestand.
  • URL: Uniform Resource Locators zoals gedefinieerd in RFC 1738.
  • Google-specifiek: deze elementen zijn specifiek voor Google's implementatie van robots.txt en zijn mogelijk niet relevant voor andere partijen.

Terug naar boven

Toepasselijkheid

De richtlijnen in dit document worden door alle geautomatiseerde crawlers van Google gevolgd. Wanneer een agent namens een gebruiker toegang tot URL's verkrijgt (bijvoorbeeld voor vertaling, handmatig geabonneerde feeds, analyse van malware, enzovoort), hoeven deze richtlijnen niet van toepassing te zijn.

Terug naar boven

Bestandslocatie en geldigheidsbereik

Het robots.txt-bestand moet in de hoofdmap van de host staan en toegankelijk zijn via het juiste protocol en poortnummer. Algemeen geaccepteerde protocollen voor robots.txt-bestanden (en het crawlen van websites) zijn 'http' en 'https'. In het geval van http en https wordt het robots.txt-bestand opgehaald met een niet-voorwaardelijk HTTP GET-verzoek.

Google-specifiek: Google accepteert en volgt ook robots.txt-bestanden voor FTP-sites. FTP-gebaseerde robots.txt-bestanden worden benaderd via het FTP-protocol, met anonieme inloggegevens.

De instructies in het robots.txt-bestand zijn alleen van toepassing op de host, het protocol en het poortnummer waarop het bestand wordt gehost.

Opmerking: De URL voor het robots.txt-bestand is net als andere URL's hoofdlettergevoelig.

Terug naar boven

Voorbeelden van geldige robots.txt-URL's:

robots.txt-URLGeldig voor Niet geldig voorOpmerkingen
http://example.com/robots.txt http://example.com/
http://example.com/map/bestand
http://other.example.com/
https://example.com/
http://example.com:8181/
Dit is doorgaans het geval. De URL is niet geldig voor andere subdomeinen, protocollen of poortnummers. De URL is geldig voor alle bestanden in alle submappen op dezelfde host en met hetzelfde protocol en poortnummer.
http://www.example.com/robots.txt http://www.example.com/ http://example.com/
http://shop.www.example.com/
http://www.shop.example.com/
Een robots.txt-bestand op een subdomein is alleen geldig voor het betreffende subdomein.
http://example.com/map/robots.txt Geen geldig robots.txt-bestand   Crawlers controleren de submappen niet op robots.txt-bestanden.
http://www.müller.eu/robots.txt http://www.müller.eu/
http://www.xn--mller-kva.eu/
http://www.muller.eu/ IDN's zijn equivalent aan hun punycode-versie. Zie ook RFC 3492.
ftp://example.com/robots.txt ftp://example.com/ http://example.com/ Google-specifiek: we gebruiken het robots.txt-bestand voor FTP-bronnen.
http://212.96.82.21/robots.txt http://212.96.82.21/ http://example.com/ (zelfs indien gehost op 212.96.82.21) Een robots.txt-bestand met een IP-adres als hostnaam is alleen geldig voor het crawlen van het betreffende IP-adres als hostnaam. Het bestand is niet automatisch geldig voor alle websites die op dat IP-adres worden gehost (hoewel het mogelijk is dat het robots.txt-bestand wordt gedeeld; in dat geval is het bestand ook beschikbaar onder de gedeelde hostnaam).
http://example.com:80/robots.txt http://example.com:80/
http://example.com/
http://example.com:81/ Standaardpoortnummers (80 voor http, 443 voor https, 21 voor ftp) zijn gelijk aan hun standaardhostnamen. Zie ook [poortnummers].
http://example.com:8181/robots.txt http://example.com:8181/ http://example.com/ Robots.txt-bestanden voor niet-standaardpoortnummers zijn alleen geldig voor inhoud die beschikbaar is gemaakt via deze poortnummers.

Terug naar boven

Verwerking van HTTP-resultaatcodes

Doorgaans zijn er drie uitkomstmogelijkheden wanneer robots.txt-bestanden worden opgehaald:

  • full allow (volledig toegestaan): alle inhoud mag worden gecrawld.
  • full disallow (volledig niet toegestaan): de inhoud mag niet worden gecrawld.
  • conditional allow (voorwaardelijk toegestaan): de instructies in het robots.txt-bestand bepalen welke inhoud mag worden gecrawld.
2xx (geslaagd)
HTTP-resultaatcodes die succes aanduiden, resulteren in een 'conditional allow' voor crawlen.
3xx (omleiding)
Omleidingen worden in het algemeen gevolgd totdat een geldig resultaat wordt gevonden (of een lus wordt herkend). We volgen een beperkt aantal omleidings-hops (RFC 1945 voor HTTP/1.0 staat maximaal 5 hops toe), waarna we stoppen en de omleiding behandelen als 404. De verwerking van robots.txt-omleidingen naar niet-toegestane URL's is niet gedefinieerd en wordt afgeraden. De verwerking van logische omleidingen voor het robots.txt-bestand op basis van HTML-inhoud die de code 2xx retourneert (frames, JavaScript of meta-omleidingen voor vernieuwing) is niet gedefinieerd en wordt afgeraden.
4xx (clientfouten)
Google behandelt alle 4xx-fouten op dezelfde manier en gaat ervan uit dat er geen geldig robots.txt-bestand aanwezig is. Er wordt verondersteld dat er geen beperkingen gelden. Dit is een 'full allow' voor crawlen. Opmerking: Dit geldt ook voor de HTTP-resultaatcodes 401 (geen toegang) en 403 (Verboden).
5xx (serverfout)
Serverfouten worden gezien als tijdelijke fouten die resulteren in een 'full disallow' voor crawlen. Het verzoek wordt telkens opnieuw uitgevoerd totdat er een HTTP-resultaatcode voor een niet-serverfout wordt verkregen. Een 503-fout (Service niet beschikbaar) resulteert in redelijk frequente nieuwe pogingen. Als u het crawlen tijdelijk wilt opschorten, kunt u het beste de HTTP-resultaatcode 503 retourneren. De verwerking van een permanente serverfout is niet gedefinieerd.

Google-specifiek: als we kunnen bepalen dat een site niet goed is geconfigureerd voor het retourneren van een 5xx in plaats van een 404 voor ontbrekende pagina's, behandelen we een 5xx-fout van deze site als een 404-fout.
Mislukte verzoeken of onvolledige gegevens
De verwerking van een robots.txt-bestand dat niet kan worden opgehaald vanwege DNS- of netwerkproblemen, zoals time-outs, ongeldige reacties, opnieuw ingestelde/onderbroken verbindingen, HTTP-chunkingfouten, enzovoort is niet gedefinieerd.
Caching
Een robots.txt-verzoek wordt doorgaans maximaal één dag in het cachegeheugen bewaard, maar het verzoek wordt mogelijk langer bewaard wanneer de gecachte versie niet kan worden vernieuwd (bijvoorbeeld door time-outs of 5xx-fouten). De gecachte reactie wordt mogelijk door verschillende crawlers gedeeld. Google kan de opslagduur in het cachegeheugen verlengen of verkorten op basis van de HTTP-headers max-age Cache-Control.

Terug naar boven

Bestandsindeling

De verwachte bestandsindeling is platte tekst gecodeerd in UTF-8. Het bestand bestaat uit records (regels) gescheiden door CR, CR/LF of LF.

Er wordt alleen rekening gehouden met geldige records; alle andere inhoud wordt genegeerd. Als het uiteindelijke document bijvoorbeeld een HTML-pagina is, wordt alleen rekening gehouden met de geldige tekstregels. De rest wordt zonder waarschuwing genegeerd.

Als er een tekencodering wordt gebruikt waardoor er ook tekens worden gebruikt die geen subset van UTF-8 vormen, kan dit ertoe leiden dat de inhoud van het bestand niet goed word geparseerd.

Een optionele Unicode BOM (Byte Order Mark; bytevolgordemarkering) aan het begin van het robots.txt-bestand wordt genegeerd.

Elke record bestaat uit een veld, een dubbelepunt en een waarde. Spaties zijn optioneel (maar worden wel aanbevolen om de leesbaarheid te verbeteren). Er kan op elke gewenste locatie in het bestand een opmerking worden toegevoegd door gebruik te maken van het teken '#'. Alle inhoud na het begin van de opmerking en tot en met het einde van de record wordt gezien als opmerking en dus genegeerd. De algemene indeling is '<field>:<value><#optional-comment>'. De witruimte aan het begin en einde van een record wordt genegeerd.

Het element <field> is hoofdlettergevoelig. Het element <value> kan hoofdlettergevoelig zijn. Dit is afhankelijk van het element <field>.

De verwerking van <field>-elementen met eenvoudige fouten/spelfouten (bijv. 'useragent' in plaats van 'user-agent') is niet gedefinieerd en dergelijke fouten worden door sommige user-agents mogelijk als correcte instructies gezien.

Er kan per crawler een maximale bestandsgrootte worden opgelegd. Inhoud na de maximale bestandsgrootte kan worden genegeerd. Google dwingt momenteel een limiet van 500 KB voor de grootte af.

Terug naar boven

Formele syntaxis/definitie

Dit is een BNF-achtige (Backus-Naur Form) beschrijving waarvoor de conventies van RFC 822 worden gebruikt, behalve dat '|' wordt gebruikt om alternatieven aan te duiden. Letterlijke waarden worden tussen aanhalingstekens "" geplaatst, ronde haken '(' en ')' worden gebruikt om elementen te groeperen, optionele elementen worden tussen [vierkante haken] geplaatst en elementen kunnen worden voorafgegaan door <n>* om n of meerdere herhalingen van het volgende element aan te duiden; de standaardwaarde voor n is 0.

robotstxt = *entries
entries = *( ( <1>*startgroupline 
  *(groupmemberline | nongroupline | comment)
  | nongroupline
  | comment) )
startgroupline = [LWS] "user-agent" [LWS] ":" [LWS] agentvalue [comment] EOL
groupmemberline = [LWS] (
  pathmemberfield [LWS] ":" [LWS] pathvalue
  | othermemberfield [LWS] ":" [LWS] textvalue) [comment] EOL
nongroupline = [LWS] (
  urlnongroupfield [LWS] ":" [LWS] urlvalue
  | othernongroupfield [LWS] ":" [LWS] textvalue) [comment] EOL
comment = [LWS] "#" *anychar
agentvalue = textvalue

pathmemberfield = "disallow" | "allow"
othermemberfield = ()
urlnongroupfield = "sitemap"
othernongroupfield = ()

pathvalue = "/" path
urlvalue = absoluteURI
textvalue = *(valuechar | SP)
valuechar = <any UTF-8 character except ("#" CTL)>
anychar = <any UTF-8 character except CTL>
EOL = CR | LF | (CR LF)

De syntaxis voor 'absoluteURI', 'CTL', 'CR', 'LF', 'LWS' wordt gedefinieerd in RFC 1945. De syntaxis voor 'pad' wordt gedefinieerd in RFC 1808.

Terug naar boven

Groeperen van records

Records worden op basis van het type <field>-element gecategoriseerd in drie verschillende typen:

  • start-of-group
  • group-member
  • non-group
  • Alle group-member-records na de start-of-group-record tot en met de volgende start-of-group-record worden behandeld als een groep records. Het enige start-of-group-veldelement is user-agent. Wanneer er meerdere start-of-group-regels achter elkaar komen, staan deze achter de group-member-records die na de laatste start-of-group-regel komt. Alle group-member-records zonder voorgaande start-of-group-record worden genegeerd. Alle non-group-records zijn geldig, onafhankelijk van alle groepen.

    Geldige <field>-elementen, die verderop in dit documenten worden besproken, zijn:

    • user-agent (start-of-group)
    • disallow (alleen geldig als een group-member-record)
    • allow (alleen geldig als een group-member-record)
    • sitemap (non-group-record)
    • Alle andere <field>-elementen kunnen worden genegeerd.

      Het start-of-group-element user-agent wordt gebruikt om aan te geven voor welke crawler de groep geldig is. Er is slechts één groep records geldig voor een bepaalde crawler. De volgorde komt later in dit document aan bod.

      Voorbeeldgroepen:

      user-agent: a
      disallow: /c
      
      user-agent: b
      disallow: /d
      
      user-agent: e
      user-agent: f
      disallow: /g
      

      Er worden drie verschillende groepen gespecificeerd: één voor 'a', één voor 'b' en één voor 'e' en 'f'. Elke groep heeft zijn eigen group-member-record. Zoals u kunt zien, wordt er optionele witruimte gebruikt (een lege regel) om de leesbaarheid te verbeteren.

      Terug naar boven

      Volgorde voor user-agents

      Er is slechts één groep group-member-records geldig voor een bepaalde crawler. De crawler moet de juist groep records bepalen door de groep te vinden die de meest specifieke overeenkomende user-agent bevat. Alle andere groepen records worden door de crawler genegeerd. De user-agent is niet hoofdlettergevoelig. Alle tekst die niet overeenkomt, wordt genegeerd (googlebot/1.2 en googlebot* zijn bijvoorbeeld equivalent aan googlebot). De volgorde van de groepen in het robots.txt-bestand is irrelevant.

      Voorbeeld:

      In het geval van het volgende robots.txt-bestand:

      user-agent: googlebot-news
      (group 1)
      
      user-agent: *
      (group 2)
      
      user-agent: googlebot
      (group 3)
      

      De crawlers kiezen als volgt de relevante groep:

      Naam van crawlerGevolgde recordgroep Opmerkingen
      Googlebot News (groep 1) Alleen de meest specifieke groep wordt gevolgd, alle andere groepen worden genegeerd.
      Googlebot (web) (groep 3) 
      Googlebot Images (groep 3) Er is geen specifieke groep googlebot-images, zodat de meeste algemene groep wordt gevolgd.
      Googlebot News (bij het crawlen van afbeeldingen) (groep 1) Deze afbeeldingen worden gecrawld voor en door Googlebot News, zodat alleen de groep Googlebot News wordt gevolgd.
      Otherbot (web)(groep 2) 
      Otherbot (News)(groep 2) Zelfs wanneer er een item voor een gerelateerde crawler is, is het item alleen geldig wanneer dit exact overeenkomt.

      Meer informatie over crawlers en user-agent-strings van Google

      Terug naar boven

      group-member-records

      In dit gedeelte worden alleen algemene en Google-specifieke type group-member-records besproken. Deze typen records worden ook wel 'instructies' voor de crawlers genoemd. De notatie voor deze instructies is 'instructie: [pad]', waarbij [pad] optioneel is. De toegewezen crawlers worden standaard geen beperkingen met betrekking tot het crawlen opgelegd. Instructies zonder [pad] worden genegeerd.

      De waarde [pad], indien opgegeven, is relatief ten opzichte van de hoofdmap van de website waarvoor het robots.txt-bestand is opgehaald (met gebruik van hetzelfde protocol en poortnummer en dezelfde host- en domeinnamen). De padwaarde moet beginnen met '/' om de hoofdmap aan te duiden. Als een pad zonder slash aan het begin wordt gevonden, wordt mogelijk aangenomen dat deze slash aanwezig is. Het pad is hoofdlettergevoelig. Bekijk het onderstaande gedeelte 'URL-matching op basis van padwaarden' voor meer informatie.

      disallow

      Met de instructie disallow wordt aangegeven welke paden niet toegankelijk zijn voor de toegewezen crawlers. Wanneer er geen pad is opgegeven, wordt de instructie genegeerd.

      Gebruik:

      disallow: [path]
      

      allow

      Met de instructie allow wordt aangegeven welke paden toegankelijk zijn voor de toegewezen crawlers. Wanneer er geen pad is opgegeven, wordt de instructie genegeerd.

      Gebruik:

      allow: [path]
      

      Terug naar boven

      URL-matching op basis van padwaarden

      De padwaarde wordt gebruikt als basis om te bepalen of er een regel van toepassing is op een bepaalde URL op een site. Met uitzondering van jokertekens wordt het pad gebruikt om het begin van een URL te matchen (en alle URL's die met hetzelfde pad beginnen). Niet-7-bits ASCII-tekens in een pad kunnen worden opgenomen als UTF-8-tekens of als UTF-8 gecodeerde tekens met procent-escaping, overeenkomstig RFC 3986.

      Opmerking: URL's voor 'AJAX-crawling' moeten worden opgegeven in de gecrawlde versies. Raadpleeg ook onze documentatie over het crawlbaar maken van AJAX-applicaties.

      Google, Bing, Yahoo en Ask ondersteunen een beperkt aantal 'jokertekens' voor padwaarden. Dat zijn:

      1. * duidt op 0 of meer instanties van een geldig teken
      2. $ geeft het einde van de URL aan

      Voorbeelden van overeenkomende paden

      [pad]Resultaten Komt niet overeen metOpmerkingen
      /elke geldige URL  Komt overeen met de root en elke URL op een lager niveau.
      /*equivalent aan / equivalent aan / Equivalent aan "/" -- het jokerteken aan het eind wordt genegeerd.
      /fish/fish
      /fish.html
      /fish/salmon.html
      /fishheads
      /fishheads/yummy.html
      /fish.php?id=anything
      /Fish.asp
      /catfish
      /?id=fish
      De overeenkomst is hoofdlettergevoelig.
      /fish*/fish
      /fish.html
      /fish/salmon.html
      /fishheads
      /fishheads/yummy.html
      /fish.php?id=anything
      /Fish.asp
      /catfish
      /?id=fish
      Equivalent aan "/fish" -- het jokerteken aan het eind wordt genegeerd.
      /fish//fish/
      /fish/?id=anything
      /fish/salmon.htm
      /fish
      /fish.html
      /Fish/Salmon.asp
      De slash aan het eind betekent dat dit overeenkomt met alles in deze map.
      fish/equivalent aan /fish/ equivalent aan /fish/ equivalent aan /fish/
      /*.php/bestandsnaam.php
      /map/bestandsnaam.php
      /map/bestandsnaam.php?parameters
      /map/elk.php.bestand.html
      /bestandsnaam.php/
      / (zelfs wanneer het verwijst naar /index.php)
      /windows.PHP
       
      /*.php$/bestandsnaam.php
      /map/bestandsnaam.php
      /bestandsnaam.php?parameters
      /bestandsnaam.php/
      /bestandsnaam.php5
      /windows.PHP
       
      /fish*.php/fish.php
      /fishheads/catfish.php?parameters
      /Fish.PHP  

      Terug naar boven

      Door Google ondersteunde non-group-member-records

      sitemap

      Ondersteund door Google, Ask, Bing, Yahoo; gedefinieerd op sitemaps.org.

      Gebruik:

      sitemap: [absoluteURL]
      

      [absoluteURL] verwijst naar een sitemap, sitemapindexbestand of equivalente URL. De URL hoeft zich niet op dezelfde host te bevinden als het robots.txt-bestand. Er kunnen meerdere sitemap-vermeldingen bestaan. Als non-group-member-records zijn deze niet gebonden aan specifieke user-agents en kunnen ze, mits toegestaan, door alle crawlers worden gevolgd.

      Terug naar boven

      Volgorde voor group-member-records

      Op een group-member-niveau, met name voor de instructies allow en disallow, krijgt de meest specifieke regel op basis van de lengte van het [pad]-item voorrang op de minder specifieke (kortere) regel. De volgorde voor regels met jokertekens is niet gedefinieerd.

      Voorbeeldsituaties:

      URLallow:disallow:Oordeel Opmerkingen
      http://example.com/page /p /toestaan 
      http://example.com/folder/page /folder/ /foldertoestaan 
      http://example.com/page.htm /page /*.htmniet gedefinieerd 
      http://example.com/ /$ /toestaan 
      http://example.com/page.htm /$ /niet toestaan 

      Terug naar boven

       

Feedback verzenden over...