Robots.txt je obyčejný textový soubor, který leží v kořeni domény na adrese vasedomena.cz/robots.txt a robotům vyhledávačů, jako je Googlebot nebo Seznam, ale i AI crawlerům typu GPTBot či ClaudeBot, říká, které cesty na webu smí procházet a které ne. Je to první věc, kterou si robot na webu přečte, ještě než začne cokoliv stahovat.

Odkud se vzal

Robots.txt navrhl v únoru 1994 Martijn Koster. Podle dobových zpráv ho k tomu přimělo to, že někdo napsal špatně fungujícího crawlera, jehož agresivní procházení nechtěně způsobilo něco jako DDoS na jeho serveru. Do půl roku se z návrhu stal neformální standard, který respektovaly tehdejší vyhledávače jako WebCrawler, Lycos nebo AltaVista, a to čistě na základě dobrovolné shody, bez jakékoli oficiální normy.

Formálně to trvalo skoro třicet let. Organizace IETF robots.txt standardizovala až v září 2022 jako RFC 9309. Do té doby fungoval celý web na tichém gentlemanském souhlasu o tom, co je a co není slušné procházet.

K čemu slouží, a k čemu ne

Hlavní účel je řídit provoz crawlerů, ne skrývat stránky před Googlem. To je nejčastější mylná představa. Direktiva Disallow robotovi řekne “tuhle cestu neprocházej”, ale pokud na zablokovanou stránku vede odkaz odjinud, Google ji i tak může zaindexovat, jen bez popisku, protože obsah nikdy nestáhl. Robots.txt navíc nic negarantuje, jen to slušně žádá. Dodržují ho slušně se chovající roboti jako Googlebot nebo Seznam, zatímco útočníci a agresivní scrapeři na to klidně kašlou. Pro skutečné skrytí stránky z výsledků vyhledávání slouží meta name="robots" content="noindex" nebo přihlašovací obrazovka, ne robots.txt.

Robots.txt je dobrovolný protokol, nikdo ho nemusí poslechnout. V USA existuje precedens z případu eBay proti Bidder's Edge z roku 2000, kdy soud posoudil opakované ignorování robots.txt a scrapování jako obdobu vniknutí na cizí pozemek. Robots.txt tedy není jen technická drobnost, ale i určitý právní signál záměru.

Kdy se skutečně hodí? Necháte roboty ignorovat interní vyhledávání, košík, přihlášení, filtry a další stránky, které nemá smysl indexovat. Ušetříte tzv. crawl budget, protože u velkých e-shopů s tisíci filtrovanými URL to robotům pomůže trávit čas na stránkách, které mají skutečně smysl. A napíšete robotům, kde najdou sitemapu, nebo rozhodnete, jestli smí web procházet i AI boti pro trénink modelů či pro AI vyhledávání.

Syntaxe: direktivy a jejich parametry

Soubor se skládá ze skupin pravidel. Každá skupina začíná direktivou User-agent a pokračuje pravidly, která pro daného robota platí.

User-agent určuje, pro kterého robota skupina platí. Hvězdička znamená “všichni roboti, pro které není níž vlastní skupina”. Konkrétní jméno jako Googlebot nebo GPTBot platí jen pro toho robota, a jakmile má robot vlastní skupinu, pravidla z User-agent: * se na něj už nevztahují, nedědí se.

Disallow zakáže procházení cest začínajících daným řetězcem, takže Disallow: /kosik/ zablokuje vše pod /kosik/. Prázdná hodnota znamená “nic není zakázáno”. Allow naopak povolí konkrétní cestu, typicky jako výjimku uvnitř širšího zákazu. Google i Seznam ho podporují, i když formálně nejde o součást originálního standardu z roku 1994.

