Jak v logech serveru zkontrolovat AI crawlery
Prohledejte pole user agent v přístupovém logu na tokeny jako GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot a PerplexityBot a pak se podívejte na stavové kódy, které dostaly. Samotný user agent nic nedokazuje, proto každou zdrojovou IP adresu porovnejte se seznamem IP, který poskytovatel zveřejňuje, nebo u Google a Applu pomocí reverzního a přímého DNS.
Robots.txt říká, o co crawlery žádáte. Přístupový log ukazuje, co se skutečně stalo: které AI crawlery přišly, jaké stránky si vyžádaly a jak jim server odpověděl. Je to nejpřímější důkaz, který máte, a stačí k němu soubory logů a terminál. Příklady níže používají kombinovaný formát logu (combined), který nginx a Apache používají ve výchozím nastavení.
Na této stránce
Jak vypadá návštěva AI crawleru v přístupovém logu?
V kombinovaném formátu obsahuje každý řádek IP adresu klienta, čas, řádek požadavku, stavový kód, velikost odpovědi, referrer a user agent. nginx ho definuje jako $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" a formát combined v Apache má stejná pole. Návštěva trénovacího crawleru OpenAI vypadá takto:
20.171.206.5 - - [12/Nov/2026:10:00:01 +0000] "GET /pricing HTTP/1.1" 200 5120 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"
Hledat byste měli tokeny, které poskytovatelé dokumentují: GPTBot, OAI-SearchBot a ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot a Claude-User (Anthropic); PerplexityBot a Perplexity-User (Perplexity); Googlebot, Applebot, meta-externalagent, meta-webindexer a CCBot. Google-Extended ani Applebot-Extended neuvidíte nikdy. Google uvádí, že Google-Extended nemá samostatný řetězec user agenta, a Apple uvádí, že Applebot-Extended neprochází; oba jsou jen tokeny pro robots.txt.
Jak spočítám návštěvy AI crawlerů?
Rozdělení každého řádku podle znaku dvojitých uvozovek umístí user agent do pole 6. Porovnávání jen tohoto pole zabrání falešným nálezům z adres URL, které náhodou obsahují název bota. Tento příkaz spočítá návštěvy podle crawleru v aktuálním logu i v rotovaných, komprimovaných:
zcat -f /var/log/nginx/access.log* \
| awk -F'"' '{print $6}' \
| grep -Eo 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|bingbot|Applebot|meta-externalagent|meta-webindexer|CCBot' \
| sort | uniq -c | sort -rn
Pro Apache upravte cestu, často je to /var/log/apache2/access.log* nebo /var/log/httpd/access_log*. zcat -f čte prosté i gzipované soubory. Pokud crawler, který čekáte, chybí, samo o sobě to není důkaz blokování: možná za období, které logy pokrývají, jednoduše nepřišel.
Co každý crawler skutečně dostal?
Návštěvy jsou méně důležité než odpovědi. Crawler, který dostane 403 na každý požadavek, přišel, ale nic nepřečetl. Tyto příkazy ukazují stavové kódy, nejčastěji požadované cesty a to, zda crawler stáhl robots.txt:
# Status codes returned to PerplexityBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /PerplexityBot/ {split($3, s, " "); print s[1]}' | sort | uniq -c
# Most requested paths for OAI-SearchBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /OAI-SearchBot/ {split($2, r, " "); print r[2]}' | sort | uniq -c | sort -rn | head -20
# Did ClaudeBot fetch robots.txt, and what did it get?
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /ClaudeBot/ && $2 ~ /robots\.txt/ {split($3, s, " "); print s[1]}' | sort | uniq -c
Většina odpovědí 200 je to, co chcete. Mnoho kódů 403 nebo 429 ukazuje na pravidlo firewallu nebo omezení frekvence. Odpovědi 5xx na robots.txt jsou vážné: podle RFC 9309 musí crawler, který dostane pro robots.txt chybu serveru, předpokládat, že je zakázán celý web.
Pokud je váš web za CDN, změní se dvě věci. Požadavky, které CDN zablokuje, se k vašemu původnímu serveru nikdy nedostanou, takže se v jeho logu vůbec neobjeví; podívejte se místo toho na bezpečnostní události v samotné CDN. A pokud neobnovíte IP adresu návštěvníka, původní server zapisuje adresu CDN. Cloudflare například posílá původní IP v hlavičce CF-Connecting-IP a ve výchozím stavu se zapisuje IP adresa Cloudflare.
Jak ověřím, že návštěva skutečně přišla od OpenAI, Anthropic nebo Perplexity?
Tito poskytovatelé zveřejňují rozsahy IP adres, které jejich agenti používají: OpenAI na openai.com/gptbot.json, openai.com/searchbot.json a openai.com/chatgpt-user.json; Anthropic na claude.com/crawling/bots.json; Perplexity na perplexity.ai/perplexitybot.json a perplexity.ai/perplexity-user.json. Anthropic uvádí, že zdrojová IP na jejím seznamu značí, že crawler přichází od Anthropic. Žádný z těchto tří poskytovatelů nedokumentuje ověřování reverzním DNS, proto použijte seznamy.
Soubory mají stejnou strukturu, seznam prefixes se záznamy ipv4Prefix nebo ipv6Prefix, takže jeden malý skript ověří IP adresu proti kterémukoli z nich:
python3 - 20.171.206.5 https://openai.com/gptbot.json <<'EOF'
import ipaddress, json, sys, urllib.request
ip = ipaddress.ip_address(sys.argv[1])
req = urllib.request.Request(sys.argv[2], headers={"User-Agent": "log-check"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print(ip, "listed" if any(ip in n for n in nets) else "NOT listed")
EOF
Chcete-li vypsat IP adresy, které se hlásily k danému crawleru, spusťte nad logem awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' a výstup pošlete přes sort | uniq -c | sort -rn. Každou adresu ověřte proti odpovídajícímu seznamu. Seznamy se mění, proto je stahujte čerstvé a neuchovávejte starou kopii.
Jak ověřím Googlebot, Applebot a CCBot?
Google, Apple i Common Crawl dokumentují kontrolu reverzním a přímým DNS. Zjistěte název hostitele IP adresy, zkontrolujte jeho doménu, pak vyhledejte tento název hostitele a ověřte, že odkazuje zpět na stejnou IP adresu:
host 66.249.66.1
# 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
host crawl-66-249-66-1.googlebot.com
# crawl-66-249-66-1.googlebot.com has address 66.249.66.1
U Google musí název hostitele končit na googlebot.com, google.com nebo googleusercontent.com, podle crawleru; Google také zveřejňuje své rozsahy, Googlebot je v common-crawlers.json. U Applu musí být v applebot.apple.com, rozsahy jsou v applebot.json. U Common Crawl musí být pod crawl.commoncrawl.org a Common Crawl upozorňuje, že jiné crawlery název CCBot falešně používají.
Jak vypadají falešné AI crawlery?
Scrapery si často půjčují user agent známého crawleru, aby prošly filtry. Typické znaky:
- User agent jmenuje crawler, ale IP adresa není na seznamu, který poskytovatel zveřejňuje, nebo jí neodpovídá reverzní DNS.
- Zdrojem je domácí síť nebo cloudový poskytovatel, kterého poskytovatel crawleru neuvádí.
- Klient nikdy nežádá robots.txt nebo žádá cesty, které robots.txt pro daného crawleru zakazuje.
- Frekvence nebo vzorec požadavků se výrazně liší od ověřeného provozu pod stejným jménem, například nárazy na vyhledávací nebo přihlašovací koncové body.
Existuje i opačný problém: crawler, který používá běžný user agent prohlížeče, nelze z řádku logu poznat vůbec. V roce 2025 Cloudflare uvedl, že pozoroval Perplexity při procházení s nedeklarovanými user agenty podobnými prohlížečům z IP adres mimo její zveřejněné rozsahy; Perplexity tento popis zpochybnila a část provozu přičetla službě třetí strany. Samotné logy takové případy nerozhodnou, a proto je ověřování podle zveřejněných rozsahů IP důležité v obou směrech.
Co logy říct nemohou?
Logy ukazují, co dorazilo na váš server. Neukazují, co CDN zablokovala před původním serverem, zda stránka s odpovědí 200 obsahovala text, nebo jen skriptovou schránku, ani zda by crawler byl povolen, kdyby přišel dnes. Pokrývají také jen období, které uchováváte, a na klidných webech se AI crawlery mohou objevovat zřídka.
V účtu AISeeWhy můžete nahrát přístupový log v kombinovaném formátu (prostý nebo .gz, do 50 MB); je zanalyzován a smazán a požadavky každého AI crawleru se spočítají se stavovými kódy a porovnají s rozsahy IP, které poskytovatelé zveřejňují.
Časté dotazy
Proč v logech nevidím Google-Extended?
Google uvádí, že Google-Extended nemá samostatný řetězec user agenta. Procházení provádějí stávající crawlery Google a token řídí jen to, jak se obsah smí použít. Totéž platí pro Applebot-Extended, který podle Applu neprochází.
Mohu user agentu v logech věřit?
Ne. Kdokoli může poslat jakýkoli user agent. Berte ho jako tvrzení a potvrďte ho podle rozsahů IP, které poskytovatel zveřejňuje, nebo u Google, Applu a Common Crawl pomocí reverzního a přímého DNS.
V logech nevidím žádné návštěvy AI crawlerů. Jsem zablokován?
Nemusí to tak být. Crawler možná ještě nepřišel, vaše CDN ho mohla zablokovat před původním serverem, nebo vaše logy zapisují jen IP adresy CDN. Zkontrolujte bezpečnostní události CDN a otestujte stránku s user agentem každého crawleru.
Je provoz ChatGPT-User crawler?
OpenAI uvádí, že ChatGPT-User se používá pro určité akce uživatele a nepoužívá se k automatickému procházení webu. Jeho návštěvy obvykle následují poté, co se člověk ChatGPT zeptá na stránku, takže přicházejí v malém počtu.
Zdroje
- nginx: ngx_http_log_module (kombinovaný formát logu)
- Apache HTTP Server 2.4: soubory logů
- OpenAI: přehled crawlerů OpenAI
- Anthropic: Stahuje Anthropic data z webu a jak mohou majitelé webů crawler zablokovat?
- Perplexity: crawlery Perplexity
- Google: ověřování crawlerů a nástrojů Google
- Google: běžné crawlery včetně Google-Extended
- Apple: o Applebotu
- Common Crawl: CCBot
- RFC 9309: Robots Exclusion Protocol
- Cloudflare: obnovení původních IP adres návštěvníků
- Cloudflare: Perplexity používá skryté, nedeklarované crawlery k obcházení zákazů procházení na webech
- Perplexity: agenti, nebo boty? Jak rozumět AI na otevřeném webu