How to Check If Your Site Is AI Ready
AI crawlers read your robots.txt before they read your content. Here is what they fetch, which of them matter, and how to check your site by hand.
On this page
What AI Crawlers Actually Fetch
"AI ready" sounds like a property of your content. In practice the first half of it is a property of four files, three of which most people never look at, and the order they are read in is what decides whether your content is ever considered at all.
An AI system that wants your page resolves /robots.txt at your origin before it requests the page. If the rules there name its user-agent token and disallow the path, it stops, and nothing about your headings or your schema markup matters. If they do not, it fetches the page and reads the HTML. Separately, index-building crawlers look for /sitemap.xml to find pages nobody linked them to, and some coding agents look for /llms.txt.
That is exactly the fetch set our own AI-readiness analysis makes, and it is worth knowing precisely because it tells you where to look. A free check costs five requests: the page itself, two parallel HEAD requests for /sitemap.xml and /sitemap_index.xml, one for /robots.txt, and one for /llms.txt. In a full audit the page HTML is already in hand from another analyzer, so only the last four run.
The consequence people miss: three of those four are looked up at your domain root, not at the URL you are checking. Your robots.txt, your sitemap and your llms.txt describe the whole origin. Only the structured data and the heading outline belong to the individual page. A crawler map is therefore a fact about your domain, and you do not need to check it page by page.
How to Check Your Site, Step by Step
Every step below is something you can do by hand with a browser and a text editor. Doing them in this order matters: a blocked crawler makes the remaining four checks academic, so start at the gate.
Step 1: Read your robots.txt the way a crawler does
Open https://yourdomain.com/robots.txt and read it under the rules of RFC 9309 rather than by eye. Four of those rules account for most of the surprises:
- A group that names a crawler shadows the
User-agent: *group completely for that crawler. It does not add to the wildcard rules, it replaces them — and a group that names the crawler and then lists no rules at all means everything is allowed. - Tokens match exactly, never as substrings.
ApplebotandApplebot-Extendedare two different crawlers with two different consequences, and a rule written for one has no effect on the other. - Among the rules that match a path, the longest one wins, and an
Allowbeats aDisallowof the same length. That is how a broadDisallow: /plus a narrowAllow: /blog/is meant to behave. - An empty
Disallow:means allow everything, and a crawler your file never mentions is allowed by default. Silence is permission.
Step 2: Check the crawlers that carry visibility, not just "AI bots"
There is no single AI crawler to check for. There are 22 tokens worth checking, and they do three different jobs with three different consequences — the roster below lists all of them with their operator. The ones that decide whether you can appear in an AI answer are the 7 search indexers and the 6 on-demand fetchers. Work through your robots.txt for each token in turn, or check the 6 that carry scored weight first if you are short of time.
The failure this catches is almost never a decision anybody made. It is a staging Disallow: / that shipped, a security plugin's "block AI scrapers" toggle that turned out to cover the search indexers too, or a rule written against one user-agent string that caught four.
Step 3: Confirm your sitemap answers at the origin
Request /sitemap.xml and, if that 404s, /sitemap_index.xml. What you are checking is not whether a sitemap exists in your CMS but whether one answers at a conventional path with a 2xx, because that is all a crawler that has never seen your site can try. A sitemap declared only inside robots.txt at some unconventional path is found by Google and missed by plenty of things that are not Google.
Step 4: Read what the page declares about itself
View source and look for <script type="application/ld+json">. Structured data is how a page states what it is instead of leaving a model to infer it: an Organization block naming the publisher, a logo property, a FAQPage or a HowTo where the content genuinely is that shape. A page with no JSON-LD is not unreadable. It is unlabelled, which means every fact a schema block would have stated has to be guessed from prose.
Step 5: Read your heading outline on its own
Strip everything but the h1 to h6 elements and read what is left. One h1, then levels that descend one at a time. A heading outline is the closest thing a page has to a table of contents for a machine, and the passage a model quotes is usually the one whose heading told it what question that passage answers.
Step 6: Re-check after anything touches robots.txt
This is the step that makes the other five worth doing. A blocked search indexer produces no error, no warning and no report anywhere: your pages are not demoted in AI answers, they are absent from them, and everything looks normal from the inside. Deploys, WAF rule changes, CDN bot-protection defaults and security plugin updates all edit this surface. Check after each one.
Our free AI visibility checker does steps 1 through 5 in a single request, with no account, and shows every crawler's status rather than a verdict. Step 6 is still yours.
The 22 AI Crawlers Worth Checking
Every crawler below sits in the category its own operator documents for it, and the roster cites that documentation in the source. Nothing is added on a third-party list's authority, which is why some tokens you will find on aggregator sites are missing from it. The Points column is our AI-readiness score, and it is per crawler rather than per category: 6 of the 22 move it, together carrying 8 points.
AI search indexing (7)
Build the indexes behind AI answers — blocking these removes the site from AI search results and citations.
| Crawler | Operator | Points |
|---|---|---|
| OAI-SearchBot | OpenAI | 2 of 8 |
| Claude-SearchBot | Anthropic | 1 of 8 |
| PerplexityBot | Perplexity | 2 of 8 |
| Applebot | Apple | Reported, not scored |
| Amzn-SearchBot | Amazon | Reported, not scored |
| MistralAI-Index | Mistral | Reported, not scored |
| DuckAssistBot | DuckDuckGo | Reported, not scored |
On-demand assistant access (6)
Fetch pages live when a user asks an AI assistant about the site.
| Crawler | Operator | Points |
|---|---|---|
| ChatGPT-User | OpenAI | 1 of 8 |
| Claude-User | Anthropic | 1 of 8 |
| Perplexity-User | Perplexity | 1 of 8 |
| Amzn-User | Amazon | Reported, not scored |
| MistralAI-User | Mistral | Reported, not scored |
| Meta-ExternalFetcher | Meta | Reported, not scored |
Model training (9)
Collect content for AI model training. Blocking these is a policy choice and does not affect AI search visibility (not scored).
| Crawler | Operator | Points |
|---|---|---|
| GPTBot | OpenAI | Reported, not scored |
| ClaudeBot | Anthropic | Reported, not scored |
| Google-Extended | Reported, not scored | |
| Applebot-Extended | Apple | Reported, not scored |
| Meta-ExternalAgent | Meta | Reported, not scored |
| CCBot | Common Crawl | Reported, not scored |
| Bytespider | ByteDance | Reported, not scored |
| Amazonbot | Amazon | Reported, not scored |
| MistralAI-Training | Mistral | Reported, not scored |
One legacy detail worth keeping: rules written for claude-web or anthropic-ai still count as rules for ClaudeBot. Those tokens are retired, but they are in a great many robots.txt files, and a site that blocked them meant to block ClaudeBot — so we merge them rather than report an allow that would not survive contact with reality.
Deliberately absent: OAI-AdsBot, which validates pages submitted as ChatGPT ads rather than building an answer surface; Google-CloudVertexBot, which crawls only what a site owner asks it to for their own Vertex AI agents; and xAI or Grok tokens, for which no operator crawler-documentation page exists to cite. Adding a token we cannot source would make the map look more complete and be less true.
Why Training and Search Crawlers Are Scored Differently
A tool that answers "are you blocking AI?" with one verdict is worse than useless, because the most common deliberate posture in 2026 is to block some of it on purpose. Plenty of publishers Disallow GPTBot while allowing OAI-SearchBot: no content for training, full participation in AI search. That is a coherent content-policy position, and grading it as a defect would tell someone who made a considered decision that they had made a mistake.
So the 9 model-training crawlers are checked, reported, and never scored. Blocking one costs you nothing in our score and, as far as anyone can measure, nothing in AI search visibility. Our own AI recommendations never advise unblocking them either.
What is scored is the 8 points spread across 6 crawlers, inside a 20-point crawlability block that also gives 8 points for a reachable sitemap and 4 for a robots.txt that answers at all. Those 6 are the search indexers and on-demand fetchers whose operators are answering questions at scale today.
Two consequences of scoring per crawler rather than per category are worth stating plainly. First, a crawler can sit in a scored category and still be reported only: Amazonbot is checked and shown, and blocking it costs nothing, because Amazon moved the visibility-relevant work to Amzn-SearchBot and Amzn-User and documents Amazonbot itself as possibly feeding model training. Second, only an explicit block withholds points. A crawler your robots.txt has never heard of scores exactly the same as one you deliberately allowed, because under RFC 9309 those two states mean the same thing to the crawler.
Where llms.txt Actually Fits
/llms.txt is a proposed markdown file that tells a language model what a site contains and where its documentation lives. We check for it, we show whether you have one, and we do not score it. That last part is the useful bit, so here is the reasoning rather than just the position.
Adoption sits at roughly 10% of sites. Log studies covering hundreds of millions of AI bot visits found effectively no AI search crawler fetching the file, and Google has said Search does not support it. A checker that docked you points for not having one would be selling you a file that the systems you care about do not read.
It does get fetched, though, and by a specific audience: AI coding agents. Cursor, Claude Code, Copilot and their peers routinely pull llms.txt on documentation sites. If developers integrate with your product, that is a real reason to ship one — just not a ranking reason. Google's Lighthouse has since promoted its Agentic Browsing category, including an llms-txt audit, into PageSpeed Insights' default configuration; measured against a live run, that audit passes when the file exists and reports not-applicable when it does not, so even Google's own tooling does not penalise its absence.
If that changes, the stance changes. It is a judgement about current crawler behaviour, not a principle, and it is written down so it can be revisited rather than quietly assumed.
How This Differs From a Traditional SEO Audit
The overlap is real and worth saying first: a reachable sitemap, a clean heading outline, structured data and readable text serve both audiences. An AI-readiness check is not a replacement for an SEO audit, and a site that is genuinely good at one is usually not terrible at the other. Four things are genuinely different.
The gatekeeper file is read 22 times, not once. An SEO audit checks robots.txt for Googlebot and Bingbot, where the question is binary and the answer is almost always yes. AI readiness reads the same file for 22 tokens whose consequences differ by category, and where blocking some of them is correct. Most of the findings live in that difference.
There is no position to lose, and no console to check. A ranking problem shows up as a number that moved, in a report someone publishes. Blocking a search indexer is not a demotion, it is an absence: there is no AI equivalent of Search Console telling you your impressions went to zero, because there is no impression to count. The failure is silent by construction, which is the entire reason to check for it on purpose.
Structured data is read for meaning, not for eligibility. In an SEO audit, schema markup is largely a gate on rich results: either you qualify for the star ratings or you do not. For a model, the same block is a set of stated facts about the page, and it is useful whether or not any search feature is attached to it.
Some fetches happen at question time. Search crawling is a background process whose results are read later. On-demand assistant fetchers work differently: they request your page at the moment somebody asks about it, often having been handed your URL directly. Block one and you have broken a read that the user explicitly asked for. There is no SEO analogue to that failure at all.
What an AI-readiness check does not tell you is equally worth being clear about. It cannot count citations, it cannot show you traffic from AI answers, and nobody can, because the systems involved do not publish either. Being fetchable, labelled and readable is necessary for being cited. It has never been sufficient, and a tool that promised otherwise would be guessing.
Next Steps
- Free AI visibility checker — run steps 1 to 5 against any URL in one request, with no account and no email.
- The 18 website audit checks we run — the GEO/AEO analyzer behind this page, plus the other 17 a full audit runs.
- Website audit scores explained — how an AI-readiness score sits alongside the other numbers on an audit.
- About our crawler — the user agent we send when you run a check, and how it honors robots.txt.