Přeskočit na hlavní obsah

Váš robots.txt dělá pravý opak toho, co si myslíte

Přidáte pojmenovaný blok pro GPTBot a ten přestane respektovat vaše wildcard pravidla. Nejčastější chyba v robots.txt tiše vydá AI crawlerům stránky, které jste chtěli zablokovat.

Váš robots.txt dělá pravý opak toho, co si myslíte
Sdílet na LinkedIn

Vídám to na víc webech, než bych si chtěl přiznat.

Někdo chce povolit GPTBotu, ClaudeBotu nebo PerplexityBotu, aby procházeli jeho web. Tak pro každého z nich přidá blok s Allow: /.

Jejich wildcard pravidla už zakazují /admin/, /cart/, /checkout/ a pár dalších cest, které procházet nechtějí. Vypadá to správně. I člověk si to přečte jako správné.

Je to úplně špatně.

GPTBot právě dostal povolení procházet /admin/, /cart/ a všechno ostatní, co jste chtěli zablokovat.

Tohle je nejčastější chyba v robots.txt, na kterou narážím. A je čím dál nebezpečnější, protože lidé vrší pravidla pro AI crawlery na starší konfigurace, aniž by zkontrolovali, jak spolu vzájemně fungují.

Chyba, která smaže vaše wildcard pravidla

Tady je ten typ robots.txt, o kterém mluvím:

User-agent: GPTBot
Allow: /

User-agent: *
Disallow: /admin/
Disallow: /search/
Disallow: /cart/
Disallow: /checkout/
Disallow: /private/

Většina lidí to čte jako „povol GPTBotu plný přístup a navíc zablokuj tyhle cesty pro všechny“.

Jenže crawlery to takhle nečtou.

Wildcard skupina se s GPTBot skupinou nekombinuje. GPTBot čte svůj vlastní blok, vidí Allow: / bez jediného disallow a teď může volně procházet /admin/, /cart/, /private/ a všechno ostatní.

Stejná logika platí pro libovolný pojmenovaný user-agent. ClaudeBot, PerplexityBot, Bingbot. Ve chvíli, kdy botovi dáte jeho vlastní blok, ten bot přestane vaše wildcard pravidla číst úplně.

Ano, znamená to, že váš dokonale vyladěný seznam disallow v User-agent: * přestane platit pro každého pojmenovaného bota ve stejném souboru.

Přesně kvůli tomuhle vzorci jsem viděl prosakovat admin stránky, výsledky interního vyhledávání i staging adresáře. Majitel webu o tom neměl tušení. Wildcard blok vypadal důkladně.

Co specifikace ve skutečnosti říká

Tohle není otázka výkladu. RFC 9309, oficiální standard pro robots.txt od roku 2022, je v tom jednoznačné:

If no matching group exists, crawlers MUST obey the group with a user-agent line with the "*" value, if present.

Nosná část je fráze „if no matching group exists“ (pokud neexistuje žádná odpovídající skupina).

Wildcard skupina je záloha pro boty, kteří nemají vlastní blok. Není to základní vrstva, ze které by pojmenované skupiny dědily.

Dokumentace Googlu to říká ještě tvrději:

Only one group is valid for a particular crawler... Other groups are ignored. User agent specific groups and global groups (*) are not combined.

Dva nezávislé primární zdroje. Jeden mechanismus.

Crawler si vybere nejkonkrétnější skupinu, která odpovídá jeho jménu. Spustí pravidla té skupiny. Všechno ostatní v souboru ignoruje.

Na pořadí nezáleží. Žádná dědičnost, žádný fallthrough, žádný scope chain.

Takže pokud máte blok User-agent: * a blok User-agent: GPTBot, GPTBot ten wildcard blok doslova nevidí. Neví, že existuje.

Proč je to u AI crawlerů horší

U klasického Googlebota tahle chyba obvykle odhalí admin stránky a výsledky interního vyhledávání. Otravné, ale ne katastrofa. Google si s nízkohodnotnými stránkami poradí rozumně.

AI crawlery tenhle filtr nemají.

GPTBot, ClaudeBot a podobné trénovací crawlery seberou obsah a nasypou ho přímo do trénovacích datasetů. Jakmile vaše URL z interního vyhledávání skončí v trénovacím korpusu — včetně všeho, co vaši uživatelé naťukali do vyhledávání — nemáte žádný realistický způsob, jak je odtamtud dostat ven.

U OpenAI neexistuje žádná obdoba nástroje pro odstranění obsahu jako v Search Console.

