Discovery Science · established evidence

When a Crawler Doesn't Play by the Rules: The Cloudflare-Perplexity Incident, Explained

Last reviewed 2026-07-20. Written by Chandranshu Kumar, Founder, Raveneye Global. · 9 min read

Does robots.txt stop AI crawlers? Usually, but not always, and one well-documented incident shows why the gap matters. robots.txt is a voluntary convention: it publishes a request for well-behaved bots to stay out of certain paths, and it works only because reputable crawlers choose to honor it. In August 2025 Cloudflare reported that Perplexity had kept fetching pages from sites that blocked its declared crawler, using an undeclared browser-spoofing bot that rotated its address and network to evade the block. Perplexity publicly disputes that framing. Whatever the final verdict on any one company, the episode is a clean illustration of a structural fact: a disallow line in a text file is an instruction, not a wall. For a business deciding how to treat AI crawlers, that means crawlability cannot be governed by a single setting, and the reliable posture is to verify what is actually being fetched rather than to assume the file settled it.

A text file is a request, not a wall

robots.txt is one of the oldest conventions on the web. A site publishes a small text file at its root that lists which paths crawlers are asked not to fetch. It is an advisory standard: the server does not enforce it, and it carries no technical barrier. A compliant crawler reads the file and stays out of the disallowed paths because its operator has decided to be a good citizen. A crawler that ignores the file faces no wall, only reputational and, potentially, legal consequences.

This design has held up for thirty years because the crawlers that mattered were run by a small number of search companies with a strong incentive to be trusted. The generative-answer era stresses that arrangement. There are now many more crawlers, run by many more operators, fetching for many more purposes, and not all of them behave the way their published names imply. The question owners now ask, does robots.txt stop AI crawlers, has a more complicated answer than the file's history would suggest.

What Cloudflare documented in August 2025

On 4 August 2025, Cloudflare published a technical report describing behavior it attributed to Perplexity. According to the report, when sites blocked Perplexity's declared crawler through robots.txt and by its stated user-agent, Perplexity continued to fetch those pages using an undeclared, generic crawler that impersonated a normal web browser, presenting itself as Chrome running on macOS rather than as any AI bot.

Cloudflare reported that this stealth crawler rotated both its IP address and its ASN (the network identifier that ties an address to an operator) to move around the blocks, and that the activity spanned tens of thousands of domains and millions of requests a day. Crucially, Cloudflare said it verified the effect rather than merely inferring it: it set up test domains that explicitly blocked Perplexity, then queried Perplexity about content that lived only on those blocked domains, and reported that the answers still reflected that content. Cloudflare subsequently removed Perplexity from its list of verified bots.

Why the verification step is the load-bearing part

Blocked traffic showing up in logs is suggestive; it is not, by itself, proof that a specific operator is evading a specific block. Cloudflare's controlled test, seeding content on a domain that had explicitly disallowed the crawler and then observing that content surface in the product, is what moves the account from an accusation about anonymous traffic to a documented, reproducible claim about a named system. That is the difference between an established incident and an assertion, and it is the reason this episode can be cited carefully while the broader characterization stays contested.

Perplexity disputes the framing

This is a dispute, not a settled finding, and the analysis here says so plainly. Perplexity publicly rejected Cloudflare's characterization, contesting the methodology and the framing of the behavior. The report is a single vendor's account; it was not independently audited by a neutral third party, and it describes a snapshot of behavior at one point in time.

So two things are true at once. The incident as documented, a controlled test in which blocked content surfaced anyway, is a real, sourced event that a site owner can reason about. The wider claim, that this represents an ongoing, deliberate practice by a particular company, is contested and should be treated as such. We cite the first tier confidently and flag the second as unresolved. The value of the episode does not actually depend on how the corporate dispute resolves, because the structural lesson holds either way.

The structural lesson: blocking a bot is not the same as stopping it

Strip away the specific companies and the episode reduces to a simple, durable point. A robots.txt disallow, and a block keyed to a declared user-agent string, both depend on the crawler telling the truth about who it is. A user-agent is self-reported. A well-behaved crawler declares itself accurately and honors the file. A crawler that presents itself as an ordinary browser, from rotating addresses, is difficult to distinguish from a real human visitor using that same browser, which is exactly why generic-browser traffic is hard to block without also blocking people.

This is why blocking AI bots in robots.txt is a necessary hygiene step but never a guarantee of exclusion. The file governs the crawlers that choose to be governed. It cannot, on its own, stop a fetch that refuses to identify itself as a bot. Enforcement, as opposed to a polite request, requires a different layer: verified-bot allowlists, behavioral detection, and network-level controls of the kind a CDN or edge provider operates. The lesson is not that robots.txt is useless. It is that robots.txt is an instruction sitting one layer above the enforcement that would make it binding, and the two are frequently confused.

Crawlability is not one setting: the kinds of AI bots

