Step 1 — Log-file analysis: who’s crawling, what they get
Server or CDN access logs are the only ground truth for crawler behavior—analytics under-counts bots. Filter for AI user-agents and look at the status codes they receive.
Find AI bot hits and their status codes# Count requests + status codes for major AI crawlers
grep -Ei "GPTBot|OAI-SearchBot|ClaudeBot|PerplexityBot|CCBot" access.log \
| awk '{print $9}' | sort | uniq -c | sort -rn
Read the results:
- Lots of 200s for retrieval bots → access is healthy; focus later steps on rendering and extractability.
- 403 / 429 / 503 for retrieval bots → a hard block (robots or, more likely, CDN/WAF). Highest-priority fix.
- No hits at all → either the bots can’t discover you (sitemap/links) or something upstream is dropping them.
Verify authenticity before you trust a line—user-agents are trivially spoofed. Match source IPs against the operators’ published lists:
OpenAI’s bot IP JSON (gptbot.json / searchbot.json / chatgpt-user.json),
Google’s reverse-DNS verification, and Perplexity’s published ranges. (Anthropic publishes no IP ranges, so rely on robots.txt and traffic patterns for Claude bots.)
Sources & further reading