K čemu se robots.txt hodí
Typické příklady využití:
-
Zákaz přístupu na celý web
Souborem robots.txt můžeme zakázat robotům návštěvu celého webu, například když ho při vývoji vystavíme na nějakou dočasnou adresu, kde se web ukazuje zadavateli, plní se obsahem či se ještě nějak dále ladí.
-
Skrytí některých stránek před vyhledávači
Robots.txt také využijeme, když web obsahuje nějaké informace, které nechceme mít veřejně dostupné. Mohou to být třeba předpřipravené děkovací stránky, nějaké speciální formuláře určené pro klienty apod. Pak zakážeme přístup pouze na danou sekci.
-
Omezení přetěžování serveru
Soubor robots.txt je užitečný, když vám začne nějaký robot přetěžovat server, takže pak dochází k výpadkům webu. Můžete danému robotovi přístup zakázat, nebo mu nastavit delší časovou prodlevu mezi návštěvami.
-
Odstínění robotů od funkčních odkazů
Zákaz procházení je dobré řešení, pokud jsou na webu odkazy, které jen uživatele nepošlou na jinou stránku, ale spouští nějakou speciální funkci. A my nechceme, aby tak roboti činili. Třeba u anket, kdyby vám na ně klikali roboti, zkreslovalo by vám to výsledky.
Na webu také mohou být funkce, které generují nekonečné množství odkazů. Typickým příkladem je třeba kalendář akcí, který lze donekonečna posouvat oběma směry, přičemž každý den zde má svou unikátní URL. Těmi však vyhledávač zahlcovat nechceme.
-
Optimalizace crawl budgetu
Používá se také k optimalizaci crawl budgetu. Obsahuje-li web velké množství stránek, z nichž většina je pro vyhledávače nerelevantní (třeba proto, že fungují jako duplicitní obsah), můžeme jejich procházení zakázat v robots.txt. A vyhledávače pak neplýtvají svým časem a soustředí se na stránky důležité. Častým případem jsou různé filtry, kdy i jen několik parametrů v URL dokáže vytvořit obrovské množství kombinací adres se stále stejným obsahem.
E-book za mail
Získejte podrobný návod Jak na e-mail marketing (52 stran). Více informací.
Žádný spam, jen užitečný obsah. Newsletter posílám cca 8× ročně. Odhlásíte se kdykoliv.
Jak robots.txt funguje
Formát souboru, umístění a obsah
Robots.txt je obvykle stručný textový soubor (to říká ona přípona txt
) na konci názvu. Takový soubor na Windows nejsnáze vytvoříte pomocí programu Notepad. Soubor musí být umístěný v kořenovém adresáři domény (v tzv. rootu). Nefunguje tedy v podadresářích.
Soubor obsahuje tzv. direktivy, tj. instrukce, jak si přejeme, aby se roboti chovali. Chování vyhledávačů se však trochu liší. Pro roboty Google a Bing platí, že se vždy řídí nejkonkrétnější direktivou, u zbylých vyhledávačů záleží pouze na pořadí direktiv.
Dále je třeba dodržet následující pravidla:
- Název souboru robots.txt i přípona se vždy píše malými písmeny.
- Kódování souboru by mělo být v ASCII nebo v UTF-8.
- Každá direktiva se píše na samostatný řádek.
- V direktivách záleží na velikostech písmen uvedených cest (vyloučíme-li tedy /Diskuze, roboti budou dál radostně navštěvovat /diskuze).
Kde robots.txt platí
- Robots.txt platí vždy jen pro danou doménu, nikoliv pro subdomény (těm je případně třeba přidat jejich vlastní robots.txt).
- A platí pouze pro daný typ protokolu (tj. robots.txt zobrazovaný na protokolu HTTP nemá vliv na chování webu na HTTPS).
- Robots.txt také platí pro daný síťový port (například https://strafelda.cz:8080/robots.txt bude platit jen pro stránky zobrazené na tomto portu).
Nevychování roboti
Všichni roboti však nejsou slušně vychovaní a někteří se doporučeními v robots.txt neřídí. Typicky třeba roboti, kteří na webech kradou e-mailové adresy. Takové nevychovance, pokud vám způsobují potíže, je třeba odříznout jinak. Například pomocí souboru .htaccess zajistit, aby je server ignoroval na základě jejich IP adresy či jména, kterým se hlásí.
Má vaše doména robots.txt?
Jak to zjistit
Ověříte si to snadno. Stačí do prohlížeče zadat adresu (případně bez „s“ v názvu protokolu či bez www, pokud je v adrese svého webu nepoužíváte). V okně prohlížeče by se vám měl zobrazit obsah souboru.
https://www.vase-domena.cz/robots.txt
Co když robots.txt neexistuje?
Pokud soubor neexistuje, nebo je prázdný, znamená to, že všichni roboti mohou všude. Web by se vám tedy měl dostat do vyhledávačů. Obecně se však doporučuje soubor založit, třeba jen prázdný, i když nechcete nic zakazovat a nepoužíváte sitemap.xml. To proto, že jinak se při každém jeho volání zobrazí chybová stránka 404 a může vám to kazit výstupy webové analytiky.
Potíže může dělat situace, kdy volání robots.txt vrací jiné stavové kódy než 200 (soubor byl nalezen) a 404 (soubor nebyl nalezen). Může to způsobit výpadek webu z výsledků vyhledávání.
Robots.txt a zákaz indexace
I když si to stále mnoho lidí myslí, soubor robots.txt neslouží k zákazu indexace webové stránky. Pouze vyhledávači zakáže crawlování (procházení) stránky. Ten se však o ní může dozvědět jiným způsobem, například pomocí zpětných odkazů. Nebo už si ji zaindexoval před tím zákazem pocházení.
Chcete-li zakázat indexaci stránky či souboru či je z indexu vyřadit, je třeba použít jiný nástroj než robots.txt – buď meta tag robots, nebo hlavičku X-Robots-Tag. Případně, pokud jde o duplicitní obsah a stránka se má v indexu objevovat na jedné adrese a na jiné už ne, použijte kanonizaci URL.
Pozor také na situaci, kdy v meta tagu indexaci zakážete a zároveň v souboru robots.txt crawlerům neumožníte přístup k dané stránce → pak se o tomto zákazu indexace vůbec nedozví a stránku tak z indexu nevyhodí.
V nápovědě Google jsem se nicméně dočetl, že u multimediálního obsahu to funguje jinak. Pokud robotům zakážeme v robots.txt přístup k multimediálnímu souboru, Google ho prý z vyhledávání vyřadí. Vyzkoušené to však zatím nemám.
Soubor robots.txt neslouží k zákazu indexace webové stránky, pouze zamezí crawlingu (procházení webu).
Přidat na X jedním klikem Sledovat autora na platformě XJak používají robots.txt vyhledávače
- Robot vyhledávače Seznam (Seznambot) si soubor robots.txt stáhne při každé návštěvě webu.
- Googlebot (robot vyhledávače Google) si soubor robots.txt uloží do keše až na 24 hodin a podle ní pak web prochází.
Příběh o rychlém zbohatnutí
Slyšel jsem vyprávění o firmě, která zákazníkovi postavila velký e-shop za několik stovek tisíc korun. Vývojáři však v souboru robots.txt schválně nechali direktivu zakazující procházení celého webu. Nový e-shop se samozřejmě vůbec neumisťoval ve výsledcích vyhledávání.
Majitel webu tedy přišel za vývojáři a ti mu nabídli, že za dalších 100 000 Kč ho do vyhledávání dostanou. Majitel souhlasil, zaplatil a firma za ty peníze jen odmazala dva řádky v souboru robots.txt. Udělali to tak prý u více svých klientů a majitel si snad za takto snadno získané peníze postavil dům.
Ale nebojte, vám se nic takového stát nemůže, protože si pravidelně studujete v této mé encyklopedii Je to jeden z důvodů, proč ji píšu – aby se online prostředí trochu zkultivovalo a podobní podvodníci ztratili živnou půdu.
Bezpečnostní rizika robots.txt
V souboru robots.txt se často nachází také zákaz přístupu robotům k administraci webu. A protože je soubor snadno přístupný komukoliv, potenciálnímu útočníkovi tím odhalujeme, na jaké adrese má administraci hledat. Totéž platí i pro různá API, utajený obsah a další potenciálně kritické části webu. Tím, že je zviditelníme v robots.txt, vlastně upozorníme na jejich existenci. Někteří kritici konceptu robots.txt toto považují za významné bezpečnostní riziko a doporučují zákaz procházení těchto odkazů do souboru raději nedávat.
Mně taková rada však nedává smysl, neboť jde o klasický příklad security through obscurity, tj. snahy zvýšit bezpečnost tím, že někdo něco neví. Tento přístup obecně nefunguje, vždy je třeba počítat s tím, že útočník adresu administrace nějak zjistí. Je tedy nutné ho odradit spíš spolehlivým autentizačním procesem. A máte-li bezvadně zabezpečené přihlašování, pak už ovšem vůbec nezáleží na tom, že útočník zná adresu přihlašovacího formuláře.
Syntaxe souboru robots.txt
Direktiva User-Agent
Určuje, kterého robota se pravidlo týká. Buď zde jako hodnota může být uvedena hvězdička (pak se pravidlo týká všech robotů), nebo přímo jméno konkrétního robota, třeba Seznambot. Více v pojmu User Agent.
Pravidel pak může následovat více – dokud znovu nezapíšeme User-Agent
, platí všechna zapsaná pravidla pro toho předchozího. Například zde budou mít všichni roboti zákaz procházení adresáře private a adresáře secret:
Direktiva Disallow
Určuje, kam má robot zakázaný přístup:
- když je zde „/“, nesmí robot nikam
- nebo může mít zakázaný přístup do nějakého adresáře (třeba „/not-here/“)
- nebo nesmí k adresám začínajícím na daný řetězec (například „/admin“)
- nebo ke konkrétnímu souboru („/docs/blocked.pdf“)
V příkladu níže nesmí robot Googlebot nikam, robot Seznambot nesmí do administrace Wordpressu:
Komentáře v robots.txt
Vše, co se na řádku nachází za mřížkou, je považováno za komentář a roboti to ignorují:
Mřížka může být také zapsána i za některou z direktiv → pak direktiva platí a komentář za ní se ignoruje:
Odkaz na sitemap.xml
Součástí robots.txt by měl být také odkaz na soubor sitemap.xml, pokud ji web generuje. Sitemap.xml
je mapa všech důležitých stránek webu vygenerovaná ve formátu XML a obsahující důležité informace právě pro roboty vyhledávačů (například frekvenci změn, datum poslední změny souboru apod.).
Odkaz se v souboru robots.txt uvádí včetně absolutní cesty k souboru ve formátu:
Web také může vytvářet více souborů sitemap.xml (například jednu pro detaily produktů, další pro kategorie atd.) – pak se do souboru robots.txt přidává direktiva Sitemap:
vícekrát (samozřejmě s různými adresami). Obvykle se to dělá u velkých webů, kde počet stránek přesahuje povolený limit na jednu sitemapu (50 000 odkazů).
Do souboru robots.txt lze tímto způsobem zapsat až 100 odkazů na sitemapy.
Nestandardní instrukce v robots.txt
Directiva Allow
Povoluje robotovi návštěvu daného adresáře či souboru, i když nadřazené adresáře byly zakázány. Googlebot i Seznambot tuto direktivu respektují. V příkladu níže mají všichni roboti zakázaný přístup všude na webu, kromě adresáře „free“.
Direktiva Crawl-delay
Udává počet sekund, které by měl robot počkat, než si stáhne další stránku. Google tuto direktivu ignoruje a místo ní umožňuje nastavení rychlosti procházení v nástroji Search Console.
Direktiva Request-rate
Slouží ke stejnému účelu jako Crawl-delay, tj. říká robotovi, s jakou maximální frekvencí má stránku navštěvovat a kolik stránek najednou si smí stáhnout. Seznambot na ni dobře slyší, Googlebot ji ignoruje. Hodnota se zapisuje se formátu počet dokumentu/počet jednotek, kde jednotky jsou s = sekundy, m = minuty, h = hodny a d = dny:
Direktiva Noindex
Za starých časů šlo indexování zakázat přímo v souboru robots.txt speciální direktivou noindex
, kterou už však vyhledávače dlouho nepodporují (a nebyla vlastně nikdy podporována oficiálně). Google to oficiálně přestal podporovat od července 2019. Zde to například potvrzuje John Mueller na Twitteru.
Divoké karty v robots.txt
Tzv. wildcards (nenapadá mě vhodný český překlad) jsou znaky, kterými lze nahradit jiný znak nebo celý řetězec znaků. Používají se v direktivách Disallow
a Allow
:
- Znak * (hvězdička) nahrazuje žádný, jeden nebo více jakýchkoliv znaků.
- Znak $ označuje konec URL.
Pokud bychom tedy z procházení chtěli vyloučit všechny PDF soubory, udělali bychom to takto:
Robots.txt verze 2.0
Vyhledávač Seznam podporuje také tzv. Robots.txt 2.0, novější standard klasického robots.txt, který výše popsanou syntaxi rozšiřuje ještě o regulární výrazy. Pokud vím, Googlebot dvojkovou verzi zatím nepodporuje.
Aby to na Seznambota fungovalo, je třeba mu to oznámit na druhém řádku (mezi User-agent
a Disallow
):
Pozor na to, že v ukázkovém případě Seznam vyloučí z procházení pouze adresu /admin a nikoliv třeba /administrace, tj. všechny adresy začínající na /admin, jak by to udělal u standardu robots.txt 1.0. To proto, že ve verzi 2.0. se neporovnává jen začátek, ale celá URL.
Chceme-li tedy vyloučit procházení celé URL, je třeba zapsat adresu regulárním výrazem, tj. s hvězdičkou na konci (hvězdička je zástupný znak, který znamená „jakékoliv znaky, včetně žádného“:
Osvědčená nastavení v robots.txt
Kromě vyloučení přístupu všech robotů do administrace, které zajistí, že odkaz na administraci nepůjde vyhledat ve vyhledávači, doporučuji také vyloužit přístup robotů na stránky s parametrem fbclid. Tento parametr začala přidávat webová verze Facebooku do všech odkazů. Zákazem tedy robotům sdělíte, že si nepřejete, aby na takové odkazy plýtvali časem. A šetříte si crawl budget. Ale neřeší to duplicity ani zákaz indexace, ty je třeba vyřešit jiným způsobem.
Otestujte si robots.txt
Google poskytuje v Search Console nástroj, kterým si můžete otestovat, zda váš soubor robots.txt blokuje vyhledávači přístup k některým konkrétním souborům. Zároveň vás upozorní na chybnou syntaxi či jiné problémy. Doporučuji vyzkoušet.
Časté chyby v robots.txt
-
Zakaz procházení CSS či JavaScriptu
Vyhledávače už dnes umí vyrendrovat celou stránku a podle toho si ověřují, v jaké její části se odkaz nachází. Nebude to však fungovat, pokud jim zakážeme přístup ke kaskádovým stylům či k JavaScriptu. Nedělejte to.
-
Zakázaný adresář nezačíná lomítkem
Pokud na začátku cesty neuvedeme lomítko, zákaz neplatí pro adresář, ale pro všechny cesty, které obsahují daný řetězec.
-
Relativní odkaz na sitemapu
Při odkazování na sitemap.xml nepoužívejte relativní URL, napište celou cestu k souboru, tedy včetně protokolu a domény.
Jiné podobné textové soubory
Formát souboru robots.txt se stal inspirací pro koncept souboru humans.txt, se kterým se postupně můžete stále častěji setkat na firemních webech. Slouží jako jakási síň slávy lidem, kteři se na tvorbě webu podíleli.
Stále více se také rozšiřují soubory security.txt, které slouží ke zveřejnění kontaktů, kam lze nahlásit objevené bezpečnostní problémy webu.