The incident also exposes a more basic modeling error, the idea that there is a single lever called "AI crawler access." There is not. The AI-crawler ecosystem is split by function, and a single blanket rule treats categories that behave differently as if they were one thing.

Broadly, current technical accounts converge on three types. Training crawlers (for example GPTBot, CCBot, anthropic-ai) bulk-ingest pages to build model training sets and generally respect robots.txt. Retrieval and search crawlers (for example OAI-SearchBot, PerplexityBot, Claude-SearchBot) fetch live at query time to assemble an in-session answer. User-triggered fetch agents (for example ChatGPT-User, Claude-User) act more like a browser a person is driving, and enforce robots.txt less consistently because a human initiated the request. Because these behave differently, a one-line "block AI" or "allow AI" directive is a category error: the right posture differs by crawler purpose, and by whether you want to be ingested for training, fetched for answers, or both.

  • Training crawlers ingest for model building and generally honor robots.txt; blocking them affects future training corpora, not live answers.
  • Retrieval crawlers fetch at query time to power a synthesized answer; blocking them can affect whether you are drawn on in that moment.
  • User-triggered agents behave like a person-driven browser and apply robots.txt least consistently, which is where the declared-versus-actual gap is widest.

The pattern behind it: an infrastructure-honesty gap

The stealth-crawler episode is not an isolated oddity. It is one instance of a broader pattern in the discovery-science stack: the tooling layer that vendors promote as "how you control AI visibility" is younger, leakier, and less standardized than the marketing implies.

Consider the file that was supposed to be the polite counterpart to a block, llms.txt, the proposed root-level file meant to hand AI systems a clean, curated summary of a site. Ahrefs analyzed 137,210 domains and found that 97 percent of valid llms.txt files received zero requests in a single month of 2026, and Google has stated publicly that the file is not used for search. So one file that asks bots to stay out can be circumvented by a crawler that refuses to identify itself, and another file that invites bots in is, at scale, not being read. Both facts point the same way: the control surface owners are told to configure is real but partial, and confident claims about "controlling" AI access should be met with the question of which layer actually enforces the control.

What this means for a site owner deciding whether to block AI crawlers

The practical takeaways are unglamorous, which is the point. First, keep robots.txt correct and specific, treating it as the declared-intent layer it is, not as a security boundary. Second, decide access per crawler purpose rather than with a single switch, because being ingested for training and being fetched for a live answer are different trades with different consequences for visibility. Third, if genuine exclusion matters to you, understand that enforcement lives at the edge and network layer, not in a text file, and plan accordingly.

Above all, verify rather than assume. The one durable instruction from the Cloudflare-Perplexity episode is that what a crawler declares and what it actually fetches can diverge, so the only reliable knowledge of how your pages are being crawled, rendered, and reached comes from inspecting the real behavior against your real logs and index state. That reading, not a default configuration, is the real starting point for any decision about AI-crawler access.

The evidence

Key findings, with their sources

  • Cloudflare documented Perplexity using an undeclared, browser-spoofing crawler (impersonating Chrome on macOS) to keep fetching pages after being blocked via robots.txt and its declared user-agent, rotating IP address and ASN to evade blocks across tens of thousands of domains and millions of requests a day.

    established Cloudflare Blog, "Perplexity is using stealth, undeclared crawlers to evade website no-crawl directives", 4 August 2025.

  • Cloudflare verified the behavior with a controlled test: content published only on domains that explicitly blocked the crawler still appeared in Perplexity's answers, after which Cloudflare de-listed Perplexity as a verified bot; Perplexity publicly disputed the methodology.

    contested Cloudflare Blog, 4 August 2025 (incident report); Perplexity public response.

  • The AI-crawler ecosystem splits by function into training crawlers (GPTBot, CCBot, anthropic-ai) that generally respect robots.txt, retrieval crawlers (OAI-SearchBot, PerplexityBot, Claude-SearchBot) that fetch live at query time, and user-triggered agents (ChatGPT-User, Claude-User) that enforce robots.txt least consistently, so one blanket directive cannot govern all three.

    established Convergent technical write-ups on AI-crawler taxonomy, 2025-26 (multiple independent sources).

  • Of 137,210 domains analyzed, 97% of valid llms.txt files received zero requests in a single month of 2026, and Google states the file is not used for search, evidence that the "control" tooling around AI access is partial and unstandardized.

    established Ahrefs, "We Analyzed 137K Sites: 97% of llms.txt Files Never Get Read", June 2026; Google (John Mueller) public statement.

Calibration

What is proven, what is promising, what is unproven

Evidence tierTacticsWhat the evidence says
establishedThe documented incident: a controlled test in which content on a crawler-blocked domain still surfaced in the product; robots.txt as a voluntary, advisory convention; the three-way functional split of AI crawlers.Cloudflare Blog (4 Aug 2025, with a reproducible verification step); convergent independent technical taxonomy write-ups.
emergingThat undeclared or browser-spoofing fetch behavior is a general risk across multiple retrieval and user-agent crawlers, not unique to one operator.Directionally consistent across technical reporting, but bot-specific compliance changes over time and should be re-verified before being stated as fixed.
contestedThat the reported behavior represents an ongoing, deliberate practice by a named company.A single vendor's report, not third-party audited; the operator publicly disputes the framing.

