robots.txt i AI: zablokowanie robota GPTBot nie blokuje ChatGPT
W 2023 roku, gdy OpenAI opublikowało nazwę swojego robota trenującego, tysiące witryn dopisały dwa wiersze do pliku robots.txt: User-agent: GPTBot, a potem Disallow: /. Wiele osób sądzi od tamtej pory, że ChatGPT nie może już czytać ich stron. To nieprawda, a nieporozumienie bierze się ze stanu rzeczy, który dostawcy AI dokumentują zresztą jasno: wysyłają nie jednego robota, lecz kilka, każdego z odrębną rolą i odrębnym tokenem. Zablokowanie jednego nie blokuje pozostałych.
Kilka robotów, kilka ról, u każdego dostawcy
W OpenAI, według dokumentacji robotów:
- GPTBot zbiera strony, które mogą posłużyć do trenowania modeli. To jedyny robot, którego zablokowanie chroni przed wykorzystaniem treści w trenowaniu.
- OAI-SearchBot zasila indeks wyszukiwarki wbudowanej w ChatGPT. Jego zablokowanie usuwa strony z wyników wyszukiwania ChatGPT, a więc i z wynikających z nich cytowań.
- ChatGPT-User pobiera konkretną stronę, gdy użytkownik zażąda tego w rozmowie, na przykład wklejając adres URL albo zadając pytanie, które uruchamia odczyt. Nie przemierza sieci samodzielnie.
Anthropic stosuje ten sam podział, opisany w artykule pomocy poświęconym robotom: ClaudeBot do trenowania, Claude-SearchBot do indeksu wyszukiwania, Claude-User do pobrań żądanych przez użytkownika. Perplexity dokumentuje PerplexityBot (indeks) i Perplexity-User (pobranie na żądanie) w swojej dokumentacji crawlerów.
Google i Apple: token sterujący oddzielony od robota
Google działa inaczej. Googlebot pozostaje jedynym robotem, który przemierza strony na potrzeby wyszukiwarki, i to te same strony zasilają AI Overviews. Sterowanie wykorzystaniem w trenowaniu odbywa się przez odrębny token, Google-Extended, który nie jest robotem, lecz dyrektywą odczytywaną przez robota Googlebot, co wyjaśnia lista popularnych crawlerów Google. Google zaznacza, że token ten niczego nie zmienia w indeksowaniu stron. Apple postępuje tak samo z tokenem Applebot-Extended, opisanym w artykule pomocy o robocie Applebot, który steruje wykorzystaniem w trenowaniu, nie naruszając samego robota Applebot.
Do listy tej trzeba dodać CCBot, robota Common Crawl, którego otwarte archiwa posłużyły za surowiec dla wielu modeli. Zablokowanie robota CCBot to najszerszy środek przeciwko trenowaniu przez podmioty, które nie mają własnego robota.
Tabela tokenów i skutki każdej blokady
| Token robots.txt | Dostawca | Rola | Skutek zablokowania |
|---|---|---|---|
| GPTBot | OpenAI | Trenowanie | Żadnego wykorzystania w trenowaniu, cytowanie nadal możliwe |
| OAI-SearchBot | OpenAI | Indeks wyszukiwarki ChatGPT | Strony znikają z wyników i cytowań ChatGPT |
| ChatGPT-User | OpenAI | Odczyt na żądanie użytkownika | Użytkownik nie może już kazać przeczytać strony w rozmowie |
| ClaudeBot / Claude-SearchBot / Claude-User | Anthropic | Te same trzy role | Te same skutki, po stronie Claude |
| PerplexityBot / Perplexity-User | Perplexity | Indeks / odczyt na żądanie | Zniknięcie z odpowiedzi Perplexity / odczyt niemożliwy |
| Google-Extended | Token sterujący trenowaniem Gemini | Żadnego wpływu na wyszukiwarkę ani na AI Overviews | |
| Applebot-Extended | Apple | Token sterujący trenowaniem | Żadnego wpływu na robota Applebot (Siri, Spotlight) |
| CCBot | Common Crawl | Otwarte archiwum | Wycofanie z przyszłych archiwów, nie ze starych |
Co robots.txt może, a czego nie może
Protokół jest dziś znormalizowany przez RFC 9309. Trzy jego reguły wyjaśniają większość niespodzianek:
- Plik jest czytany wyłącznie w katalogu głównym hosta. Chodzi o hosta, a nie o domenę: robots.txt serwowany na przyklad.pl nie rządzi adresem blog.przyklad.pl, który jest odrębnym hostem. Plik robots.txt umieszczony w podkatalogu, na przykład pod ścieżką /blog/ hostowaną gdzie indziej, nigdy nie zostaje pobrany. Zawarte w nim dyrektywy, łącznie z deklaracjami sitemap, są niewidoczne dla wszystkich robotów. W serwisie medialnym podpiętym pod ścieżkę witryny głównej rozstrzyga robots.txt witryny głównej.
- Wygrywa grupa najbardziej szczegółowa i zastępuje ona grupę ogólną. Grupa User-agent: GPTBot, która zawiera wyłącznie Disallow: /, nie dziedziczy reguł z grupy User-agent: *. Jeśli grupa ogólna zakazywała dostępu do facetów albo plików, wskazany z nazwy robot znowu ma do nich dostęp. To częsty błąd, gdy grupy kolejnych robotów dokładane są miesiąc po miesiącu.
- Plik jest wskazówką, nie barierą. Wymienieni tu dostawcy deklarują, że go przestrzegają. Podmiot, który nie podaje swojej nazwy, wymyka się każdej regule imiennej. Żeby zablokować naprawdę, trzeba działać na poziomie serwera albo firewalla, ze skutkami ubocznymi, które opisujemy w artykule o martwym polu blokad na brzegu sieci.
Jaką politykę wybrać
Decyzja jest redakcyjna, zanim stanie się techniczna. Bronią się trzy stanowiska:
- Otworzyć wszystko. Witryna godzi się na trenowanie i na cytowanie. To domyślne stanowisko serwisu medialnego, który szuka widoczności, także w samych modelach.
- Odmówić trenowania, przyjąć cytowanie. Blokuje się GPTBot, ClaudeBot i CCBot oraz zakazuje Google-Extended i Applebot-Extended, przepuszczając jednocześnie OAI-SearchBot, Claude-SearchBot, PerplexityBot i roboty „User”. To stanowisko wydawcy, który chce być cytowany, nie karmiąc modeli za darmo.
- Zamknąć wszystko. Witryna rezygnuje z widoczności w AI. Da się tego bronić w intranecie albo przy treści płatnej, ale nie w serwisie medialnym, który chce liczyć się na stronie wyników wyszukiwania albo w wygenerowanej odpowiedzi.
Drugie stanowisko jest rozpowszechnione wśród wydawców prasowych i często źle wdrożone: w praktyce wielu z nich jednym ruchem zakazało wszystkiego, co zawierało „GPT” albo „Claude”, a więc także robotów wyszukiwania i odczytu. Skutkiem jest witryna nieobecna w wygenerowanych odpowiedziach, choć nikt w zespole tego nie postanowił.
Sprawdzać, zamiast zakładać
Kontrola mieści się w dwóch ruchach. Najpierw przeczytać plik robots.txt tak, jak jest serwowany w katalogu głównym, token po tokenie, mając powyższą tabelę przed oczami. Potem otworzyć logi serwera i zobaczyć, które roboty naprawdę przychodzą, jak często i które dostają kod 403 albo 404. Robot AI, który nigdy nie pojawia się w logach, niekoniecznie jest nieobecny: mógł zostać zatrzymany wcześniej przez firewall, zanim dotarł do serwera. Weryfikację tę opisujemy krok po kroku w artykule „Czytanie access logu w 30 minut”.
Po stronie Google, Search Console udostępnia raport robots.txt, który pokazuje ostatnią wersję odczytaną przez robota Googlebot, datę jej pobrania i ewentualne błędy analizy; jego zastosowanie opisuje przedstawienie robots.txt przez Google. U pozostałych dostawców odpowiednika nie ma: rozstrzygają logi, a ręczny test z user-agent każdego robota pozostaje najpewniejszym sposobem sprawdzenia, co serwer naprawdę odpowiada.
Serwis medialny, który chce być cytowany, nie może zdawać się na plik napisany dwa lata temu. Tokeny się zmieniają, robotów przybywa, a wiersz dopisany na wszelki wypadek pewnego dnia 2023 roku może w 2026 roku kosztować całą obecność w odpowiedziach AI.
Autor
Yann Léguillon
Prezes Mazette, wydawcy Joornal. Wspiera firmy budujące własne media: strukturę redakcyjną, widoczność w wyszukiwarkach i w odpowiedziach AI, produkcję na dużą skalę.