AI roboty najdete v přístupovém logu podle user-agentu, tedy jména, kterým se program hlásí. Samotné jméno ale nic nedokazuje. Použitelný výsledek vznikne až tehdy, když vedle něj máte původní IP adresu, požadovanou URL a stavový kód serveru.
Tento návod počítá s textovým logem podobným výchozímu formátu combined v Nginxu nebo Apache. Pokud máte vlastní formát, význam sloupců si nejdřív ověřte v konfiguraci. Přehled na CDN zachytí také požadavky, které její mezipaměť nepředala původnímu serveru. Než však provoz označíte za ověřený, zjistěte, zda váš tarif rozpoznává roboty jen podle user-agentu, nebo také podle ověřené identity.
Nejdřív si vezměte správný log — bez user-agentu nic nenajdete
Přístupový log, anglicky access log, zaznamenává požadavky, které webový server zpracoval. Chybový log je jiný soubor: hodí se při poruše aplikace, ale pro soupis robotů není výchozím podkladem.
Jeden řádek v běžném rozšířeném formátu obsahuje přibližně toto:
203.0.113.10 - - [22/Oct/2026:10:00:00 +0200] "GET /blog/clanek/ HTTP/1.1" 200 12000 "-" "... OAI-SearchBot/1.4 ..."
Potřebujete z něj pět údajů: čas, zdrojovou IP, požadovanou adresu, stavový kód a celý user-agent. Velikost odpovědi a doba zpracování se hodí při hledání náročných požadavků; skutečné náklady z nich ale bez dalších údajů nespočítáte. Ve výchozím logu navíc nemusí být obojí.
-
Získejte celé období
Pro první přehled stáhněte například 30 dní přístupových logů, včetně starších souborů vytvořených rotací logu a komprimovaných archivů. U málo navštěvovaného webu období prodlužte. Pro srovnání používejte stejně dlouhá a úplná období.
-
Ověřte formát
Na jednom řádku najděte IP, požadavek, stav a celý user-agent. Pokud něco chybí, požádejte správce o vhodnější export.
-
Spojte soubory do pracovní kopie
Komprimované části nejdřív rozbalte a spojte chronologicky do jednoho souboru, například access-30d.log. Původní logy neměňte.
-
Pracujte s kopií
Log může obsahovat IP adresy, parametry URL i text vložený do požadavku návštěvníkem nebo cizím programem. Nevkládejte celý soubor do veřejného nástroje a jeho obsah nespouštějte jako příkaz.
Hledejte jména robotů — ale nesčítejte různé účely
OpenAI, Anthropic a Perplexity používají různá jména pro automatické vyhledávání, procházení kvůli možnému použití při vývoji modelů a načtení stránky na pokyn člověka. V jednom součtu by se smíchaly tři odlišné situace.
| Provozovatel | Vyhledávání | Možné použití při vývoji modelů | Požadavek vyvolaný uživatelem |
|---|---|---|---|
| OpenAI | OAI-SearchBot | GPTBot | ChatGPT-User |
| Anthropic | Claude-SearchBot | ClaudeBot | Claude-User |
| Perplexity | PerplexityBot | — | Perplexity-User |
Jména vyjadřují deklarovaný hlavní účel a samostatné řízení v robots.txt, ne jistotu následného použití každého stažení. OpenAI může při povolení OAI-SearchBotu i GPTBotu použít výsledek jednoho procházení pro oba účely. OAI-AdsBot, který kontroluje vstupní stránky reklam, do tohoto návodu nezařazujeme.
První pracovní výpis vytvoříte jednoduchým filtrem. Doplňte další jména jen tehdy, když víte, co označují:
awk -F'"' '
tolower($6) ~ /oai-searchbot|gptbot|chatgpt-user|claudebot|claude-searchbot|claude-user|perplexitybot|perplexity-user/ { print }
' access-30d.log > ai-roboti.log
Šesté pole oddělené uvozovkami je user-agent pouze v popsaném formátu podobném combined. U vlastního formátu upravte parser podle konfigurace. Příkaz tak nehledá jméno robota v URL ani v odkazující stránce a nevydává náhodnou shodu za návštěvu robota.
Prázdný výsledek neznamená, že žádný systém AI nezískává nebo nepoužívá obsah vašeho webu. Může znamenat, že robot v daném období nepřišel, že log nemá user-agent, že požadavek zastavila CDN, nebo že platforma mohla obsah získat jiným způsobem.
Na výpis se podívejte čtyřmi způsoby — podle robota, URL, stavu a IP
Samotný počet požadavků neřekne, jestli robot stahuje důležité články, prochází stále nové kombinace filtrů, nebo opakovaně žádá chybové adresy. Začněte čtyřmi pohledy.
1. Kolik požadavků připadá na jednotlivá jména
Následující příkaz počítá každý řádek jednou a sjednotí různé verze stejného user-agentu:
awk -F'"' '
{
u=tolower($6); b=""
if (u ~ /oai-searchbot/) b="OAI-SearchBot"
else if (u ~ /chatgpt-user/) b="ChatGPT-User"
else if (u ~ /gptbot/) b="GPTBot"
else if (u ~ /claude-searchbot/) b="Claude-SearchBot"
else if (u ~ /claude-user/) b="Claude-User"
else if (u ~ /claudebot/) b="ClaudeBot"
else if (u ~ /perplexity-user/) b="Perplexity-User"
else if (u ~ /perplexitybot/) b="PerplexityBot"
if (b != "") n[b]++
}
END { for (b in n) print n[b], b }
' ai-roboti.log | sort -nr
2. Které adresy robot žádá nejčastěji
awk -F'"' '{ split($2, r, " "); print r[2] }' ai-roboti.log \
| sort | uniq -c | sort -nr | head -20
Všímejte si hlavně interního hledání, kalendářů, filtrování a opakujících se parametrů. Takových adres mohou vzniknout tisíce, přestože zobrazují stejný nebo téměř stejný obsah. Požadavky na články a produktové stránky, které považujete za důležité, naopak ukazují, že robot tyto části webu navštěvuje.
3. Jaké odpovědi server vrací
awk -F'"' '{
x=$3
sub(/^[[:space:]]+/, "", x)
split(x, s, " ")
print s[1]
}' ai-roboti.log | sort | uniq -c | sort -nr
Převažující 200 znamená úspěšnou odpověď, ne zařazení do výsledků ani citaci. Větší podíl 404 ukazuje na požadavky na adresy, které server nenašel. Prověřte staré odkazy, překlepy, změny směrování i vymyšlené URL. 429 a 503 znamenají omezení či nedostupnost; jejich význam posuzujte spolu s časem a zatížením serveru.
4. Z kolika IP provoz přichází
awk '{print $1}' ai-roboti.log | sort | uniq -c | sort -nr | head -20
Jedna adresa s velkou částí požadavků stojí za ověření. Více adres samo o sobě problém není: provozovatelé mohou požadavky obsluhovat z více sítí a datových center.
Ověřte identitu robota — user-agent je jen jmenovka
Kdokoli může do požadavku napsat GPTBot. Jméno proto použijte k výběru správného oficiálního seznamu IP, nikoli jako konečný důkaz.
OpenAI zveřejňuje samostatné soubory pro OAI-SearchBot, GPTBot a ChatGPT-User. Anthropic odkazuje na společný seznam svých robotů a Perplexity na samostatné seznamy v dokumentaci svých robotů.
Pro rychlou kontrolu jedné adresy lze použít Python. Nahraďte ukázkovou IP a adresu souboru podle jména z logu:
python3 - 203.0.113.10 https://openai.com/searchbot.json <<'PY'
import ipaddress
import json
import sys
import urllib.request
ip = ipaddress.ip_address(sys.argv[1])
with urllib.request.urlopen(sys.argv[2], timeout=10) as response:
data = json.load(response)
networks = []
for item in data["prefixes"]:
cidr = item.get("ipv4Prefix") or item.get("ipv6Prefix")
if cidr:
networks.append(ipaddress.ip_network(cidr))
print("ANO" if any(ip in network for network in networks) else "NE")
PY
Výsledek ANO potvrzuje, že adresa patří do právě zveřejněného rozsahu provozovatele. Neověřuje konkrétního uživatele. U starého logu navíc může NE znamenat, že se seznam od návštěvy změnil. Označte jej proto jako „dnes neověřeno“, ne automaticky jako podvrh. Chcete-li získat počet ověřených požadavků, proveďte tuto kontrolu pro každou jedinečnou dvojici jména a IP a další přehledy počítejte jen z vyhovujících řádků. U Googlu je k dispozici také dvoukrokové ověření přes reverzní a dopředný DNS.
Rozdíl mezi ověřením a blokováním podrobněji vysvětluje návod jak ověřit AI robota.
Čísla čtěte v kontextu — log ukazuje požadavky, ne přínos
Z logu zjistíte, kdo si co vyžádal a jak server odpověděl. Nezjistíte z něj, zda stránku platforma zařadila do vyhledávání, použila v odpovědi nebo poslala návštěvníka.
Poměr procházení k návštěvám proto skládejte ze dvou zdrojů:
- čitatel: požadavky automatického robota, jejichž IP jste ověřili proti správnému seznamu pro dané jméno,
- jmenovatel: návštěvy lidí z téže platformy v analytice za stejné období.
Nesčítejte do čitatele automatický OAI-SearchBot a uživatelský ChatGPT-User. Stejně oddělte PerplexityBot od Perplexity-User. Do přehledu výsledků uveďte období, přesná označení robotů a způsob ověření; bez toho se číslo nedá později zopakovat.
Vyhněte se rychlým závěrům — čtyři chyby zkreslí výsledek
Počítat jen jméno v user-agentu
Podvržený robot se do součtu dostane stejně jako pravý. U rozhodnutí o blokaci nebo kapacitě ověřujte také IP.
Analyzovat jen aktuální access.log
Otočené soubory mohou obsahovat většinu období. Bez nich porovnáváte různě dlouhé výřezy.
Brát 200 jako důkaz citace
Stav říká pouze to, že server požadavek úspěšně obsloužil. O dalším použití obsahu nic nedokazuje.
Míchat vyhledávání, trénink a uživatele
Tři účely mají jinou hodnotu i pravidla. Jediný součet označený jako „provoz AI“ zakryje rozdíly, podle kterých se potřebujete rozhodovat.
První výstup má být jednoduchá tabulka: robot, požadavky nalezené podle user-agentu, počet dnes ověřených požadavků, nejčastější URL, podíl chyb a období. U každého čísla uveďte způsob ověření. Teprve z ní rozhodujte, jestli upravit odkazy, robots.txt, cache nebo kapacitu. Bez tohoto mezikroku byste řešili jméno robota, ale ne jeho skutečné chování na vašem webu.
AI SEO Wireframe Pack obsahuje šablony pro sedm typů stránek, textové vzory a návod na nasazení. Stojí 1 490 Kč včetně DPH. Pokud chcete místo obecného postupu rozbor techniky, obsahu a viditelnosti konkrétního webu, navazuje na něj Audit AI viditelnosti.
Zdroje: OpenAI — přehled robotů, Anthropic — roboti a jejich účely, Perplexity — dokumentace robotů, Google — běžní roboti a ověřování požadavků, Nginx — access log, Apache — log files, Cloudflare — původní IP a kvalita rozpoznání AI robotů. Ověřeno 22. 10. 2026.