AI Bot Log Analyser: GPTBot and ClaudeBot Activity
This example shows the aiwebpageseo AI Bot Log Analyser processing 28 days of access logs. GPTBot made 847 visits — mostly crawling blog content. ClaudeBot made zero visits — the WAF is silently blocking it with 403 responses that do not appear in the app logs. PerplexityBot crawled 312 pages focusing on product features.
| Bot | Engine | Requests | 200 OK | 403 Blocked | Status |
|---|---|---|---|---|---|
| GPTBot/1.2 | ChatGPT | 847 | 847 | 0 | ✅ Active |
| Googlebot/2.1 | 1,240 | 1,238 | 2 | ✅ Active | |
| PerplexityBot/1.0 | Perplexity | 312 | 312 | 0 | ✅ Active |
| bingbot/2.0 | Copilot | 247 | 247 | 0 | ✅ Active |
| ClaudeBot/1.0 | Claude | 0 | — | Blocked at WAF | ❌ WAF blocked |
| Google-Extended | Gemini | 43 | 43 | 0 | ✅ Active |
| URL | Visits | Avg Response | Last Visit |
|---|---|---|---|
| /blog/what-is-aeo | 124 | 187ms | 2026-03-20 |
| /features | 98 | 203ms | 2026-03-21 |
| /blog/seo-guide-2026 | 87 | 212ms | 2026-03-19 |
| / | 76 | 156ms | 2026-03-21 |
| /blog/schema-markup-guide | 34 | 198ms | 2026-03-18 |
| /pricing | 28 | 167ms | 2026-03-17 |
Every other AI-visibility signal is inferred. A bot log is observed. When 2.4 million lines of access log say that GPTBot made 847 requests and received 847 responses with status 200, that is not a model, an estimate or a probability — it is a record of what happened, written by your own server at the moment it happened.
This matters because the alternative sources of truth are all partial. Search Console reports on Googlebot and only Googlebot; it has no opinion about Anthropic, OpenAI or Perplexity and never will. Third-party visibility tools query assistants and count mentions, which measures output rather than access, and cannot distinguish "we were never crawled" from "we were crawled and not chosen". A robots.txt checker confirms what you permitted, not what your infrastructure actually did — and, as this report shows, those are frequently different things.
The gap between permission and reality is the entire value of log analysis. Your robots.txt allows ClaudeBot. Your logs contain zero ClaudeBot requests. Both statements are true, and only one of them describes what is happening to your site.
A 403 is a bad answer. Zero log lines is no answer at all, and it is harder to diagnose precisely because there is nothing to find. If ClaudeBot were being refused by the web server, the refusal would be logged: a line with the user-agent, the URL and the status 403. The absence of any line means the request never reached the web server. Something upstream terminated it.
The usual culprits, in the order worth checking:
Managed bot protection with a user-agent match
Cloudflare firewall rules, AWS WAF, Akamai bot manager. A rule matching the substring anthropic, claude or a generic bot pattern will challenge or drop the request at the edge. The edge has its own logs; the origin never sees the request. Look in the CDN's own event log, not in access.log — this is the single most common cause and the one people search hardest for in the wrong file.
Aggressive throttling of unfamiliar clients
A rate limiter that returns 429 after a handful of requests will produce a crawler that visits once, is throttled, and does not return for a long time. This looks like near-silence rather than total silence, so check for a small number of 429s rather than assuming zero means blocked.
Country or ASN-level blocking
Blocking a cloud provider's IP ranges to stop scraping will also block legitimate crawlers hosted in the same ranges. This is common on sites that had a scraping incident and responded with a broad ASN ban that nobody has revisited since.
The requests are happening and you are not recording them
Worth eliminating before you go rule-hunting. Confirm the log format includes the user-agent field, and that you are reading the log for the correct vhost and the correct time window. A surprising number of "blocked bot" investigations end here.
Verify the fix the same way you found the problem: request a page with the crawler's user-agent from outside your network, confirm a 200, and then confirm the request appears in the log. A rule change that you have not observed in the log has not been proven to work.
The word "AI bot" hides a distinction that determines whether a robots.txt line costs you traffic or costs you nothing. Training crawlers build model corpora. Search agents fetch pages so an assistant can cite them, with a link, to a user who is reading right now. These are different agents with different names, run for different purposes.
| Agent | Operator | Purpose | Blocking it costs you |
|---|---|---|---|
| GPTBot | OpenAI | Model training | Nothing in ChatGPT's cited answers |
| OAI-SearchBot | OpenAI | Search and citation | Eligibility to be cited in ChatGPT |
| ChatGPT-User | OpenAI | User-initiated fetch | The ability for a user to point ChatGPT at your page |
| ClaudeBot | Anthropic | Web crawling for Claude | Reachability by Anthropic — currently blocked here |
| PerplexityBot | Perplexity | Indexing for cited answers | Eligibility to appear as a Perplexity source |
| Google-Extended | Gemini training control | Nothing in Google Search or AI Overviews | |
| Googlebot | Search index (and AI Overviews) | Google Search itself — never block this |
Two corrections follow directly from that table. Blocking GPTBot does not remove you from ChatGPT; it removes you from a training set. And disallowing Google-Extended has no effect on Google Search or on AI Overviews, which are served through ordinary Googlebot access — so a site can decline Gemini training without touching its Search visibility at all.
The headline is 1,406 AI bot requests across 28 days. The useful information is where those requests went. GPTBot spent 124 of its 847 fetches on a single blog post and 28 on the pricing page. That distribution is a statement about what your site looks like from the outside: the crawler follows links and sitemaps, and it lands most often where your internal linking sends it.
Three readings are worth doing on any crawl distribution. First, are the heavily crawled pages your best pages? If the corpus being ingested from your site is dominated by thin or stale posts, that is a content problem that no bot-configuration change will fix. Second, are your commercially important pages present at all? A features page fetched 98 times and a pricing page fetched 28 times suggests both are reachable, which is the minimum bar. Third, is anything conspicuously missing — a section of the site the crawler never touches usually turns out to be orphaned, paginated behind a JavaScript control, or excluded by a robots.txt rule nobody remembers writing.
Response time deserves a line of its own. The average here is between 156ms and 212ms, which is comfortable. When a crawler consistently waits several hundred milliseconds or more, it fetches fewer pages in the time it allocates to your host. Slow responses do not get you blocked; they get you sampled thinly, which produces the same practical result — less of your site is read.
A user-agent string is a claim, not an identity. Anybody can send a request announcing itself as GPTBot, and scrapers routinely do exactly that to inherit whatever allowances a site grants to well-behaved crawlers. Before you use log data to make a decision — and certainly before you widen a firewall rule — confirm that the requests came from the operator they claim to come from.
Two mechanisms are available. The major operators publish IP ranges for their crawlers, and matching the source address of a request against the published list is the simplest check. Google additionally supports reverse DNS verification: a reverse lookup on the requesting IP should resolve to a Google-owned hostname, and a forward lookup on that hostname should resolve back to the same IP. A user-agent claiming to be Googlebot from an address that fails that round trip is not Googlebot.
This is also the correct answer to the question that follows every log report: "should I block the traffic I do not recognise?" Not on the basis of the user-agent alone, and not with a rule broad enough to catch legitimate crawlers as collateral. The ClaudeBot silence in this report is exactly what that kind of rule produces.
Find and remove the rule dropping ClaudeBot
Start in the CDN or WAF event log, not the origin access log. Verify the fix by requesting a page as ClaudeBot from outside your network and confirming both a 200 response and a matching line in access.log.
Decide training access and search access separately
GPTBot and Google-Extended are training controls. OAI-SearchBot, PerplexityBot and Googlebot are the paths that can produce a citation or a click. Write your robots.txt to reflect that distinction deliberately rather than inheriting it from a template.
Audit what the crawlers are actually eating
The pages fetched most often are the pages that represent you. If they are your weakest content, fix the content — the crawl distribution is a symptom, and no robots directive will improve what it finds.
Re-run the analysis after every infrastructure change
Bot access breaks silently and it breaks at deployment time — a new WAF ruleset, a CDN migration, a bot-management upgrade. Nothing in your application will report it. Only the log will.
How do I get my server logs for analysis?
Download your access logs from your server (typically /var/log/nginx/access.log or /var/log/apache2/access.log), your hosting control panel (cPanel, Plesk) or your CDN provider (Cloudflare, Fastly). You can upload multiple log files. The analyser accepts combined log format (CLF) and common log format from Apache, Nginx, Cloudflare, AWS CloudFront and most CDNs.
What AI bots does the log analyser detect?
The analyser detects: GPTBot/1.2 (OpenAI/ChatGPT), PerplexityBot/1.0 (Perplexity AI), ClaudeBot/1.0 and anthropic-ai (Anthropic/Claude), Bingbot/2.0 (Microsoft Copilot), Googlebot/2.1 and Google-Extended (Google AI Overviews), CCBot (Common Crawl), Applebot, and dozens of other named crawlers. It flags any bot receiving 403/429 responses as potentially blocked.
Why does ClaudeBot show zero visits even though my robots.txt allows it?
ClaudeBot may be blocked at the firewall or WAF layer — before the request ever reaches your web server logs. WAF rules that match user-agent strings containing "bot" or "anthropic" can silently drop connections without logging them. Check your Cloudflare firewall rules, AWS WAF rules or server-level ModSecurity configuration for rules that may be blocking ClaudeBot.
Does a high GPTBot crawl volume mean ChatGPT is citing my page?
No, and this is the most consequential misreading of a bot log. GPTBot fetches content for OpenAI model training. The search-and-cite path that produces linked sources in a ChatGPT answer is served by a different agent, OAI-SearchBot, and there is also ChatGPT-User for user-initiated fetches. A page can be crawled hundreds of times by GPTBot and never appear as a citation, and it can be cited without GPTBot ever having visited. What 847 GPTBot requests actually tell you is that the page is reachable, returns 200, and is being ingested. That is a precondition, not an outcome.
If I block GPTBot, do I disappear from ChatGPT?
No. Blocking GPTBot excludes your content from OpenAI's training corpus. It does not remove you from ChatGPT's answers, because the retrieval-and-citation path uses separate agents. This is why a blanket robots.txt block of everything with the word bot in it is a bad idea: it is entirely reasonable to disallow training crawlers on licensing grounds while allowing the search agents that can send you traffic. Decide those two things separately, because they are two different decisions with two different consequences.
Why do bot logs matter when I already have Search Console crawl stats?
Search Console reports on Googlebot and nothing else. It has no visibility into GPTBot, ClaudeBot, PerplexityBot or any other operator's crawler, and it will never tell you that your WAF is returning 403 to one of them. Raw access logs are the only place where every automated client that reached your origin is recorded, with its user-agent, the status code it received, the URL it asked for and how long you took to answer. For anything outside Google, the log file is the primary source and there is no substitute for it.
What should I actually change after reading a bot log report?
Three things, in order. First, fix any named crawler receiving 403 or 429 where you did not intend to block it — that is an access defect and it is binary. Second, look at what the crawlers that do reach you are spending their requests on: if the bulk of GPTBot's 847 fetches land on thin or outdated pages, the corpus being built from your site is being built from your weakest material, and the fix is content, not configuration. Third, check response times, because a crawler that consistently waits 800ms for a page will fetch fewer of them. Everything else in a log report is context, not action.
Related Content Tool Demos
Run AI Bot Log Analyser on Your Own Site
Get your real report with live data, specific issues and actionable improvements.