Robots.txt dla botów AI działa na tych samych regułach co klasyczny plik dla Googlebota, ale operatorzy modeli używają po kilka botów naraz, każdego z inną rolą. Jeden wpis „zablokuj wszystko z AI w nazwie" potrafi wyłączyć stronę z wyszukiwania, chociaż celem było tylko zablokowanie treningu. Ten poradnik pokazuje gotową składnię per bot i trzy typowe scenariusze konfiguracji.
Czym różni się robots.txt pod boty AI od zwykłego pliku dla Google?
Formalnie niczym. To ten sam plik tekstowy w katalogu głównym domeny, te same dyrektywy User-agent, Disallow, Allow i Sitemap, ta sama składnia wieloznaczników. Google wprost potwierdza, że wspiera tylko te cztery pola, a dyrektywy spoza standardu, jak Crawl-delay, są przez niego ignorowane.** Google Search Central, składnia robots.txt: obsługiwane pola, wielkość liter, wieloznaczniki: developers.google.com/search/docs/crawling-indexing/robots/create-robots-txt
Różnica jest w liczbie graczy. Klasyczny plik SEO myślał głównie o Googlebocie, może jeszcze Bingbocie. Dziś każdy większy operator modelu utrzymuje po dwa lub trzy osobne boty z różnymi zadaniami: jeden wyszukuje i indeksuje strony pod odpowiedzi, drugi zbiera dane do treningu przyszłych modeli, trzeci pobiera konkretną stronę na żądanie użytkownika w rozmowie z modelem. Nazwa operatora w robots.txt nie wystarczy, bo pod jedną firmą kryje się kilka user agentów, z których każdy trzeba wpisać osobno.
Jakie boty AI istnieją i jakie mają role?
Cztery główne operatory dzielą swoje boty na te same trzy kategorie: wyszukiwanie, trening, pobranie na żądanie. Poniższa tabela porządkuje nazwy, bo to od nich zaczyna się każda konfiguracja.
| Operator | Bot wyszukujący | Bot treningowy | Pobranie na żądanie |
|---|---|---|---|
| OpenAI | OAI-SearchBot |
GPTBot |
ChatGPT-User |
| Anthropic | Claude-SearchBot |
ClaudeBot |
Claude-User |
| Perplexity | PerplexityBot |
brak osobno opisanej roli | Perplexity-User |
Googlebot (Search, AI Overviews, AI Mode) |
Google-Extended (trening i grounding Gemini/Vertex, nie wpływa na zwykły Search) |
zależnie od produktu |
Zablokowanie bota treningowego nie odbiera stronie widoczności w wyszukiwaniu. Zablokowanie bota wyszukującego owszem, bo to on decyduje, czy strona w ogóle trafia do puli, z której model wybiera źródła.** Centrum pomocy Anthropic/Claude, crawlowanie danych i blokowanie botów, `ClaudeBot`, `Claude-User`, `Claude-SearchBot`, lista adresów IP: support.claude.com · ** Dokumentacja Perplexity, przegląd crawlerów, `PerplexityBot`, `Perplexity-User`, adresy IP w formacie JSON, czas propagacji: docs.perplexity.ai/docs/resources/perplexity-crawlers · ** Google Search Central, wymogi dla AI Overviews i AI Mode: developers.google.com/search/docs/appearance/ai-features
Jak zapisać regułę dla jednego bota w robots.txt?
Każda reguła to para: linia User-agent z dokładną nazwą bota, potem jedna lub więcej linii Disallow albo Allow. Reguły są rozpatrywane w blokach, jeden blok na bota, i Google stosuje ten blok, który najdokładniej pasuje do danego user agenta, a nie sumę wszystkich pasujących reguł.** Google Search Central, składnia robots.txt: obsługiwane pola, wielkość liter, wieloznaczniki: developers.google.com/search/docs/crawling-indexing/robots/create-robots-txt
User-agent: GPTBot
Disallow: /
Ten zapis blokuje GPTBota całkowicie: wszystkie ścieżki od korzenia domeny w dół. Żeby zablokować tylko fragment serwisu, wystarczy węższa ścieżka:
User-agent: GPTBot
Disallow: /dokumenty-wewnetrzne/
Reguła Allow działa odwrotnie i zwykle służy do wyjątku wewnątrz zablokowanego katalogu. Ścieżki muszą zaczynać się od /, a katalogi kończyć na /, wielkość liter ma znaczenie w całym pliku.** Google Search Central, składnia robots.txt: obsługiwane pola, wielkość liter, wieloznaczniki: developers.google.com/search/docs/crawling-indexing/robots/create-robots-txt Gwiazdka * dopasowuje dowolny ciąg znaków w ścieżce, ale w nazwie user agenta lepiej nie polegać na wieloznacznikach: dokładna nazwa bota eliminuje ryzyko przypadkowego dopasowania niewłaściwego crawlera.
Jak skonfigurować robots.txt, żeby być widocznym w AI, ale nie oddawać treści do treningu?
Zablokuj osobnym wpisem Disallow: / boty treningowe (GPTBot, ClaudeBot, Google-Extended), a botom wyszukującym (OAI-SearchBot, Claude-SearchBot, PerplexityBot, Googlebot) zostaw dostęp. To najczęstsza intencja właściciela serwisu: udział w odpowiedziach ChatGPT, Claude czy Perplexity, bez zgody na to, żeby ta sama treść trafiła do zbioru treningowego kolejnej wersji modelu. Wymaga rozróżnienia bota wyszukującego od treningowego, nie blokowania operatora jako całości.
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Googlebot
Allow: /
Linie Allow: / dla botów wyszukujących są tu opcjonalne, bo domyślny stan bota bez żadnej reguły to i tak dostęp. Warto je jednak zostawić jawnie w pliku: kolejna osoba edytująca robots.txt od razu widzi intencję, zamiast się jej domyślać z braku wpisu.
Jak całkowicie zablokować dostęp botom AI w robots.txt?
Każdy bot z tabeli wyżej dostaje własny blok z Disallow: /, bez wyjątku dla wyszukiwania. Dotyczy to zwykle serwisów z treścią objętą licencją, materiałem płatnym albo danymi, których właściciel nie chce oddawać żadnemu modelowi w żadnej roli.
User-agent: GPTBot
Disallow: /
User-agent: OAI-SearchBot
Disallow: /
User-agent: ChatGPT-User
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Claude-SearchBot
Disallow: /
User-agent: Claude-User
Disallow: /
User-agent: PerplexityBot
Disallow: /
User-agent: Perplexity-User
Disallow: /
User-agent: Google-Extended
Disallow: /
Uwaga dotyczy Googlebota: ten wpis celowo go pomija. Zablokowanie Googlebot w robots.txt usuwa stronę nie tylko z AI Overviews i AI Mode, ale z całego Google Search, bo to jeden, wspólny token dla całego wyszukiwania.** Google Search Central, lista crawlerów Google, `Googlebot`, `Google-Extended`: developers.google.com/search/docs/crawling-indexing/google-common-crawlers Jeśli celem jest wyłącznie odcięcie się od funkcji AI Google, właściwym narzędziem jest Google-Extended, nie blokada Googlebota.
Dwa boty w tym zestawieniu traktują robots.txt inaczej niż reszta. ChatGPT-User i Perplexity-User uruchamiają się na żądanie konkretnego użytkownika w rozmowie z modelem, więc dokumentacja OpenAI wprost zastrzega, że reguły robots.txt „mogą nie mieć zastosowania" do tego bota, bo akcję inicjuje człowiek, nie automatyczne przeszukiwanie . Perplexity opisuje Perplexity-User podobnie i rekomenduje kontrolę na poziomie firewalla aplikacji (WAF) opartą o publikowane zakresy adresów IP, jeśli zależy komuś na twardym blokowaniu tego ruchu.** Dokumentacja Perplexity, przegląd crawlerów, `PerplexityBot`, `Perplexity-User`, adresy IP w formacie JSON, czas propagacji: docs.perplexity.ai/docs/resources/perplexity-crawlers
Jak zablokować tylko trening, a zostawić wyszukiwanie i pobieranie na żądanie?
Trzy bloki z Disallow: /, po jednym dla GPTBota, ClaudeBota i Google-Extended, wystarczą, bo boty wyszukujące i tak mają domyślny dostęp bez żadnej reguły. To węższy wariant poprzedniego scenariusza, częsty u serwisów, które i tak mają niską ekspozycję w wyszukiwaniu AI i głównie chcą zamknąć furtkę do zbiorów treningowych na przyszłość.
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
Wystarczą trzy bloki, bo boty wyszukujące i tak mają domyślny dostęp bez żadnego wpisu w pliku. Efekt: strona nie trafia do przyszłych zbiorów treningowych OpenAI, Anthropic ani Google, ale nadal może być indeksowana pod odpowiedzi ChatGPT Search, Claude i Gemini, o ile spełnia standardowe wymogi indeksacji.
Jak wygląda pełny plik łączący wyszukiwanie, sitemapę i resztę reguł SEO?
Robots.txt pod boty AI nie zastępuje reszty pliku, tylko go rozszerza. Blok ogólny User-agent: * z klasycznymi regułami SEO zostaje bez zmian, boty AI dostają własne, osobne bloki poniżej albo powyżej niego.
User-agent: *
Disallow: /admin/
Disallow: /koszyk/
User-agent: GPTBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: ClaudeBot
Disallow: /
Sitemap: https://przyklad.pl/sitemap.xml
Ten wariant realizuje scenariusz trzeci: blokuje wyłącznie trening trzech głównych operatorów, resztę serwisu, w tym boty wyszukujące AI, zostawia dostępną na tych samych warunkach co dla Googlebota w bloku ogólnym.
Ile czasu zajmuje propagacja zmiany w robots.txt?
Żaden z operatorów nie stosuje zmian natychmiast po zapisaniu pliku, więc test tego samego dnia często pokazuje jeszcze stary stan. OpenAI podaje wprost, że dostosowanie systemów wyszukiwania do nowej wersji robots.txt zajmuje około 24 godzin od aktualizacji pliku na serwerze.** OpenAI, centrum pomocy, ChatGPT Search: czas propagacji zmian w robots.txt (ok. 24 godziny): help.openai.com/en/articles/9237897-chatgpt-search Perplexity podaje identyczny rząd wielkości: do 24 godzin na odzwierciedlenie zmiany w swoich systemach.** Dokumentacja Perplexity, przegląd crawlerów, `PerplexityBot`, `Perplexity-User`, adresy IP w formacie JSON, czas propagacji: docs.perplexity.ai/docs/resources/perplexity-crawlers
Google cachuje treść robots.txt do 24 godzin, a w praktyce odświeża ją przy okazji standardowego, mniej więcej dobowego cyklu crawlowania. Jeśli zależy na szybszej reakcji, Search Console ma funkcję żądania ponownego sprawdzenia pliku z poziomu raportu robots.txt, co przyspiesza odświeżenie cache poza domyślny cykl.** Google Search Central, aktualizacja robots.txt, czas cachowania (do 24 godzin), żądanie ponownego sprawdzenia w Search Console: developers.google.com/search/docs/crawling-indexing/robots/submit-updated-robots-txt Anthropic w swojej dokumentacji nie podaje konkretnej liczby godzin dla ClaudeBota ani Claude-SearchBota, więc bezpieczniej założyć podobny, dobowy rząd wielkości niż oczekiwać zmiany w ciągu minut.** Centrum pomocy Anthropic/Claude, crawlowanie danych i blokowanie botów, `ClaudeBot`, `Claude-User`, `Claude-SearchBot`, lista adresów IP: support.claude.com
Jak sprawdzić, że wpis w robots.txt faktycznie zadziałał?
Sprawdzenie zaczyna się od samego pliku, nie od wyników w ChatGPT czy Perplexity, bo te reagują z opóźnieniem opisanym wyżej. Najpierw więc otwarcie przyklad.pl/robots.txt w przeglądarce i wizualna kontrola, czy nowa reguła w ogóle tam jest i czy nazwa bota jest zapisana dokładnie tak, jak w dokumentacji operatora (wielkość liter ma znaczenie).
Drugi krok to zapytanie serwera z podszyciem się pod konkretnego bota przez nagłówek User-Agent, na przykład poleceniem curl -A "GPTBot" https://przyklad.pl/sciezka -I. To pokazuje kod odpowiedzi serwera, ale nie potwierdza jeszcze, że dany operator zastosował już nową regułę po swojej stronie, tylko że serwer i ewentualny firewall aplikacji nie blokują tego ruchu na poziomie infrastruktury.
Trzeci krok to weryfikacja przez publikowane przez operatorów listy adresów IP w formacie JSON: OpenAI publikuje osobne listy dla GPTBot, OAI-SearchBot i ChatGPT-User pod adresami w domenie openai.com , Anthropic prowadzi jedną zbiorczą listę pod claude.com/crawling/bots.json, Perplexity osobne listy dla PerplexityBot i Perplexity-User.** Centrum pomocy Anthropic/Claude, crawlowanie danych i blokowanie botów, `ClaudeBot`, `Claude-User`, `Claude-SearchBot`, lista adresów IP: support.claude.com · ** Dokumentacja Perplexity, przegląd crawlerów, `PerplexityBot`, `Perplexity-User`, adresy IP w formacie JSON, czas propagacji: docs.perplexity.ai/docs/resources/perplexity-crawlers Zestawienie tych adresów z logami serwera potwierdza, że ruch z danym user agentem faktycznie pochodzi od operatora, a nie od podszywającego się skryptu. Dla Google dodatkowym narzędziem jest raport robots.txt w Search Console, który pokazuje ostatnio pobraną i zinterpretowaną przez Googlebota wersję pliku.** Google Search Central, aktualizacja robots.txt, czas cachowania (do 24 godzin), żądanie ponownego sprawdzenia w Search Console: developers.google.com/search/docs/crawling-indexing/robots/submit-updated-robots-txt
Jakie błędy najczęściej psują konfigurację robots.txt pod boty AI?
Pierwszy i najczęstszy błąd to blokowanie operatora po fragmencie nazwy zamiast pełnego, dokładnego user agenta, na przykład reguła myślana jako blokada samego GPTBota, która przez nieuwagę obejmuje też OAI-SearchBot, bo ktoś skopiował regułę bota treningowego i podmienił tylko część nazwy. Skutek: strona znika z wyników wyszukiwania AI, chociaż celem było wyłącznie zablokowanie treningu.
Drugi błąd to traktowanie Googlebota jak bota wyłącznie od AI Overviews. To jeden, wspólny token dla całego Google Search, więc jego zablokowanie usuwa stronę z indeksu w ogóle, nie tylko z funkcji generatywnych.** Google Search Central, lista crawlerów Google, `Googlebot`, `Google-Extended`: developers.google.com/search/docs/crawling-indexing/google-common-crawlers
Trzeci błąd to zapominanie o subdomenach. Robots.txt obowiązuje per host, więc reguła na przyklad.pl/robots.txt nie obejmuje automatycznie blog.przyklad.pl ani sklep.przyklad.pl. Każda subdomena z osobnym plikiem robots.txt potrzebuje własnego kompletu reguł, inaczej boty AI mogą mieć inny dostęp na subdomenie niż na domenie głównej.
FAQ
Czy wystarczy jeden ogólny wpis `User-agent: *` z `Disallow: /`, żeby zablokować wszystkie boty AI naraz?
Nie ma na to gwarancji. User-agent: * obejmuje domyślnie roboty bez własnego, dopasowanego bloku, ale bot z dokładną nazwą w osobnym bloku, na przykład User-agent: GPTBot, stosuje się do tego dokładniejszego bloku, nie do reguły ogólnej. Blokowanie konkretnych botów AI wymaga osobnych bloków z ich dokładnymi nazwami.
Czy blokada w robots.txt usuwa stronę, która już została zaindeksowana wcześniej?
Nie od razu i nie automatycznie. Robots.txt kontroluje przyszłe pobrania, nie usuwa istniejących danych z indeksu czy z wcześniej zebranych zbiorów treningowych. Do usunięcia już zaindeksowanej strony służą inne mechanizmy, jak noindex w meta robots albo narzędzia do usuwania adresów w konsolach webmasterskich.
Czy Perplexity-User i ChatGPT-User w ogóle respektują robots.txt?
Częściowo. Oba działają na żądanie konkretnego użytkownika w rozmowie z modelem, a dokumentacje obu operatorów wprost zaznaczają, że standardowe reguły robots.txt mogą nie mieć tu pełnego zastosowania, bo to nie jest automatyczne, masowe przeszukiwanie. Twardsza kontrola tego ruchu wymaga blokady na poziomie serwera lub firewalla aplikacji, opartej o publikowane zakresy adresów IP.