Jan Štráfelda - Průvodce internetovými projekty
celá ČR (přes video)  |  776 678 044  |  jan@strafelda.cz

Robots.txt

Standard robots.txt (v angličtině robots exclusion standard či robots exclusion protocol) umožňuje nastavit pravidla procházení webu pro crawlery.vyhledávačů a další crawlery.

Jde o jednoduchý textový soubor, který by si měl každý robot, který přijde na web, prohlédnout, aby zjistil, na které stránky webu smí a kam nesmí. Také se sem umisťuje odkaz na sitemap.xml, seznam všech důležitých stránek webu, o kterých mají vyhledávače vědět.

K čemu se robots.txt hodí

Typické příklady využití:

  1. 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í.

  2. 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.

  3. 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.

  4. 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.

  5. 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).

Jak 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 Emotikon: mrknutí, však chápeš 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:

User-agent: *
Disallow: /private/
Disallow: /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:

User-agent: Googlebot
Disallow: /
User-agent: Seznambot
Disallow: /wp-admin/

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í:

# toto je komentar

Mřížka může být také zapsána i za některou z direktiv → pak direktiva platí a komentář za ní se ignoruje:

User-agent: * # vsichni roboti

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:

Sitemap: https://www.strafelda.cz/sitemap.xml

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“.

User-agent: *
Disallow: /
Allow: /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.

User-agent: bingbot
Allow: /
Crawl-delay: 10

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:

User-agent: Seznambot
Request-rate: 10/1s     # 10 stranek za sekundu

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.

Noindex: /cesta-ke-strance/

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 DisallowAllow:

  • 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:

User-agent: *
Disallow: *.pdf$

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-agentDisallow):

User-agent: Seznambot
Robot-version: 2.0
Disallow: /admin

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“:

User-agent: Seznambot
Robot-version: 2.0
Disallow: /admin*

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.

User-agent: *
Disallow: /*?*fbclid=

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

  1. 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.

  2. 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.

  3. 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.

Další užitečné odkazy

O autorovi

Jsem Jan Štráfelda a působím jako průvodce online projekty. Potřebujete předělat web či e-shop? Nebo posunout internetový marketing? Poradím s obojím. 14 let budování vlastní digitální agentury mě skvěle vyškolilo – a rád se o zkušenosti podělím.

S čím také umím pomoci:

Své znalosti sdílím i na LinkedIn. Přidejte se k 2 811 marketérům, kteří z nich již pravidelně těží.