Skip to main content
USA-Based Digital Agency

Is Your CDN or Firewall Blocking AI Crawlers? A 10-Minute Check

A CDN or firewall can silently block the agents that ChatGPT, Claude and Perplexity use to read and cite pages, and robots.txt never gets a say. This check takes four steps: read your robots.txt, fetch a page as each agent, search your logs, and verify against the published IP lists.

By George Shvaya · October 15, 2026 · 8 min read

Key takeaways

  • On July 1, 2025 Cloudflare announced it was changing its default to block AI crawlers unless they pay creators for their content, so a site can be blocking search agents without anyone having chosen to.
  • The agents that cite pages (OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User) are documented separately from the training crawlers (GPTBot, ClaudeBot, the Google-Extended token), and the two decisions should be made separately.
  • A firewall block is enforced before robots.txt is read, so a 403 or challenge page defeats both your allow rules and your opt-out rules at once.
  • The reliable test is a request with the agent’s user-agent string compared against a browser request, followed by a search of the CDN firewall log, not the origin log.

Most of the sites we audit that are invisible to AI assistants have done nothing wrong on purpose. Somebody turned on a bot-protection feature in 2023, or accepted a default in 2025, and the setting has been quietly returning 403s to the agents that would have quoted the site ever since. Nothing in Search Console reports it. Nothing in analytics reports it. The only evidence is in the CDN’s firewall log, which nobody reads.

Why this became a default problem

Cloudflare fronts a large share of the web, and on July 1, 2025 it announced it was “changing the default to block AI crawlers unless they pay creators for their content.” Alongside it came pay per crawl, described as a private beta, in which a crawler without payment intent receives a 402 Payment Required response with pricing and publishers can Allow, Charge or Block each crawler.

For a publisher that sells content, that is a reasonable position. For a plumber, a dental practice or a software vendor whose entire goal is to be recommended, blocking the agents that do the recommending is self-defeating. The problem is that the default does not distinguish between a crawler collecting training data and an agent fetching your page because a customer just asked about you. Generic WAF bot rules, “bot fight” modes and managed challenges have the same blind spot: anything that is not a mainstream browser gets the same treatment.

Two decisions, not one

The vendors themselves document their agents separately, which makes the policy question tractable. Decide first whether you want to be cited. If yes, the search and user-initiated agents need to get a 200. Decide second, as a matter of policy, whether your content may be used for training. That is what the training crawlers and the Google-Extended token control, and nothing about that decision needs to touch the first one.

AI agents by vendor and purpose, as documented by each vendor
AgentVendorWhat the vendor says it does
OAI-SearchBotOpenAISurfaces websites in ChatGPT search. Allow if you want to appear in ChatGPT search answers.
ChatGPT-UserOpenAIFetches a page when a user asks a question. Robots.txt may not apply. Allow if you want to be quoted.
GPTBotOpenAICrawls content that may be used to train models. A separate decision.
Claude-SearchBotAnthropicIndexes to improve search relevance and accuracy. Allow if you want visibility in Claude search.
Claude-UserAnthropicFetches when a Claude user asks. Disabling it may reduce visibility in user-directed search.
ClaudeBotAnthropicTraining crawler. A separate decision.
PerplexityBotPerplexitySurfaces and links websites in Perplexity results. Not used for training.
Perplexity-UserPerplexityFetches when a user asks. Generally ignores robots.txt. Allow if you want to be cited.
Google-ExtendedGoogleA robots.txt token only, no separate user-agent string. Controls Gemini training and grounding, not Search or AI features.

Sources: OpenAI, Anthropic, Perplexity and Google. OpenAI is explicit that sites opted out of OAI-SearchBot “will not be shown in ChatGPT search answers,” and that ChatGPT-User “is not used to determine whether content may appear in Search.” Google is equally explicit that Google-Extended “does not impact a site’s inclusion in Google Search nor is it used as a ranking signal.” For the full roster and what each agent reads, see which AI crawlers visit your site.