Sitemap obsahuje absolutní URL na XML sitemapu a může být kdekoli v souboru, nemusí patřit pod konkrétní User-agent. Zástupné znaky * a $ slouží k pokročilejšímu zápisu. Hvězdička zastupuje libovolný počet libovolných znaků, takže Disallow: /*?razeni zablokuje jakoukoliv URL s parametrem razeni kdekoliv v query stringu. Symbol dolaru znamená konec URL, takže Disallow: /*.pdf$ zablokuje jen URL končící na .pdf, ne ty, co mají za .pdf ještě něco navíc.

Crawl-delay je požadovaná prodleva mezi requesty v sekundách. Google ho ignoruje, protože rychlost procházení se dnes řeší přímo v Search Console, ale některé jiné vyhledávače ho respektují. Novější direktiva Content-Signal, kterou podporuje třeba Cloudflare, umožňuje webům signalizovat, k čemu smí být obsah použit, například search=yes pro zobrazování ve výsledcích nebo ai-train=no jako zákaz použití na trénink AI modelů. Zatím jde spíš o deklaraci záměru než univerzálně vymahatelné pravidlo. Řádek začínající znakem # je komentář, který robot ignoruje a slouží jen jako poznámka pro vás nebo kolegy.

Soubor se píše čistě v malých písmenech u cest, takže /Admin/ a /admin/ jsou dvě různé cesty, a musí ležet přesně v kořeni domény. Cestu vasedomena.cz/slozka/robots.txt Google nenajde ani nepoužije.

Cloudflare a “spravovaný” robots.txt

Pokud web běží přes Cloudflare a má zapnuté blokování AI botů, Cloudflare si do vašeho robots.txt automaticky vloží vlastní blok pravidel, v souboru obvykle orámovaný komentářem # BEGIN Cloudflare Managed content a # END, většinou s řádkem Content-Signal a Disallow: / pro konkrétní AI crawlery. Pokud origin server už nějaký robots.txt vrací s odpovědí 200, Cloudflare ho nepřepíše, ale svůj blok mu předsadí, takže výsledkem je jeden soubor se dvěma sadami pravidel dohromady.

Robots.txt i s tímhle blokem je pořád jen zdvořilá žádost. Pokud chcete AI botům procházení skutečně vynutit, ne jen požádat, Cloudflare na to má samostatnou funkci AI Crawl Control, která blokuje přímo na síťové úrovni bez ohledu na to, jestli se bot chová slušně.

AI boti navíc nejsou okrajové téma. Podle analýzy z roku 2023 blokovalo GPTBot přes robots.txt už zhruba 290 z 1000 nejnavštěvovanějších webů na světě, a organizace RSL Collective v roce 2025 spustila návrh standardu Really Simple Licensing přímo pro licencování obsahu vůči AI modelům nad rámec prostého Allow/Disallow.

Z praxe: Přesně tenhle spravovaný blok jsem našel při ladění vlastního webu. Soubor public/robots.txt v repu měl jednoduchý Allow: /, ale živá verze na jakubtomaides.cz/robots.txt obsahovala navíc celý blok mezi BEGIN Cloudflare Managed content a END, s Disallow: / pro GPTBot, ClaudeBot a další AI crawlery. Nešlo o chybu v kódu, Cloudflare to tam vložilo samo kvůli zapnuté ochraně proti AI botům na úrovni zóny. Bez otevření živé stránky, ne jen zdrojového souboru, bych si toho vůbec nevšiml.

Reálný příklad z e-shopu na Shoptetu

Takhle vypadá typický vygenerovaný robots.txt na Shoptetu, dobrá ukázka, protože kombinuje skoro všechno výše:

User-agent: *
Content-Signal: search=yes, ai-train=no
Disallow: /export/
Disallow: /admin/
Disallow: /kosik/
Disallow: /login/
Disallow: /*?razeni
Disallow: /*?parameterId
Disallow: /*:diskuse

User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: *
Allow: /

Sitemap: https://vasedomena.cz/sitemap.xml

Cesty /export/, /admin/ a /login/ jsou administrativní a přihlašovací, takže nemá smysl, aby je Google procházel. Pravidla /*?razeni a /*?parameterId blokují URL varianty vzniklé řazením a filtrováním produktů, protože bez nich by Google mohl procházet tisíce téměř identických URL jedné kategorie a plýtvat na to crawl budgetem. Cesta /*:diskuse blokuje speciální Shoptet cesty pro diskuze pod produkty. AI boti GPTBot a ClaudeBot mají vlastní skupiny s Allow: /, což je vědomé rozhodnutí daného e-shopu, že chce být viditelný i v AI vyhledávačích a chatbotech, na rozdíl třeba od defaultního nastavení Cloudflare, které řadu AI crawlerů blokuje automaticky. Druhý User-agent: * na konci s Allow: / je technicky nadbytečný, a striktně vzato i proti duchu specifikace, protože pravidla pro stejného robota by měla být v jedné skupině, ale běžné parsery včetně Googlu si s tím poradí bez problémů.

Nejčastější chyby

Myslet si, že Disallow znamená “skrýt ze výsledků vyhledávání”, je nejrozšířenější omyl. Neskryje, jen zabrání procházení, na skutečné skrytí použijte noindex. Zapomenutý soubor při redesignu je další klasika: nový web někdy zdědí Disallow: / z vývojářské verze a zablokuje se celý produkčnímu Googlu, proto po každém nasazení stojí za to zkontrolovat, co tam reálně je. Cesta bez lomítka na začátku taky nefunguje, Disallow: kosik nic nezablokuje, musí to být Disallow: /kosik. A chybějící soubor vůbec není sám o sobě chyba, znamená “vše povoleno”, ale server pak často vrací 404 stránku místo prázdné odpovědi, což některé nástroje může zbytečně mást. Lepší mít soubor, i kdyby byl minimální.

Zdroje

Chcete zjistit, co má váš web nebo e-shop na Shoptetu nastavené právě teď, včetně toho, jestli mu Cloudflare něco přidal navíc, nebo si rovnou sestavit nový soubor s presetem na AI boty? Mám na to kontrolu a generátor robots.txt zdarma.