Ještě horší je to ve chvíli, kdy jste pojmenované bloky přidali právě proto, abyste AI crawlery pustili dovnitř kvůli viditelnosti. Chtěli jste, aby viděli vaše blogové články a produktové stránky. Teď ale vidí i váš nákupní košík a ten staging adresář, na který jste tři migrace zpátky zapomněli.

Auditoval jsem weby, kde tahle jediná chyba vystavila AI botům tisíce interních URL.

Auditní nástroje, které většina lidí používá, to neoznačí. Syntaxe je totiž technicky validní. Dostanete zelenou fajfku na robots.txt, který přitom tiše prosakuje na všechny strany.

Mějte na paměti, že seznam AI crawlerů pořád roste. GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, Google-Extended, Applebot-Extended, Bytespider, CCBot a další.

Každé jediné z těch jmen, jakmile ho do souboru napíšete, ve výchozím stavu unikne vašemu wildcard bloku.

Jak to opravit

První otázka: potřebujete pro toho bota vůbec jiná pravidla?

Pokud má GPTBot dodržovat stejná pravidla jako všichni ostatní, žádný pojmenovaný blok nepotřebujete. Smažte ho. Wildcard se o GPTBota postará automaticky.

User-agent: *
Disallow: /admin/
Disallow: /search/
Disallow: /cart/
Disallow: /checkout/
Disallow: /private/

To je kompletní robots.txt pro případ, kdy každý bot, ať už AI nebo jiný, dodržuje stejná pravidla.

Blok pro konkrétního bota potřebujete jen tehdy, když pro toho daného bota chcete jiné chování. Zablokovat ClaudeBotu celý web, zatímco ostatní mohou procházet normálně. Zablokovat GPTBotu vaši dokumentaci, ale přitom nechat Google, ať ji indexuje pro vyhledávání. Tenhle typ věcí.

V takovém případě musí být blok pro daného bota soběstačný. Každá cesta, kterou chcete vynutit, se v něm musí zopakovat.

User-agent: ClaudeBot
Disallow: /

User-agent: GPTBot
Disallow: /admin/
Disallow: /search/
Disallow: /cart/
Disallow: /checkout/
Disallow: /private/
Disallow: /docs/

User-agent: *
Disallow: /admin/
Disallow: /search/
Disallow: /cart/
Disallow: /checkout/
Disallow: /private/

Ano, je to repetitivní. Ano, špatně se to škáluje. V robots.txt žádný mechanismus dědičnosti není.

To je známé omezení standardu.

Pokud spravujete dlouhý seznam disallow napříč mnoha boty, generujte soubor ze šablony místo ručních úprav. Jeden zdroj pravdy pro cesty pokaždé vyhraje nad copy-paste.

robots.txt vypadá jako jeden z nejjednodušších souborů v SEO výbavě. Prostý text. Pár klíčových slov. Přece se to nedá pokazit.

Dá. A vídám to neustále. Zvlášť teď, když se všichni hrnou přidávat pravidla pro AI crawlery, aniž by zkontrolovali, jak s nimi stávající pravidla interagují.

Ta chyba není překlep. Je to nepochopení toho, jak specifikace ve skutečnosti funguje.

Wildcard skupiny se nesčítají. Bloky pro konkrétní boty je přepisují celé. Každou cestu, kterou chcete blokovat, je potřeba explicitně vypsat u každého bota, kterého jste pojmenovali.

To není best practice pro robots.txt. To je přímo specifikace robots.txt.

Pokud má váš soubor jak blok User-agent: *, tak nějakého pojmenovaného bota, proveďte audit ještě dnes. Je reálná šance, že boti, které jste chtěli mít pod kontrolou, vám běhají na svobodě.

Martin Stepanek

Martin Štěpánek

Konzultant technického SEO a výkonu webu

S více než 10 lety zkušeností s tvorbou a optimalizací webů jsem se naučil, že technická kvalita je základem úspěchu. Pomáhám firmám maximalizovat potenciál jejich webu prostřednictvím technického SEO a optimalizace výkonu, které přinášejí lepší zkušenosti uživatelům a silnější výsledky firmám.

Newsletter

Technické SEO tipy každé dva týdny do vaší schránky

Získejte praktické strategie, které pomohou majitelům firem a vývojářům vytvářet výjimečné uživatelské zážitky, optimalizovat technické SEO a výkon, a zvyšovat tržby.

Newsletter je pouze v angličtině
    Mersudin ForbesMark Williams-CookAleyda Solis
    Doporučováno předními odborníky v oboru

    Žádný spam. Odhlásit se můžete kdykoli.

    Přihlášením souhlasím s Ochrana osobních údajů a Obchodní podmínky.

    Získejte bezplatné tipy o technickém SEO a výkonu webu

    Sledovat mě