The four-step check

Step 1: Read your robots.txt

Fetch /robots.txt and look for rules naming any of the agents above, and for a catch-all User-agent: * block. Check that the file itself returns a 200 to a bot user-agent and not a challenge page; a crawler that cannot read your rules cannot honour them. If you need to rewrite it, the robots.txt generator produces per-agent blocks so the search agents and training crawlers can be treated differently.

Step 2: Fetch a page as each agent

Robots.txt is advisory. The firewall is not. The only way to know what an agent actually receives is to ask as that agent and compare the response to a normal browser request:

# Baseline: what a browser gets
curl -sI -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/130 Safari/537.36" https://example.com/services/ | head -1

# Repeat for each agent string
for UA in "OAI-SearchBot/1.0; +https://openai.com/searchbot" \
          "ChatGPT-User/1.0; +https://openai.com/bot" \
          "Claude-SearchBot" "Claude-User" \
          "PerplexityBot/1.0; +https://perplexity.ai/perplexitybot" \
          "Perplexity-User/1.0; +https://perplexity.ai/perplexity-user"; do
  printf "%-60s " "$UA"
  curl -s -o /dev/null -w "%{http_code}\n" -A "Mozilla/5.0 (compatible; $UA)" https://example.com/services/
done

Every line should match the baseline. A 403, a 429, a 503, or a 200 whose body is a “checking your browser” page instead of your content, is a block. Run it against the homepage, a service page and /robots.txt. If you cannot see your firewall configuration, this test is still available to you, which is the point of it.

Step 3: Search the logs for the last 30 days

Grep your origin access logs for the agent strings. If they appear with 200s, the agents are reaching you. If they do not appear at all, that is not proof they never came: a CDN that blocks at the edge never forwards the request, so the origin log is silent. Open the CDN’s own firewall or security events view and filter by the same strings; the blocks, challenges and 402s are recorded there with the rule that fired.

grep -hE "OAI-SearchBot|ChatGPT-User|GPTBot|Claude-SearchBot|Claude-User|ClaudeBot|PerplexityBot|Perplexity-User" access.log* \
  | awk '{print $9}' | sort | uniq -c   # status code histogram per agent family

Step 4: Verify by IP where the vendor publishes one

User-agent strings can be spoofed, which is why some firewalls are suspicious of them. Each vendor publishes the addresses its agents use: OpenAI at openai.com/searchbot.json and openai.com/chatgpt-user.json, Anthropic at claude.com/crawling/bots.json, Perplexity at perplexity.com/perplexitybot.json and perplexity.com/perplexity-user.json. Perplexity’s own advice for WAF rules is to “combine both User-Agent string matching and IP address verification” and refresh the lists periodically. Build the allow rule from name plus published range, and you have stopped both the false block and the spoofed request.

One warning from Anthropic belongs here. Its documentation discourages IP-level blocking because it may prevent its bots from reading robots.txt at all, so an IP block does not reliably opt you out; it just makes your intentions unreadable. The same logic applies in reverse to allow rules: if the agent cannot reach /robots.txt, nothing you wrote there is in force.

Not sure what your CDN is returning to these agents?

The free AI visibility audit runs the agent-by-agent fetch against your site and lists any block, challenge or missing allow rule before anything else is recommended.

Get a Free AI Visibility Audit

Prefer to talk it through? Book a Free Call

Why the user-initiated agents matter most

Two of the agents in the table behave differently from the rest. OpenAI says that when users ask ChatGPT a question “it may visit a web page with a ChatGPT-User agent,” and that because the action was initiated by a user, “robots.txt rules may not apply.” Perplexity says Perplexity-User “generally ignores robots.txt rules” for the same reason. These are not crawlers filling an index on a schedule. They are a person, right now, asking about the thing you sell, and the assistant reaching for your page to answer them.

