Opening the page…

Sulayman Bowles
Back to writing

Crawler engineering

How can you check whether your website blocks ChatGPT, Claude or Perplexity?

A repeatable access check starts with the exact URL, follows the delivered policy and response, and leaves a place for results you cannot yet verify.

Monochrome generative point study “Tidal Bell,” a mathematical form rendered in black and white.
Tidal Bell@yuruyurau ↗

To check whether a site blocks an AI assistant, test the live robots policy, the document returned by the host, and any real requests recorded at the edge. I would report those results separately. A green robots.txt check can coexist with a blocked article, and a readable page can remain uncited in an answer.

Start with one page you want discovered and one URL you intend to exclude. That pair catches more mistakes than a single homepage test: it checks both the route you opened and the boundary you meant to keep.

Method & limits

Provider and protocol documentation was checked October 21, 2026. The URL matrix is illustrative, not the result of an audit of a business or this site. No new provider crawl, model query, IP-feed classification or referral measurement was performed. A local response describes the requesting client and time; provider access needs its own request evidence.

Which kind of access are you testing?

A checker that asks whether “ChatGPT is allowed” has already compressed several decisions. Search discovery, training collection and a person asking an assistant to open a URL can follow different policies. Use the product token in the report.

The checked guidance supplies the following starting map. OpenAI says robots rules may not apply to ChatGPT-User; Perplexity says its user fetcher generally ignores them. Anthropic says its bots honor robots directives, including its user fetcher. OpenAI, Anthropic and Perplexity document the individual purposes.

Agent names checked October 21, 2026. Test the workflow your site owner actually wants.
ServiceAutomatic searchTraining collectionUser-directed fetch
ChatGPT / OpenAIOAI-SearchBotGPTBotChatGPT-User
Claude / AnthropicClaude-SearchBotClaudeBotClaude-User
PerplexityPerplexityBotNeither listed agent is documented for foundation-model trainingPerplexity-User

What does the public host actually serve?

Use the final public URL, including its scheme and hostname. The policy on https://example.com does not cover a separate www or help hostname just because the pages share a logo. Google’s robots specification describes the host, protocol and port scope.

Save GET responses for the policy and the page. These commands retain headers and bodies even when the server returns an error, and print the final address after redirects. Run them from an empty working folder and replace both example URLs.

Save the response you will inspect

Two ordinary diagnostic requests. They do not impersonate or reproduce a provider crawler.

curl --connect-timeout 10 --max-time 30 --silent --show-error --location \
  --dump-header robots.headers --output robots.body \
  --write-out 'final_url=%{url_effective} status=%{http_code}\n' \
  https://example.com/robots.txt

curl --silent --show-error --location \
  --dump-header page.headers --output page.html \
  --write-out 'final_url=%{url_effective} status=%{http_code}\n' \
  https://example.com/services/

A failed fetch may come from Cloudflare or host controls. Google’s Search AI controls govern a separate decision from Google-Extended.

Does the matching group allow the intended path?

Feed the saved policy into a parser that accepts a product token and full URL. Keep the parser name and version. Google publishes a robots.txt parser and matcher with a single-URL command; its documented build instructions provide one reproducible option, although another provider’s implementation may differ.

Test every selected search token against both URLs. Then test the training token against a public article if your policy declines training collection. Check grouping before changing a line: the wildcard group is a fallback, and rules from repeated groups for the same product token combine. RFC 9309.

Illustrative acceptance matrix for a publication that allows search, excludes internal search paths and declines GPTBot collection. These are expected parser answers.
TokenURL pathExpected policy result
OAI-SearchBot/services/Allowed
OAI-SearchBot/search/resultsDisallowed
Claude-SearchBot/services/Allowed
PerplexityBot/services/Allowed
GPTBot/services/Disallowed

Did the request receive the article?

Open page.html as text and look for the page’s main heading and a distinctive sentence. A login form, challenge screen, empty application shell or error message explains why “HTTP 200” is an incomplete success criterion. Save the body that supports your classification.

If a browser displays the missing text after JavaScript runs, record that as a browser observation. It is an additional representation to inspect. The raw HTML and rendered DOM method explains how to capture a browser’s own document response without assuming a separate curl request received the same bytes.

For Cloudflare challenges, cf-mitigated: challenge identifies a Challenge Page response. Cloudflare’s header reference gives the documented signal. Preserve any request ID and time so you can find the corresponding security event.

What evidence comes from the provider itself?

Now inspect edge logs for the chosen path and time window. A request header naming a provider is a lead. Use the trusted client address and the provider’s current verification method before attributing it; OpenAI and Perplexity link product-specific IP feeds from their documentation. Preserve the evidence date instead of silently classifying historical requests against a new list.

Changing curl’s User-Agent tests whether your own request is treated differently when that string changes. It does not move the request to the provider’s network or reproduce its TLS fingerprint, request sequence or credentials. Keep synthetic checks out of the provider-visit count.

The server-log verification guide covers proxy addresses and missing attribution evidence. If there is no attributable request in the window, mark provider delivery unverified. Do not turn silence into either a pass or a block.

What should the final access report say?

A useful report lets the owner choose the next repair. “Policy disallowed” sends the work to robots.txt. “Policy allowed, edge denied” sends it to security rules. “Document delivered, no attributed provider request” calls for an observation window, not another policy rewrite.

I would finish with the exact URL, check time, token, policy result, saved response and attribution status. Put any answer or citation experiment in another column with its own conditions. The crawler policy guide maps the choices; this check tells you which layer needs attention.

Sources

  1. OpenAI — Overview of OpenAI Crawlers

    OpenAI

    Verified Oct 21, 2026

    Fetched with the official OpenAI documentation tool; no publication date is displayed.

  2. Anthropic — web crawlers and site-owner controls

    Anthropic · April 7, 2026

    Verified Oct 21, 2026

  3. Perplexity — Perplexity Crawlers

    Perplexity

    Verified Oct 21, 2026

    No publication date displayed. Current page links www.perplexity.com product-specific feeds; the feeds themselves were not fetched for a classification.

  4. Google — How Google interprets robots.txt

    Google · Updated August 31, 2026

    Verified Oct 21, 2026

  5. RFC 9309 — Robots Exclusion Protocol

    IETF / RFC Editor · September 2022

    Verified Oct 21, 2026

  6. Google — open-source robots.txt parser and matcher README

    Google

    Verified Oct 21, 2026

    README and single-URL CLI usage checked; no local build or provider-conformance test was run.

  7. Cloudflare — Detect a Challenge Page response

    Cloudflare · Updated May 5, 2026

    Verified Oct 21, 2026

Read next