Roboty AI: zmierzone wizyty GPTBot i ClaudeBot oraz blokowanie przez robots.txt i nginx

Robot AI to bot, którym firmy AI zbierają strony internetowe do trenowania modeli, wyszukiwania z AI i odpowiadania na pytania użytkowników. Aby sprawdzić, jak często te boty odwiedzają serwer z Nginx + Apache, porównaliśmy UA z 14 dni logów dostępu serwera źródłowego z zakresami IP publikowanymi przez każdą firmę: żądań z oficjalnych zakresów było łącznie 18 605, a ustawienia blokowania lub dopuszczania ich w robots.txt i nginx zebraliśmy według oficjalnej dokumentacji.
Okres to 4–17 października 2026; żądania obsłużone przez cache stojący przed serwerem, które nie dotarły do serwera źródłowego, oraz żądania bez zapisanego prawdziwego IP nie są wliczone.
1️⃣ Rozpoznawanie robotów AI: UA w logu dostępu i opublikowane zakresy IP
Nie każde żądanie zapisane jako GPTBot pochodzi od OpenAI. UA to tekst, który wpisuje i wysyła sam żądający, więc każdy może wysyłać żądania pod nazwą GPTBot czy ClaudeBot.
Dlatego najpierw liczymy żądania według nazwy bota z UA, a potem porównujemy je z zakresami IP publikowanymi przez każdą firmę. Poniżej nazwy botów AI policzone w logach z jednego dnia.
grep -oiE '(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|Bytespider|CCBot|Amazonbot|meta-externalagent)/' access.log-20261018 | sort | uniq -c | sort -rn 2968 GPTBot/
2084 ClaudeBot/
622 meta-externalagent/
535 Amazonbot/
167 PerplexityBot/
99 OAI-SearchBot/
30 ChatGPT-User/
21 Claude-User/
17 Claude-SearchBot/
12 Meta-ExternalAgent/
10 Perplexity-User/
7 CCBot/Liczenie z [/] po nazwie pomija tekst, który nie jest nazwą, jak adres kontaktowy claudebot@ w UA Claude-SearchBot, a nazwy zapisane z inną wielkością liter liczą się osobno. Następnie sprawdzamy w pierwszej kolumnie, z jakich IP przyszły żądania GPTBot.
grep 'GPTBot/' access.log-20261018 | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 2524 74.7.x.x
428 185.152.x.x
12 34.53.x.x
1 74.7.x.x
1 172.182.x.xPrzy żądaniach, które przeszły przez CDN lub proxy, pierwsza kolumna zapisuje adres serwera pośredniego, więc takie wiersze porównuj według adresu w kolumnie X-Forwarded-For na końcu wiersza logu. OpenAI publikuje zakresy IP GPTBot jako plik JSON.
curl -s https://openai.com/gptbot.json -o gptbot.jsonTo, czy IP jest w pobranym pliku zakresów, sprawdzisz modułem ipaddress ze standardowej biblioteki Pythona.
# inrange.py — sprawdza, czy IP jest w pliku zakresów JSON
import json, sys, ipaddress
nets = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix')) for p in json.load(open(sys.argv[1]))['prefixes']]
for a in sys.argv[2:]:
ip = ipaddress.ip_address(a)
print(a, 'IN' if any(ip in n for n in nets) else 'OUT')Wpisz IP do sprawdzenia po nazwie pliku zakresów.
python3 inrange.py gptbot.json 74.7.x.x 34.53.x.x74.7.x.x IN
34.53.x.x OUTIP, które wysłało 2 524 żądania, było w opublikowanych zakresach, a to, które wysłało 12, poza nimi. Anthropic, Perplexity, Apple, Common Crawl, Google i Bing publikują pliki zakresów w tym samym formacie, a w przypadku Amazonbot sprawdziliśmy, czy odwrotny DNS kończy się na crawl.amazonbot.amazon. To jak kontrola paszportowa na lotnisku, gdzie sprawdza się paszport, a nie nazwisko na karcie pokładowej.
Porównanie w ten sposób 14 dni pokazało, że 70 IP na zmianę używało 23 nazw botów, w tym GPTBot, ClaudeBot i Googlebot, wysyłając 48 041 żądań, z czego 57% trafiało pod adresy szukające luk, jak .php czy .env. Wszystkie 809 żądań z nazwą Google-Extended też pochodziło z tej grupy; według dokumentacji Google Google-Extended to token tylko dla robots.txt, bez UA używanego w żądaniach HTTP.
2️⃣ Wizyty według UA: 14 dni pomiarów i trend tygodniowy
Tabela poniżej pokazuje żądania z 14 dni od 4 do 17 października. W przypadku botów z opublikowanymi zakresami liczyliśmy tylko żądania z tych zakresów; boty, których nie porównywaliśmy z zakresami, liczyliśmy według UA, bez grupy podszywających się.
| Bot | Firma | Żądania (14 dni) | Sposób weryfikacji | Grupa podszywających się |
|---|---|---|---|---|
| ClaudeBot | Anthropic | 10,305 | Opublikowane zakresy IP | 2,387 |
| PerplexityBot | Perplexity | 3,406 | Opublikowane zakresy IP | 2,262 |
| GPTBot | OpenAI | 2,546 | Opublikowane zakresy IP | 2,328 |
| OAI-SearchBot | OpenAI | 1,399 | Opublikowane zakresy IP | 2,347 |
| ChatGPT-User | OpenAI | 334 | Opublikowane zakresy IP | 2,409 |
| Applebot | Apple | 330 | Opublikowane zakresy IP | 2,372 |
| CCBot | Common Crawl | 275 | Opublikowane zakresy IP | 2,275 |
| Claude-User | Anthropic | 10 | Opublikowane zakresy IP | 2,192 |
| Claude-SearchBot | Anthropic | 0 | Opublikowane zakresy IP | 2,297 |
| Perplexity-User | Perplexity | 0 | Opublikowane zakresy IP | 2,235 |
| Meta-ExternalAgent | Meta | 14,384 | UA | 2,339 |
| Bytespider | ByteDance | 6,569 | UA | 2,336 |
| Amazonbot | Amazon | 3,493 | UA · odwrotny DNS | 2,379 |
| Googlebot (dla porównania) | 10,545 | Opublikowane zakresy IP | 3,951 | |
| bingbot (dla porównania) | Microsoft | 13,477 | Opublikowane zakresy IP | 1,551 |
Spośród robotów AI zweryfikowanych z opublikowanych zakresów najwięcej żądań miał ClaudeBot, 10 305, przed PerplexityBot z 3 406 i GPTBot z 2 546. Claude-SearchBot i Perplexity-User miały zero żądań z opublikowanych zakresów; każde żądanie pod tymi nazwami pochodziło od grupy podszywających się.
Nawet po odsianiu podszywających się problemem zostają boty nieporównywane z zakresami. Meta-ExternalAgent miał według UA najwięcej żądań, 14 384, ale sprawdzona dokumentacja robotów Meta nie ma listy zakresów IP, więc liczyliśmy go tylko według UA.
Tydzień po tygodniu GPTBot wahał się między 12 a 3 383 żądaniami, a ClaudeBot przez wszystkie pięć tygodni mieścił się w przedziale 6 930–10 217.
3️⃣ Jakie adresy pobierają: rodzaje adresów i kody odpowiedzi
Roboty AI nie pobierają tylko tekstu wpisów. W ciągu 14 dni 21% żądań Meta-ExternalAgent dotyczyło obrazów, a GPTBot z opublikowanych zakresów pobrał kanał RSS 476 razy, ClaudeBot zaś mapę strony 314 razy.
Zbierają też adresy wersji w innych językach: z opublikowanych zakresów 1 111 żądań ClaudeBot i 436 żądań GPTBot dotyczyło wpisów w innych językach. Kody odpowiedzi policzysz od razu z logów z jednego dnia.
grep 'ClaudeBot/' access.log-20261018 | awk '{print $9}' | sort | uniq -c | sort -rn | head -4 1357 200
665 301
31 304
21 404Nawet w jednym dniu prawie jedna trzecia to 301, a w ciągu 14 dni 5 915 (57%) z 10 305 żądań ClaudeBot z opublikowanych zakresów było 301. Spośród nich 4 736 to żądania bez końcowego [/], więc WordPress odpowiadał 301 na adres z [/] i ten sam wpis był pobierany jeszcze raz.
4️⃣ Ustawienia robots.txt: tokeny treningowe i wyszukiwania
robots.txt sprawdza się przy botach treningowych i wyszukiwania, które zbierają automatycznie, ale nie przy botach pobierających stronę, gdy użytkownik zadaje pytanie. Dokumentacja OpenAI i Perplexity zaznacza, że reguły robots.txt mogą nie dotyczyć żądań ChatGPT-User i Perplexity-User.
Każda firma dzieli tokeny według przeznaczenia, a według dokumentacji OpenAI zablokowanie jednego tokenu nie wpływa na ustawienia pozostałych. Poniżej tokeny potwierdzone w oficjalnej dokumentacji każdej firmy.
| Token robots.txt | Firma | Przeznaczenie | Po zablokowaniu (oficjalna dokumentacja) |
|---|---|---|---|
| GPTBot | OpenAI | Zbieranie danych treningowych | Sygnał, by nie używać do treningu |
| OAI-SearchBot | OpenAI | Wyszukiwanie ChatGPT | Wykluczenie z odpowiedzi wyszukiwania ChatGPT (nadal może się pojawić jako link nawigacyjny) |
| ChatGPT-User | OpenAI | Żądanie użytkownika | Reguły robots.txt mogą nie obowiązywać |
| ClaudeBot | Anthropic | Zbieranie danych treningowych | Późniejsze materiały wyłączone z danych treningowych |
| Claude-SearchBot | Anthropic | Poprawa jakości wyszukiwania | Widoczność w wynikach wyszukiwania może spaść |
| Claude-User | Anthropic | Żądanie użytkownika | Nie pobiera stron na pytania użytkowników |
| PerplexityBot | Perplexity | Wyszukiwanie (nie trening) | Wykluczenie z wyników wyszukiwania |
| Perplexity-User | Perplexity | Żądanie użytkownika | Zwykle nie stosuje się do robots.txt |
| Google-Extended | Trening · grounding Gemini | Bez wpływu na widoczność i pozycję w wyszukiwarce Google | |
| Applebot-Extended | Apple | Trening modeli bazowych | Bez wpływu na widoczność w wyszukiwaniu Apple |
| meta-externalagent | Meta | Trening modeli AI itp. | Blokada przez Disallow (przykład z dokumentacji) |
Google-Extended i Applebot-Extended to nie osobne boty zbierające, lecz tokeny używane tylko w robots.txt. Zbieraniem zajmują się istniejące roboty Google i Apple, a te tokeny decydują jedynie, czy zebrane treści można wykorzystać do trenowania modeli AI.
robots.txt, który odmawia tylko zbierania do treningu, a zachowuje widoczność w wyszukiwaniu z AI, wygląda tak; dokumentacja OpenAI, Perplexity i Meta mówi, że zmiany mogą zacząć działać nawet po 24 godzinach.
# odmowa zbierania do treningu
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: meta-externalagent
Disallow: /
# dopuszczenie botów wyszukiwania AI
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /Obecny robots.txt na serwerze Nginx + Apache nie ma wierszy wskazujących boty AI.
curl -s https://example.com/robots.txt# dotyczy wszystkich botów wyszukiwarek
User-agent: *
# blokada stron administracyjnych (bezpieczeństwo)
Disallow: /wp-admin/
# dopuszczenie wywołań ajax w funkcjach administracyjnych (niezbędne do normalnego działania)
Allow: /wp-admin/admin-ajax.php
# dodane: blokada spamowych wyników wyszukiwania (ochrona SEO)
Disallow: /search/
Disallow: /?s=
# wskazanie mapy strony (szybsze indeksowanie)
Sitemap: https://example.com/sitemap_index.xmlBez wierszy dla botów AI 2 546 żądań GPTBot z opublikowanych zakresów w ciągu 14 dni nie dostało żadnego 403: 2 090 obsłużono kodem 200, a 432 kodem 301. W tym samym okresie żądań robots.txt z opublikowanych zakresów w logach źródłowych było 36 od Googlebot, 8 od ClaudeBot i 6 od OAI-SearchBot, a od GPTBot i PerplexityBot żadnego. Żądania robots.txt obsłużone przez cache przed serwerem też nie trafiają do logów źródłowych.
5️⃣ Blokowanie robotów AI w nginx i jego granice
Nawet po zablokowaniu w robots.txt żądania, które nie czytają reguł, docierają prosto do serwera. W nginx [map] ustawia zmienną na 1, gdy UA zawiera nazwę bota.
# wewnątrz bloku http — 1, jeśli w UA jest nazwa bota treningowego
map $http_user_agent $ai_train_bot {
default 0;
~*GPTBot/ 1;
~*ClaudeBot/ 1;
~*Bytespider 1;
~*CCBot/ 1;
}W bloku server zwróć 403, gdy ta zmienna ma wartość 1.
# wewnątrz bloku server
location / {
if ($fake_searchbot) {
return 403;
}
if ($ai_train_bot) {
return 403;
}
# dalej dotychczasowe ustawienia
}Blokada według UA sprawdza tylko nazwę, więc podrobione żądania z tą samą nazwą są blokowane razem z prawdziwym botem, a przechodzą, gdy ją zmienią. Żądania pożyczające nazwę dopuszczonego bota wyszukiwania odsiejesz tylko porównaniem z opublikowanymi zakresami IP.
Aby dopuścić OAI-SearchBot i odrzucać tylko żądania o tej samej nazwie spoza jego zakresów, zamień opublikowane zakresy w zmienną przez [geo] i porównuj ją razem z UA.
# wewnątrz bloku http — opublikowane zakresy OAI-SearchBot (wstaw cały searchbot.json; poniżej tylko dwa wiersze)
geo $oai_search_net {
default 0;
104.210.140.128/28 1;
135.234.64.0/24 1;
}
map $http_user_agent:$oai_search_net $fake_searchbot {
default 0;
~*OAI-SearchBot/.*:0$ 1;
}Jeśli przed serwerem jest CDN lub proxy, adres widziany przez [geo] należy do serwera pośredniego, więc przed porównaniem przywróć prawdziwe IP przez real_ip. Dokumentacja Anthropic zaznacza, że blokowanie po adresie IP uniemożliwia botowi także odczyt robots.txt, więc sygnał odmowy może nie dotrzeć poprawnie.
Nie wstawiliśmy tej konfiguracji na działający serwer; sprawdziliśmy tylko składnię na testowym pliku konfiguracyjnym.
nginx -t -p ./ -c nginx-test/nginx.confnginx: the configuration file ./nginx-test/nginx.conf syntax is ok
nginx: configuration file ./nginx-test/nginx.conf test is successfulPonieważ sprawdzono tylko składnię przykładu, nie weryfikowaliśmy odpowiedzi 403; w logach z 14 dni 2 347 z 3 937 żądań z nazwą OAI-SearchBot pochodziło od grupy podszywających się spoza opublikowanych zakresów.
6️⃣ Pobieranie opłat od robotów AI: Pay per crawl i Web Bot Auth
Pay per crawl to funkcja Cloudflare AI Crawl Control, która pozwala właścicielom stron ustalić cenę dla każdej strefy i pobierać opłatę za każde żądanie robota AI. Według oficjalnej dokumentacji sprawdzonej 18 października 2026 jest w prywatnej becie, a płatności obsługuje Cloudflare jako Merchant of Record.
Roboty, które wysyłają w nagłówku żądania chęć zapłaty, dostają odpowiedź 200, a pozostałe odpowiedź [402 Payment Required] z ceną. Jeśli ten sam robot jest blokowany przez WAF lub Bot Management, reguła blokady ma pierwszeństwo przed pobraniem opłaty.
Roboty, które chcą płacić, muszą udowodnić swoją tożsamość przez Web Bot Auth. W Web Bot Auth bot podpisuje żądania kluczem Ed25519 i publikuje klucz publiczny pod [/.well-known/http-message-signatures-directory], aby strona odbierająca mogła zweryfikować podpis.
Podpis przesyłany jest w trzech nagłówkach, [Signature-Agent], [Signature-Input] i [Signature], i identyfikuje bota podpisem kryptograficznym zamiast zakresów IP. Domyślny format logu dostępu serwera źródłowego nie zapisuje nagłówków żądań, więc nie sprawdzaliśmy, czy żądania robotów AI z 14 dni miały podpisy.
18 605 żądań robotów AI zweryfikowanych z opublikowanych zakresów IP w ciągu 14 dni odpowiadało 77% z 24 022 żądań, które Googlebot i bingbot wysłały w tym samym okresie z opublikowanych zakresów. O dodaniu tokenów treningowych do robots.txt decyduje się na podstawie liczb bez podszywających się, a dołączenie porównania z zakresami do tygodniowego zliczania logów pozwala śledzić trend.
🔢 FAQ & polecane treści




ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.