A 403 or a challenge page returned to that fetch means the assistant cannot quote you for that user, at that moment. It will answer anyway, from whatever it could read, which is usually a competitor or a directory page about you that you do not control. Of all the responses in your firewall log, those are the ones that cost a sale each.

Symptoms, causes and fixes

Common symptoms of CDN or firewall blocks on AI agents, likely causes and fixes
SymptomLikely causeFix
Browser gets 200, bot user-agent gets 403A WAF or bot-management rule matching the user-agent string, or an AI-crawler toggle left at its default.Create an allow rule for the search and user agents by name (and IP list where published). Leave the training crawlers to your policy.
Bot gets 200 but the body is a JavaScript challenge pageManaged challenge or "under attack" mode applied to every non-browser request.Exempt the named agents from the challenge, or scope the challenge to the paths that need it.
Agents appear in robots.txt but never in access logsThey are being dropped upstream of your origin, at the CDN edge, so the origin never sees them.Check the CDN firewall event log rather than the origin log; the blocks are recorded there.
Robots.txt itself returns 403 or a challenge to botsThe rule is applied site-wide, including /robots.txt.Always serve /robots.txt to everyone with a 200. A crawler that cannot read your rules cannot honour them.
Pages indexed fine on Google, absent from ChatGPT and PerplexityGooglebot is on an allow list from years ago; the newer agents are not.Add the newer agents to the same allow list. Google-Extended needs no rule for this; it is not the control for AI features.
Changes made, no difference next dayCaches and crawler schedules. OpenAI says robots.txt changes take about 24 hours to apply.Re-test after a day with the curl check, then watch the logs for a week before concluding.

What this does not fix

Access is a precondition, not a result. An agent that can now reach your page still has to find it in an index, read it as HTML, understand who you are, and find a sentence worth quoting. Those are the next checks, and they are laid out in order in why ChatGPT is not mentioning your business. Google’s guidance for its own AI features is a useful reminder of how little magic is involved: a page must be indexed and eligible for a snippet, and there are “no additional technical requirements” and no special structured data to add. Access, then index coverage, then clarity. In that order.

Frequently asked questions

If I block GPTBot, am I also blocking ChatGPT search?

Not according to OpenAI. GPTBot is documented as the training crawler and OAI-SearchBot as the agent that surfaces websites in ChatGPT search, and OpenAI says each robots.txt setting is independent of the others. A CDN rule that matches both strings, however, blocks both. Check the rule, not just robots.txt.

Why does robots.txt not fix a firewall block?

Robots.txt is a request to a well-behaved crawler; a firewall rule is enforced before the crawler sees anything. If the WAF returns a 403 or a challenge page, the agent never reads robots.txt. Anthropic specifically warns that IP-level blocking can prevent its bots from reading robots.txt, which means your opt-out signal is not even delivered.

Should I allow the user-initiated agents even though they ignore robots.txt?

If you want to be quoted, yes. OpenAI says ChatGPT-User may fetch a page when a user asks a question and that robots.txt rules may not apply because the action was initiated by a person; Perplexity says the same of Perplexity-User. A 403 returned to one of those fetches means the assistant cannot read your page for that user, at that moment.

How do I verify a request really came from OpenAI, Anthropic or Perplexity?

Each vendor publishes IP ranges: openai.com/searchbot.json and openai.com/chatgpt-user.json, claude.com/crawling/bots.json, and perplexity.com/perplexitybot.json plus perplexity.com/perplexity-user.json. Perplexity recommends combining user-agent string matching with IP verification in WAF rules, and refreshing the lists periodically.

About the work

Webvello is an AI search optimization and index engineering company founded in 2024, based in Roseville, California. We have delivered 50+ projects across 37+ cities, with a 3–5x average client ROI on properties where the technical foundation was the binding constraint. Founder George Shvaya came to search from cybersecurity and systems engineering, which is why a firewall log is the first thing we open on a new engagement. The rest of the method is in the AI Search Playbook.

Want someone to read your firewall log and tell you which agents are being turned away?

Book a Free Call