Robots.txt-parser

Indsæt en robots.txt, og læs den, som en crawler gør, pr. RFC 9309 (Robots Exclusion Protocol, standardiseret 2022): user-agent-grupper, Allow/Disallow-regler, sitemaps og ukendte direktiver, alt udlagt — plus en gennemgang af de klassiske fejl (tomme disallow-linjer, ukendte direktiver, overdimensionerede filer). Matcheren besvarer derefter det egentlige spørgsmål: indtast en user agent og en sti, og få tilladt/afvist-afgørelsen med den præcise regel, der afgjorde den — længste match, jokertegnet *, endeankeret $ og gruppesammenfletning, præcis som standarden angiver. Alt kører i browseren.
Intet analyseret endnu. Indsæt en robots.txt ovenfor, og tryk på Analysér fil, eller indlæs et eksempel.
Matcheren arbejder på den tekst, der aktuelt står i feltet ovenfor (ingen grund til at trykke Analysér først). User agenten matches, som RFC 9309 definerer: User-agent-værdien i filen skal være en delstreng uden hensyn til store/små bogstaver af det, der skrives her — så at skrive ExampleBot/1.0 matcher en gruppe deklareret som ExampleBot. En fuld URL accepteres som sti.
User agent (en rigtig UA-streng virker) Sti eller fuld URL
Ingen afgørelse endnu. Tryk på Test tilladelse.
Sådan henter man sin fil:åbnhttps://your-domain.example/robots.txti en browser, markér alt, kopiér, og indsæt her — ellercurl -s https://your-domain.example/robots.txti en terminal. Siden henter aldrig noget af sig selv: den læser kun det, der indsættes. For at inspicere response-headerne, der bar filen, kør dem gennemHTTP-headerparser.
Selvtest
Kører analysatoren og matcheren igen mod RFC 9309-referencevektorerne: længste-match-præcedens (inkl. tilladt-slår-forbudt-uafgjort og det dybe sti-tilfælde), gruppesammenfletning, den*gruppe-fallback, versalfølsomhed for stier og user agents, jokertegn, den$anker, den implicitte tilladelse af/robots.txt, procentkodningsnormalisering, sitemap-udtrækning og de negative stier. Intet sendes nogen steder hen.
Hvad er robots.txt?
I én sætning: robots.txt er en almindelig tekstfil i roden af et websted, der fortæller velopdragne crawlere, hvilke stier de må hente — en frivillig konvention, standardiseret som RFC 9309 i 2022, som alle større crawlere overholder.
Hvordan en fil er opbygget

En fil er en række poster. En gruppe starter med en eller flere User-agent-linjer, efterfulgt af Allow- og Disallow-regler, der gælder for disse crawlere. En ny User-agent-linje efter regler begynder en ny gruppe; flere User-agent-linjer i træk deler én gruppe (en crawler med to navne har brug for dette). Selvstændige poster som Sitemap kan optræde hvor som helst. # starter en kommentar hvor som helst på en linje. Feltnavne er ufølsomme over for store/små bogstaver; stier er ikke.

LinjeBetyder
User-agent: foobotReglerne nedenfor gælder for crawlere, hvis navn indeholder foobot (uden hensyn til store/små bogstaver)
User-agent: *Reglerne nedenfor gælder for enhver crawler uden en mere specifik gruppe
Disallow: /private/Hent ikke stier, der starter med /private/
Allow: /private/public/Undtagelse, der slår forbuddet ovenfor for disse stier (længste match)
Disallow: (tom)Intet forbudt — det klassiske "tillad alt"-idiom
Sitemap: https://…/sitemap.xmlHvor sitemappet ligger; crawlere kan indsamle flere
Crawl-delay: 30Ikke i RFC 9309 — en ældre udvidelse; større crawlere ignorerer den eller fortolker den selv
Sådan træffes en afgørelse (RFC 9309 §2.2.2)

1. Find gruppen, hvis User-agent-værdi er en delstreng af crawlerens navn; flet alle matchende grupper. Findes ingen, bruges *-gruppen; findes heller ingen af dem, er alt tilladt. 2. Test stien mod hver regel: matchning er præfiksbaseret, versalfølsom, og */$ virker som jokertegn. 3. Den længste matchende regel vinder; ved samme længde slår Allow Disallow. Ingen matchende regel betyder tilladt. Og uanset hvad reglerne siger, er /robots.txt selv implicit tilladt — en crawler kunne ellers ikke læse reglerne.

Almindelige fejl
  • At tro, at robots.txt blokerer adgang. Det er en anmodning til høflige crawlere, ikke en mur: useriøse scrapere ignorerer den fuldstændigt, og den har ingen effekt på, hvad en browser kan åbne. Til reel beskyttelse bruges godkendelse; til kun at styre søgemaskiner er robots.txt det rette værktøj.
  • At forvente, at Disallow: / fjerner en side fra søgeresultater. Det stopper crawling, ikke indeksering: hvis andre sider linker til ens side, kan en søgemaskine stadig vise URL'en (uden beskrivelse). Meta-tagget eller response-headeren noindex er værktøjet til fjernelse.
  • At stole på rækkefølge i stedet for længde. Den første matchende regel vinder ikke — den mest specifikke (længste) gør. At omstille linjer for at "rette" adfærden har ingen effekt; gør i stedet den tilsigtede regel længere.
  • At blokere CSS og JS. At forbyde /*.css$ og /*.js$ var tidligere en almindelig "optimering"; renderere har nu brug for disse filer for at se siden, som besøgende gør, og en halvt renderet side kan rangere dårligere.
  • At behandle en stor gruppe som dokumentation. Kommentarlinjer inde i en gruppe er i orden, men et afsnit med prosa før den første User-agent-linje uden # er en parserfejl, der kan forvirre tilgivende parsere.
Ofte stillede spørgsmål

Understøtter alle crawlere Allow, * og $? De store gør, og RFC 9309 standardiserer alle tre. Nogle mindre eller ældre crawlere forstår kun Disallow og læser * bogstaveligt — en grund til at holde reglerne enkle, når det er muligt.

Hvad betyder en tom Disallow:? "Forbyd intet" — gruppen tillader eksplicit alt. Det optræder typisk, når nogen redigerer en skabelon og sletter stien, men ikke direktivet; auditen gør opmærksom på det.

Hvor stor må filen være? RFC 9309 kræver, at parsere håndterer mindst 500 KiB; ud over det kan en crawler stoppe med at læse og behandle resten som forbudt. Hold den godt under, og hvis den vokser meget, så overvej, om crawlingkontrol hører hjemme i sideheaders i stedet.

Hvorfor siger matcheren, at /robots.txt er tilladt, selv under Disallow: /? Fordi standarden siger det med så mange ord: robotfilen selv er implicit tilladt. Pythons urllib.robotparser implementerer blandt andre ikke dette specialtilfælde — en af de små afvigelser mellem parsere i den virkelige verden, som denne side dokumenterer i sin selvtest.

Er en Disallow-sti versalfølsom? Ja. /Private/ og /private/ er forskellige stier. Feltnavnet disallow kan skrives med alle slags bogstaver, men værdien skal matche URL'en præcist.