Reference

Glossary

robots.txt
A root-level text file in which a site publishes which paths crawlers are asked not to fetch. It is a voluntary standard: compliant crawlers honor it by choice, and it carries no technical enforcement.
User-agent
A self-reported string a crawler or browser sends to identify itself. Blocks keyed to a user-agent only work if the client tells the truth about who it is.
Stealth or undeclared crawler
A bot that fetches pages while presenting itself as an ordinary browser rather than as a named crawler, making it hard to distinguish from a human visitor and hard to block via robots.txt.
ASN
Autonomous System Number, the identifier that ties a block of IP addresses to a network operator. Rotating ASN, as reported in this incident, is one way traffic evades address-based blocks.
Verified bot
A crawler an infrastructure provider has confirmed is operated by whom it claims, usually via cryptographic or reverse-DNS checks. Verification is what lets an allowlist trust a declared identity.

Straight answers

Frequently asked questions

Does robots.txt stop AI crawlers?

It stops the ones that choose to comply, which includes most reputable crawlers, but it is a request rather than a barrier. robots.txt has no technical enforcement; a crawler that refuses to identify itself as a bot, as documented in the Cloudflare-Perplexity incident, can fetch pages the file asked it not to. Real exclusion requires enforcement at the edge or network layer, not just a line in a text file.

Should you block AI crawlers in robots.txt?

It depends on which crawler and why, because access is not one switch. Training crawlers, retrieval crawlers, and user-triggered agents fetch for different purposes with different consequences for your visibility. Keep robots.txt correct and specific as your declared-intent layer, decide access per crawler purpose, and if genuine exclusion matters, pair it with edge-level enforcement rather than assuming the file alone settles it.

Is Perplexity ignoring robots.txt?

Cloudflare reported in August 2025 that Perplexity used an undeclared browser-spoofing crawler to keep fetching content from sites that had blocked its declared crawler, and verified this with a controlled test. Perplexity publicly disputes that characterization. The documented incident is established; the broader claim of an ongoing deliberate practice is a contested dispute between the two companies, not a settled finding.

What is the difference between GPTBot and OAI-SearchBot?

They are different crawlers with different jobs. GPTBot is a training crawler that ingests pages to build model training data and generally respects robots.txt. OAI-SearchBot is a retrieval crawler that fetches live at query time to help assemble an in-session answer. Because their purposes differ, a single robots.txt rule that treats "AI" as one category can block one job while leaving the other untouched.

How do I know how my site is actually being crawled?

You have to inspect real behavior rather than trust the configuration, because the incident's core lesson is that what a crawler declares and what it fetches can diverge. Read your server logs and index state to see which agents reach which pages, how your templates render to crawlers that run no JavaScript, and where crawl is being wasted. That measured read is the only reliable basis for any AI-crawler access decision.

Provenance

Sources

  1. Cloudflare Blog, "Perplexity is using stealth, undeclared crawlers to evade website no-crawl directives", 4 August 2025 (established as documented, verified incident; contested as an ongoing characterization, which Perplexity disputes)
  2. Perplexity, public response disputing Cloudflare's methodology and framing, August 2025 (contested)
  3. AI-crawler functional taxonomy (training vs retrieval vs user-triggered agents), multiple independent technical write-ups, 2025-26 (established taxonomy; per-bot compliance subject to change)
  4. Ahrefs, "We Analyzed 137K Sites: 97% of llms.txt Files Never Get Read", June 2026 (established)ahrefs.com
  5. Google (John Mueller), public statement that llms.txt is not used for search, 2026 (established)

Every figure above is attributed to a real, dated source and tagged with its evidence tier. Where a claim could not be verified to a primary source, it is not stated as fact.

What this means for your business

The lesson from this incident is that a default configuration cannot tell you how your pages are actually being crawled, rendered, and reached, and assumptions at the technical floor quietly cap everything above them. A page a crawler cannot fully read cannot be named in a classic result or an AI answer, whatever else you do to it. A Technical Foundation Fix-List reads your real indexation state, tests how your templates render to crawlers that run no JavaScript, audits your robots.txt and crawl hygiene, and returns the blockers as one ranked, sourced fix list you can hand to any developer.

service Technical Foundation Fix-List A focused diagnostic that finds what blocks your site from being crawled, rendered, and indexed, then returns it as a single fix list ranked by impact on visibility, with the evidence behind each finding. It diagnoses and prioritizes; it does not, on its own, promise a ranking or a traffic figure. See how it works

Start free with a Machine-Readiness Score, a specialist-reviewed read of where you stand across search and AI answers. No guaranteed number, and no obligation.