SEOPlaybook14 min readPublished August 13, 2026

Verify identity, then enforce · 8 vendors · robots.txt is a request, not a rule

AI Bot Verification and Edge Enforcement: 2026 Playbook

A robots.txt rule only works when the crawler both obeys the file and is who it claims to be — and neither is guaranteed. This is the operational layer of AI crawler control: exact token syntax, reverse-DNS and IP-range identity verification, CDN-level enforcement for the bots that bypass robots.txt, and a framework for the agentic traffic you may not want to block at all.

DA
Digital Applied Team
Senior strategists · Published August 13, 2026
PublishedAugust 13, 2026
Read time14 min
SourcesVendor docs + Cloudflare research
Top-10K domains crawled by GPTBot
28.97%
Cloudflare network · reported July 2025
Top-10K domains with any robots.txt
37%
most have no request layer at all
Bytespider traffic on Cloudflare
−71.45%
since one-click blocking, July 2024
edge rules bite
Cloudflare AI-bot blocking
1M+
customer activations by July 2025

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.

Key takeaways
  1. 01
    User-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.
  2. 02
    Automated 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.
  3. 03
    robots.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.
  4. 04
    The 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.
  5. 05
    Blocking 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.

01The 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.

Where the verdicts live
This playbook deliberately makes no block/allow recommendations per bot. Those calls — GPTBot vs OAI-SearchBot, ClaudeBot vs Claude-SearchBot, and the rest — are maintained in our AI crawler decision matrix. Decide your policy there; implement and enforce it here.

02The 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.

Class 1
Automated crawlers
GPTBot · ClaudeBot · PerplexityBot · CCBot

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.

robots.txt reaches these
Class 2
User-triggered fetchers
ChatGPT-User · Perplexity-User · meta-externalfetcher/1.1

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.

Edge rules only
Class 3
Control tokens
Google-Extended · Applebot-Extended

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.

Never appear in your logs

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.

03Syntax 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.

Meta propagation lag
Documented cache delay
24h

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.

Vendor-documented
Amazonbot cache window
Reported fallback
30d

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.

Reported · verify in logs
llms.txt spec
Updated August 10, 2026
v2

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.

Not an access control

04Identity 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.

Verification matrix for eight AI crawler operators, listing each vendor’s automated crawl tokens, user-triggered fetcher token, documented robots.txt posture, and vendor-published identity-verification surface such as IP-range JSON files and reverse-DNS suffixes.
OperatorAutomated / token UAsUser-triggered UArobots.txt posture (vendor-stated)Identity verification
OpenAIGPTBot · OAI-SearchBot · OAI-AdsBotChatGPT-UserGPTBot and OAI-SearchBot honor it; ChatGPT-User “robots.txt rules may not apply”; OAI-AdsBot compliance unstatedopenai.com/gptbot.json · searchbot.json · chatgpt-user.json · adsbot.json
AnthropicClaudeBot · Claude-SearchBotClaude-UserAll three stated to respect robots.txt, including Crawl-delay — the strictest stated posture of the setclaude.com/crawling/bots.json
PerplexityPerplexityBotPerplexity-UserPerplexityBot honors it; Perplexity-User “generally ignores robots.txt rules”perplexity.ai/perplexitybot.json · perplexity-user.json
GoogleGooglebot · Google-CloudVertexBot · Google-Extended (token only)Honored; Google-Extended is a robots.txt-only control token with no distinct HTTP user-agentReverse DNS to crawl-*.googlebot.com + published IP ranges (common-crawlers.json for Vertex)
Metameta-externalagent/1.1 · meta-webindexer/1.1 · meta-externalads/1.1meta-externalfetcher/1.1Crawl agents honor it with up to 24h cache lag; the fetcher may bypass robots.txt for user-requested fetchesMeta developer docs (developers.facebook.com web-crawlers page)
AppleApplebot · Applebot-Extended (token)Honored; Applebot-Extended does not crawl — it only governs how Applebot-crawled data may be usedApple support documentation (About Applebot)
AmazonAmazonbot · Amzn-SearchBotRespects the Robots Exclusion Protocol; reportedly uses a cached robots.txt for up to 30 days if the live fetch failsdeveloper.amazon.com/amazonbot
Common CrawlCCBot/2.0Honored (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.

05Edge 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 research
Top-10K domains crawled by GPTBotMost-crawled AI bot on Cloudflare's network · reported July 2025
28.97%
Top-10K domains with any robots.txtThe polite layer is missing from most major domains
37%
Bytespider traffic decline at the edgeCloudflare network, since one-click blocking · July 2024 → July 2025
−71.45%
Announced, not yet live
Cloudflare’s Search/Agent/Training defaults are announced for September 15, 2026 — after this post’s publish date. Cloudflare’s framing of the announcement, as reported by trade press: “Content owners still want to be able to protect their content, and they should be compensated for the original content that they work hard to create, curate, and share.” If your search crawlers matter to you, audit your zone’s settings before the new defaults land, and confirm the final behavior against Cloudflare’s own documentation.

06The 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.

Behavior class
Honors robots.txt reliably
Tokens in the class
GPTBot · OAI-SearchBot · ClaudeBot · Claude-SearchBot · Claude-User · PerplexityBot · CCBot
Layer that works
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.
Behavior class
Honors it, propagates slowly
Tokens in the class
meta-externalagent/1.1 · meta-webindexer/1.1 · Amazonbot
Layer that works
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.
Behavior class
Bypasses robots.txt by design
Tokens in the class
ChatGPT-User · Perplexity-User · meta-externalfetcher/1.1
Layer that works
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.
Behavior class
Compliance unconfirmed
Tokens in the class
Bytespider · any spoofed or unattributable UA
Layer that works
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.

07The 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.

Paywalled · licensable IP
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.

Block at the edge
Marketing · docs sites
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.

Court the traffic
High-value content, open site
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.

Price the access
Any site
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.

Always block impostors

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.

08ImplicationsThe 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.

09ConclusionPolicy is cheap; enforcement is the playbook.

AI bot control, August 2026

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.

Enforce your AI crawler policy, not just publish it

Verify who is really crawling you — then enforce it at the edge.

Our team configures the full stack — robots.txt discipline, crawler identity verification, CDN edge rules, and AI-referral measurement — so your crawler policy is enforced reality, not a text file bots may ignore.

Free consultationExpert guidanceTailored solutions
What we work on

Crawler governance engagements

  • Bot identity verification — reverse DNS + IP-range audits
  • robots.txt policy implementation with log-verified rollout
  • CDN/WAF rules for fetchers that bypass robots.txt
  • Spoofed-crawler detection from your access logs
  • AI-referral measurement so block-vs-court stays data-led
FAQ · Bot verification & enforcement

The questions we get every week.

Never trust the User-Agent header alone — it is a client-controlled string anyone can send. OpenAI publishes machine-readable IP-range files for each of its bots: gptbot.json, searchbot.json, chatgpt-user.json, and adsbot.json, all hosted on openai.com. Pull the source IP of the suspect request from your access logs and check whether it falls inside the published ranges for the token it claims to be. If it does not, the request is an impostor trading on OpenAI's name, and it is safe — and sensible — to block it at your firewall or CDN. The same workflow applies to every vendor that publishes ranges: Anthropic publishes claude.com/crawling/bots.json, Perplexity publishes per-bot JSON files, and Google and Common Crawl additionally support reverse-DNS verification against their published hostname patterns.