AI bot verification is the missing half of every crawler-control guide. Most advice stops at “add the user-agent to robots.txt” — which quietly assumes two things that are frequently false: that the request really comes from the vendor named in the User-Agent header, and that the bot will honor the file at all. Anyone can send a request labeled GPTBot. And several fetchers are documented by their own operators as bypassing robots.txt by design.
This post is the operational layer that sits above our bot-by-bot decision matrix. That post answers the policy question — which crawlers to block and which to allow, bot by bot — and we defer every block/allow verdict to it. This one answers the engineering questions the matrix leaves open: how to write robots.txt rules that do what you intend, how to verify a crawler’s identity with reverse DNS and vendor-published IP-range files, how to enforce policy at the CDN edge when the polite layer fails, and how to think about agentic, user-triggered traffic that robots.txt cannot touch.
Everything below is sourced from the vendors’ own crawler documentation — OpenAI, Google, Anthropic, Perplexity, Meta, Apple, Amazon, and Common Crawl — plus Cloudflare’s published network research. Where a claim only exists in third-party reporting, we say so explicitly.
- 01User-Agent strings prove nothing.Any client can claim to be GPTBot or ClaudeBot in a header. Most major AI vendors now publish IP-range JSON files, reverse-DNS suffixes, or both, precisely because spoofing is trivial. Verification, not the string, is the identity check.
- 02Automated vs user-triggered is the load-bearing split.OpenAI's ChatGPT-User, Perplexity's Perplexity-User, and Meta's external fetcher are all documented by their own vendors as not reliably honoring robots.txt, because they fire on live user actions. For those, edge rules are the only real lever.
- 03robots.txt changes are not instant.Meta documents up to 24 hours of propagation lag from caching, and Amazonbot reportedly falls back to a cached robots.txt for up to 30 days if the live fetch fails. Confirm a block in your logs — never assume it from the file edit.
- 04The edge is where enforcement actually happens.Cloudflare reported 1M+ customers activating AI-bot blocking and a 71.45% decline in Bytespider traffic on its network since one-click blocking launched. It has also announced new Search/Agent/Training crawler defaults effective September 15, 2026.
- 05Blocking agentic traffic can mean blocking a human.A user-triggered fetch is a person reading your page through an assistant. The decision is block versus court, not block versus allow — and options like pay-per-crawl now sit between the two extremes.
01 — The Enforcement GapTwo failure modes robots.txt cannot see.
robots.txt is a voluntary protocol. It works remarkably well for the crawlers that opt into it — OpenAI, Anthropic, Google, Perplexity, Apple, Amazon, and Common Crawl all state that their automated crawlers honor it. But the file has two structural blind spots, and both are getting worse as agentic traffic grows.
Failure mode one: identity. robots.txt matches on the User-Agent string, and the User-Agent string is an unverified, client-controlled header. A scraper that wants your content can label itself GPTBot and inherit whatever allowance your file grants OpenAI. Nothing in the protocol checks that the request originates from OpenAI’s infrastructure. That is why most major vendors now publish machine-readable IP-range files and, in several cases, reverse-DNS verification patterns — the subject of section 04.
Failure mode two: compliance. Even a genuine, correctly identified bot may be designed not to read the file. OpenAI’s own documentation says of ChatGPT-User that “robots.txt rules may not apply,” and Perplexity’s documentation says Perplexity-User “generally ignores robots.txt rules.” These are not rogue crawlers hiding their behavior — the vendors document the bypass, because the requests are triggered by live user actions rather than bulk crawling. The polite layer was never built for that traffic class.
02 — The Token TaxonomyAutomated, user-triggered, or a token — know which you are addressing.
Every AI-related user-agent falls into one of three classes, and the class — not the vendor — determines which control layer can reach it. Misclassifying a token is how sites end up with robots.txt rules that look complete and enforce nothing.
The pattern recurs across unrelated vendors, which is what makes it a structural rule rather than a quirk. OpenAI separates GPTBot and OAI-SearchBot (automated, robots.txt-compliant) from ChatGPT-User (user-triggered, “robots.txt rules may not apply”). Perplexity separates PerplexityBot — which its docs scope to search, stating “It is not used to crawl content for AI foundation models.” — from Perplexity-User, which “generally ignores robots.txt rules.” Meta documents meta-externalfetcher/1.1 as a fetcher that may bypass robots.txt for user-requested fetches, alongside its compliant crawl and indexing agents. Three vendors, independently, drawing the same line.
Anthropic is the notable outlier — in the strict direction. Its support documentation states that all three of its tokens, including the user-triggered Claude-User, respect robots.txt, along with the non-standard Crawl-delay directive. Treat that as a vendor-stated policy worth verifying in your own logs, not as a property of user-triggered fetchers in general.
Automated crawlers
Bulk crawlers that visit on their own schedule. Vendor-documented as honoring robots.txt. This is the class the file was designed for — a Disallow line genuinely works, subject to propagation lag.
User-triggered fetchers
Fire when a person asks an assistant about your page. Documented by their own vendors as not reliably honoring robots.txt. Only network-level rules — CDN, WAF, IP — can act on them.
Control tokens
Not crawlers at all. Google-Extended has no distinct HTTP user-agent — it is a robots.txt-only token governing Gemini training use. Applebot-Extended does not crawl; it flags how Applebot's data may be used.
Class 3 deserves a beat of attention because it inverts the usual debugging instinct. If you block Google-Extended and then grep your access logs for it, you will find nothing — Google states it is a control token layered on existing crawl infrastructure, governing use of content for training future generations of Gemini models, and that disallowing it neither affects a site’s inclusion in Google Search nor acts as a ranking signal. Apple’s documentation is equally explicit: “Applebot-Extended does not crawl webpages.” Disallowing it opts your content out of Apple’s foundation-model training while regular Applebot continues to index for Siri and Spotlight. Absence from logs is these tokens working as designed.
03 — Syntax Disciplinerobots.txt rules that do what you intend.
The syntax layer fails quietly, so hold it to a few disciplines. First, spell tokens exactly as the vendor documents them — CCBot matches Common Crawl’s published CCBot/2.0 (https://commoncrawl.org/faq/) user-agent, and Meta’s agents carry explicit versions like meta-externalagent/1.1. Second, give every bot its own User-agent block rather than relying on how a given parser resolves overlapping groups. Third, keep deprecated tokens out of the file — dead rules are noise that makes audits harder. For the base protocol — precedence, wildcards, and how Disallow interacts with Allow — see our robots.txt and meta robots reference.
The under-appreciated discipline is patience with propagation. A robots.txt edit is not a switch. Meta documents that changes can take up to 24 hours to take effect on its crawlers due to caching. Amazonbot, per Amazon’s crawler documentation as surfaced in secondary coverage, reportedly falls back to a cached copy of robots.txt from the last 30 days when the live fetch fails — meaning a stale rule can keep governing Amazonbot for up to a month. The operational rule: date-stamp your robots.txt changes, then verify the behavior change in your access logs rather than assuming it from the edit.
Two boundary notes to keep the file honest. OpenAI documents robots.txt compliance for GPTBot and OAI-SearchBot, but its docs do not state one way or the other whether OAI-AdsBot — the token that validates pages submitted for ChatGPT ads — honors robots.txt. Treat that compliance as unstated, not assumed. And llms.txt is not part of this control surface at all: the spec, updated to v2 on August 10, 2026, defines a markdown navigation guide for inference time, not an access-control mechanism. See llms.txt adoption in practice for who actually reads the file, and Google’s own stance on llms.txt and rankings before expecting any search-side effect from it.
Documented cache delay
Meta's developer documentation states robots.txt changes can take up to 24 hours to take effect on its crawlers due to caching. Plan blocks a day ahead of any deadline they need to meet.
Reported fallback
Amazonbot reportedly uses a cached robots.txt from the last 30 days if the live fetch fails, per Amazon's crawler documentation as relayed in secondary coverage. Keep the file reachable, or old rules linger.
Updated August 10, 2026
Jeremy Howard's llms.txt spec received a v2 update on August 10, 2026. It remains a navigation aid for inference time — an H1, optional summary, and markdown link lists. It grants and revokes nothing.
04 — Identity VerificationTrust the IP, never the header.
The verification pattern is consistent across most vendors we checked: most publish a JSON file of source IP ranges, a reverse-DNS hostname suffix, or both — specifically because User-Agent strings alone are trivially spoofable — though Meta, Apple and Amazon publish only a documentation page. Google’s pattern is the canonical example: a legitimate Googlebot request resolves via reverse DNS to a hostname matching crawl-***-***-***-***.googlebot.com, cross-checked against Google’s published IP ranges. Common Crawl’s legitimate traffic resolves to hostnames containing .crawl.commoncrawl.org (IPv4 only per its current docs), with the full list at index.commoncrawl.org/ccbot.json.
The workflow is the same regardless of vendor. Pull the candidate IPs from your access logs — our guide to log-file analysis covers extracting them at scale. Run a reverse-DNS lookup where the vendor publishes a suffix, then a forward-DNS lookup on the returned hostname to confirm it resolves back to the same IP. Where the vendor publishes an IP-range JSON, check membership directly. Requests that carry the right User-Agent but fail both checks are impostors — and they are exactly the traffic your edge rules should drop without ceremony.
"If a crawler has a source IP address on this list, it indicates the crawler is coming from Anthropic."— Anthropic, Claude crawler support documentation
The table below is the verification matrix: every token each vendor runs, split by class, with its documented robots.txt posture and the vendor-published verification surface. It is organized by how to verify, not by whether to block — that axis lives in the decision matrix.
| Operator | Automated / token UAs | User-triggered UA | robots.txt posture (vendor-stated) | Identity verification |
|---|---|---|---|---|
| OpenAI | GPTBot · OAI-SearchBot · OAI-AdsBot | ChatGPT-User | GPTBot and OAI-SearchBot honor it; ChatGPT-User “robots.txt rules may not apply”; OAI-AdsBot compliance unstated | openai.com/gptbot.json · searchbot.json · chatgpt-user.json · adsbot.json |
| Anthropic | ClaudeBot · Claude-SearchBot | Claude-User | All three stated to respect robots.txt, including Crawl-delay — the strictest stated posture of the set | claude.com/crawling/bots.json |
| Perplexity | PerplexityBot | Perplexity-User | PerplexityBot honors it; Perplexity-User “generally ignores robots.txt rules” | perplexity.ai/perplexitybot.json · perplexity-user.json |
| Googlebot · Google-CloudVertexBot · Google-Extended (token only) | — | Honored; Google-Extended is a robots.txt-only control token with no distinct HTTP user-agent | Reverse DNS to crawl-*.googlebot.com + published IP ranges (common-crawlers.json for Vertex) | |
| Meta | meta-externalagent/1.1 · meta-webindexer/1.1 · meta-externalads/1.1 | meta-externalfetcher/1.1 | Crawl agents honor it with up to 24h cache lag; the fetcher may bypass robots.txt for user-requested fetches | Meta developer docs (developers.facebook.com web-crawlers page) |
| Apple | Applebot · Applebot-Extended (token) | — | Honored; Applebot-Extended does not crawl — it only governs how Applebot-crawled data may be used | Apple support documentation (About Applebot) |
| Amazon | Amazonbot · Amzn-SearchBot | — | Respects the Robots Exclusion Protocol; reportedly uses a cached robots.txt for up to 30 days if the live fetch fails | developer.amazon.com/amazonbot |
| Common Crawl | CCBot/2.0 | — | Honored (non-profit open corpus) | Reverse DNS to *.crawl.commoncrawl.org (IPv4) + index.commoncrawl.org/ccbot.json |
One vendor is conspicuously absent from the verification column: ByteDance. We could locate no official documentation page, IP-range file, or robots.txt policy for Bytespider — everything written about its behavior, including the widely repeated claim that it ignores robots.txt, comes from third-party observation rather than a ByteDance-owned source. That absence is itself the operational answer: a crawler you cannot verify is a crawler you handle at the network layer, on your own evidence.
05 — Edge EnforcementWhen the polite layer fails, enforce at the CDN.
A CDN or WAF rule differs from robots.txt in one decisive way: it is evaluated at the network edge before your origin responds, so it does not depend on the bot’s cooperation. That makes it the correct layer for three traffic classes — user-triggered fetchers that bypass robots.txt by design, unverifiable crawlers like Bytespider, and spoofed requests wearing a legitimate bot’s User-Agent that fail the section 04 identity checks.
Cloudflare’s published numbers show both the scale of the problem and the effect of edge enforcement. By July 2025, its AI-bot blocking had been activated by more than one million customers, and Bytespider traffic across its network had fallen 71.45% since one-click blocking launched in July 2024 — a decline achieved at the edge, against a bot with no published compliance policy. The same report measured GPTBot as the most-crawled AI bot on the network, accessing 28.97% of the top 10,000 domains, while only 37% of those domains had a robots.txt file at all. Read that last pair together: the most-crawled AI bot touches nearly three in ten of the biggest domains, yet nearly two-thirds of those domains have not even published the polite layer, let alone an enforced one.
The edge is also where defaults are moving. In early July 2026, Cloudflare announced a three-way classification of AI crawlers — Search, Agent, and Training — with new defaults reported to take effect on September 15, 2026: Training and Agent crawlers blocked by default on ad-monetized pages for new domains, Search crawlers left allowed, and multi-purpose crawlers caught by the stricter applicable rule. As of this writing that change is announced, not live — but it signals where managed edge platforms are headed: purpose-classified bots and block-by-default postures that site owners inherit unless they configure otherwise.
What edge-level data shows · Cloudflare network measurements
Source: Cloudflare blog, July 2025 network research06 — The Layer MapMatch each bot to the layer that actually reaches it.
Fold sections 02 through 05 together and you get the map that competing guides skip: bots grouped by documented behavior, each paired with the enforcement layer that genuinely works on it. Applying a stronger layer than needed wastes engineering time; applying a weaker one produces a policy that exists only on paper.
Honors robots.txt reliablyHonors it, propagates slowlyBypasses robots.txt by designCompliance unconfirmed| Behavior class | Tokens in the class | Layer that works |
|---|---|---|
Honors robots.txt reliably | GPTBot · OAI-SearchBot · ClaudeBot · Claude-SearchBot · Claude-User · PerplexityBot · CCBot | robots.txt is sufficient, per vendor statements. Verify identity against IP JSON before trusting log entries, and confirm the behavior change in logs after any edit. |
Honors it, propagates slowly | meta-externalagent/1.1 · meta-webindexer/1.1 · Amazonbot | robots.txt works but lags — Meta documents up to 24h of caching; Amazonbot reportedly holds a cached file up to 30 days. Add an edge rule when the cutoff needs to be immediate. |
Bypasses robots.txt by design | ChatGPT-User · Perplexity-User · meta-externalfetcher/1.1 | Vendor-documented as not reliably honoring the file. CDN/WAF rules are the only lever — keyed to verified IP ranges for OpenAI and Perplexity, and to the user-agent string for Meta, which publishes no range file — but weigh section 07 before pulling it. |
Compliance unconfirmed | Bytespider · any spoofed or unattributable UA | No official docs, IP list, or stated policy — third-party reports only. Treat as untrusted: WAF/rate-limit on your own log evidence, since there is nothing vendor-published to verify against. |
Your own access logs are the ground truth for which class a bot actually belongs to on your site — vendor statements are the claim, logs are the evidence. Our 30 days of real crawler log data shows how the documented behavior and the observed behavior line up in practice, and where they diverge.
07 — The Agentic DecisionBlock or court: the framework for user-triggered traffic.
Agentic traffic forces a decision robots.txt never asked of you. A training crawler extracts value with no human on the other end — blocking it costs you nothing today. A user-triggered fetch is different in kind: ChatGPT-User firing at your URL means a person asked an assistant about your page right now. Block it at the edge and you have not blocked a bot — you have blocked a reader who chose an AI as their browser. That is why the vendors exempt these fetchers from robots.txt in the first place, and why the real question is block versus court, with the answer depending on what your content is worth to you in each channel.
Protect the asset
If content is your product, an assistant reading it aloud to a user is substitution, not distribution. Edge-block user-triggered fetchers by verified vendor IP range, and keep the evidence trail from your logs.
Court the reader
If the page exists to be found, the assistant is a channel, not a threat. Leave user-triggered fetchers alone, keep answer-friendly structure, and measure AI referrals so the call stays data-led.
Charge the middle path
Between block and court sits compensation. Cloudflare's Pay Per Crawl model turns access into a priced transaction rather than a binary. See our crawl-economics guide for how the referral math works.
Unverified traffic
Whatever you decide about genuine fetchers, requests that fail reverse-DNS and IP-range verification deserve no policy debate. They are impostors trading on a vendor's name — drop them at the edge.
The economic backdrop matters for calibrating this choice. Network-level measurements have shown crawl-to-referral ratios for some AI vendors running into the tens of thousands of pages crawled per visitor referred — figures that vary by source and period, which is why we keep the working numbers in our AI crawl economics and Pay Per Crawl guide rather than freezing one here. The direction is what the framework needs: automated crawling gives back far less than it takes, while user-triggered fetches are the one class with a human — a potential customer — attached to every request.
Looking forward, expect the block-versus-court decision to become more granular, not less. Cloudflare’s announced Search/Agent/Training classification is the template: once edge platforms can distinguish an agent acting for a user from a crawler acting for a training pipeline, per-purpose pricing and per-purpose access rules follow naturally. Sites that build the verification and enforcement muscle now will be the ones able to act on those controls the day they appear, instead of discovering their policy has been a default someone else chose.
08 — ImplicationsThe operating rhythm for your team.
Treat crawler control as an operating rhythm rather than a one-time configuration. The quarterly loop: re-fetch every vendor IP-range JSON your firewall rules reference, since ranges rotate; re-read the vendor bot docs for new tokens — the roster above grew steadily over the past two years; sample your logs for User-Agents that fail verification and feed the impostors to your edge rules; and re-check that your robots.txt still says what your policy means, especially after CMS or CDN changes that can silently regenerate it.
The one-time setup is smaller than it looks: a clean robots.txt per section 03, a verification pass over last month’s logs per section 04, and edge rules for the three classes robots.txt cannot reach per sections 05 and 06. If you would rather have this configured, verified, and monitored as part of a broader technical program — crawler governance, AI-search visibility, and referral measurement in one engagement — that is the core of our agentic SEO service, and it slots naturally into a wider AI transformation roadmap.
09 — ConclusionPolicy is cheap; enforcement is the playbook.
Verify identity first, enforce at the right layer second — robots.txt alone was never the plan.
The 2026 reality of AI crawler control is that the file everyone edits is the weakest layer in the stack. It works — genuinely — for the automated crawlers whose vendors commit to it, and it does nothing about spoofed User-Agents, nothing about user-triggered fetchers documented to bypass it, and nothing quickly even when honored, given documented propagation lags measured in hours and, reportedly, weeks.
The operational playbook is three moves. Write robots.txt with exact-token discipline and verify every change in your logs. Verify crawler identity against vendor-published IP-range JSON and reverse-DNS suffixes — the one pattern nearly every major vendor now supports, because they know the header proves nothing. And enforce at the CDN edge for the three classes the file cannot reach: bypass-by-design fetchers, unverifiable crawlers, and impostors.
Keep the two halves of the discipline separate. The policy — which bots to block and which to welcome — lives in our decision matrix and deserves periodic review as the referral economics shift. The enforcement — verification, syntax, edge rules — is this playbook, and it is what turns the policy from a text file into an outcome. Sites that build both before the September defaults land will be choosing their posture; everyone else will be inheriting one.