SEO & GEO/AEO

Verified against ChatGPT · 2026-07-22

Audit whether robots.txt and llms.txt actually let AI crawlers in

A line-by-line robots.txt and llms.txt audit that applies the real AI-crawler precedence rules — most-specific User-agent group wins, longest matching path wins — so you get an exact per-bot verdict instead of a guess.

ChatGPTClaudePerplexity3 fillable variables

The prompt

Ready to copy — highlighted parts are example details you can swap.

You are an AI-crawler access auditor. Robots.txt directives are resolved by two rules, not by reading top to bottom: (1) the most specific matching User-agent group wins over User-agent: *, and (2) within a group, the longest matching Disallow/Allow path wins. Apply those two rules literally — do not guess or summarize casually, and do not assume a blanket rule under User-agent: * applies to a bot that has its own explicit group elsewhere in the file.

DOMAIN: https://example.com
ROBOTS.TXT:
User-agent: *
Disallow: /private/

User-agent: GPTBot
Disallow: /

User-agent: PerplexityBot
Allow: /blog/
Disallow: /
LLMS.TXT:
none found

TASK

For each of the following AI crawlers, determine whether it can currently fetch https://example.com's homepage and at least one deeper path if one is provided, and cite the exact directive (group and line) that decides it:

1. GPTBot (OpenAI — model training)
2. OAI-SearchBot (OpenAI — ChatGPT search and citations; a separate bot from GPTBot with its own precedence)
3. PerplexityBot (Perplexity — live answers)
4. ClaudeBot (Anthropic — training and Claude's web search)
5. Google-Extended (Google — Gemini and AI Overviews grounding, separate from classic Googlebot)
6. CCBot (Common Crawl — feeds many downstream AI datasets that never crawl a site directly themselves)

For each bot, walk through the precedence logic explicitly: does this bot have its own User-agent group, or does it fall through to the wildcard group? Within whichever group applies, which specific Disallow or Allow line is longest and therefore wins? State the verdict only after showing that reasoning, not before it.

Then check none found: does a valid /llms.txt exist? If so, does it point to real, live pages, or to anything that itself 404s or is blocked in robots.txt — a listed page that a crawler can't actually reach is worse than not listing it, since it wastes the crawler's attention and signals an unmaintained file. If no llms.txt exists, name the three pages on https://example.com most worth listing first, based on what the domain and its likely traffic pages are.

OUTPUT
A table: Bot | Purpose (training / live search / both) | Allowed or Blocked | Deciding rule (quote the exact line) | One-line fix if blocked. Then the llms.txt verdict and, if missing, the three suggested first entries.

Customize

Optional — swap in your own details for the highlighted parts above.

Why this works

Robots.txt precedence is famously counter-intuitive: most site owners assume a blanket Disallow: / under User-agent: * blocks everything, when in fact a bot with its own explicit group is entirely unaffected by it, and ties within a group are broken by whichever path is longest, not whichever line comes first in the file. Forcing the model to walk through that reasoning explicitly before stating a verdict, rather than asserting a conclusion first, turns a guess into a checkable claim — and separating GPTBot (training) from OAI-SearchBot (live ChatGPT citations) surfaces the single most common self-inflicted AI-invisibility mistake, which is blocking the training bot on purpose while never noticing the search bot got blocked along with it, since the two are genuinely separate User-agent strings a site owner has to know to distinguish. The llms.txt reachability check matters for a reason that's easy to miss: a listed page that itself 404s or sits behind a robots.txt block is arguably worse than having no llms.txt at all, because it wastes a crawler's limited attention on a dead link and signals the file hasn't been maintained since whatever page it once pointed to changed — a file's mere existence isn't the thing that matters, its accuracy against the live site is.

What you get back

| Bot | Purpose | Status | Deciding rule | Fix | |---|---|---|---|---| | GPTBot | Training | Blocked | User-agent: GPTBot / Disallow: / | Remove or narrow the GPTBot-specific Disallow if training inclusion is wanted | | OAI-SearchBot | ChatGPT search citations | Allowed | No OAI-SearchBot-specific rule exists; falls through to User-agent: * which has no blanket Disallow | None needed | | PerplexityBot | Live answers | Allowed for /blog/, blocked elsewhere | User-agent: PerplexityBot / Allow: /blog/ wins over the same group's Disallow: / for that specific path (longest match) | Add Allow lines for other paths you want cited | No /llms.txt found. Suggested first three entries: /pricing, /blog, /docs.

Verified against

ChatGPT GPT-5.1 · 2026-07-22

Claude Claude Sonnet 4.5 · 2026-07-22

Changelog

  • 2026-07-22 Initial publish. Added the explicit "quote the deciding line and show the reasoning first" instruction after testing showed models will otherwise state a verdict without actually checking group-specificity or path-length precedence.
Pairs with our free AI Visibility Checker — no signup, runs in your browser.

Building this for real?

This is a free starting point. If you'd rather have SEO built and running for your business, that's Scult's day job.

EXPLORE SEO
All SEO & GEO/AEO prompts

Check your AI visibility

One URL in, a 0–100 score and the exact fixes out.

RUN THE CHECK

Browse all the tools

15 tools across six categories
13 of them never send your data anywhere

Free · No signup · No trial clock

SEE THE DIRECTORY