AI Readiness Index
All 68 checks
AI assistants now answer the questions a search box used to. They can only quote, cite or recommend what they can actually find, read and trust — and most sites were never built with that in mind. This is the full list of what that takes: every check in the AI Readiness Index, the same list a Quick scan or a Full scan of your own site is measured against.
They're grouped into eight dimensions and weighted to 100 points, so a fix that matters more counts for more. Dimensions 1, 3 and 5 alone carry 62.0 of the 100 points — access, extraction and entity identity decide whether anything else is worth doing. The Quick scan checks the 13 marked below on a single page, free — the Full scan runs all 68 across your site, also free. Open any row for why it matters.
1 · Retrievability and rights · 20%
10 checks| Expand | Check | Question | |
|---|---|---|---|
|
|
AR-1.1 | Can AI crawlers reach your site? | Quick scan |
|
Your robots.txt tells crawlers what they may read. One stale line, often copied from an old template, can shut out the assistants people now use to find you. Why it matters, from somebody other than us: OpenAI — Overview of OpenAI crawlers |
|||
|
|
AR-1.2 | Does your CDN let AI crawlers through? | Quick scan |
|
Even when robots.txt says yes, a firewall or bot rule can turn assistants away before they reach a page. We ask as each crawler and record what comes back. Why it matters, from somebody other than us: Cloudflare — AI Crawl Control |
|||
|
|
AR-1.3 | Is your page readable without a security challenge? | Quick scan |
|
A CAPTCHA or bot check on an ordinary page stops an assistant at the door. Those belong on forms and logins, not on pages anyone can read. Why it matters, from somebody other than us: Google Search Central — HTTP status codes and network errors |
|||
|
|
AR-1.4 | Have you stated what AI may do with your content? | Quick scan |
|
A machine-readable line in robots.txt saying whether AI may search, quote or train on your content. Having a stated position — any position — is the point. Why it matters, from somebody other than us: Content Signals Policy |
|||
|
|
AR-1.5 | Can a person read your AI policy? | Quick scan |
|
A few plain sentences in robots.txt saying what you permit. Journalists and lawyers read this file, and most sites say nothing in it. Why it matters, from somebody other than us: RFC 9309 — Robots Exclusion Protocol |
|||
|
|
AR-1.6 | RSL licensing document published and referenced | |
|
Machine-readable licensing terms, so an AI company can find out what you allow without emailing you first. Why it matters, from somebody other than us: Really Simple Licensing (RSL) |
|||
|
|
AR-1.7 | RSL terms propagated to feeds and schema | |
|
Licensing that travels with the content — in your feeds and your structured data, not only in one file nobody fetches. Why it matters, from somebody other than us: Really Simple Licensing (RSL) |
|||
|
|
AR-1.8 | Web Bot Auth verification configured | |
|
Verified agents get through and unsigned scrapers claiming to be them do not, because the edge checks a signature instead of trusting a user-agent string. Why it matters, from somebody other than us: IETF — Web Bot Auth architecture |
|||
|
|
AR-1.9 | Correct X-Robots-Tag on non-HTML resources | |
|
PDFs, images and JSON cannot carry a meta robots tag, so the directive has to travel in the HTTP header instead. Why it matters, from somebody other than us: Google Search Central — Robots meta tag and X-Robots-Tag |
|||
|
|
AR-1.10 | Are you allowing assistants to quote you? | Quick scan |
|
Old settings that told search engines not to show an excerpt also stop an assistant quoting your page in an answer. Why it matters, from somebody other than us: Google Search Central — Robots meta tag and X-Robots-Tag |
|||
2 · Crawl and index hygiene · 12%
8 checks| Expand | Check | Question | |
|---|---|---|---|
|
|
AR-2.1 | Missing pages return 404 or 410 | |
|
A missing page that answers 200 OK teaches a crawler that nothing is ever missing, and spends its time on pages that are not there. Why it matters, from somebody other than us: Google Search Central — Soft 404 errors |
|||
|
|
AR-2.2 | Redirects resolve in a single hop | |
|
Every extra redirect is another chance to be dropped. One hop, straight to the destination. Why it matters, from somebody other than us: Google Search Central — Redirects and Google Search |
|||
|
|
AR-2.3 | Does this page declare its real address? | Quick scan |
|
A canonical link names the true address of a page. Without one, the same content reads as several competing pages. Why it matters, from somebody other than us: Google Search Central — Canonicalization |
|||
|
|
AR-2.4 | Faceted, calendar, and parameterized URLs are controlled | |
|
Filters and calendars can generate millions of URLs. A crawler spends its budget in there instead of on the pages you care about. Why it matters, from somebody other than us: Google Search Central — Faceted navigation |
|||
|
|
AR-2.5 | Sitemap lastmod reflects real content changes | |
|
A lastmod date should mean the content changed, not that you deployed. Once it is noise, crawlers stop trusting it. Why it matters, from somebody other than us: Sitemaps XML protocol |
|||
|
|
AR-2.6 | Sitemap index split by type, with media sitemaps | |
|
Separate sitemaps per content type turn “coverage is bad” into “coverage is bad for news,” which is a problem somebody can fix. Why it matters, from somebody other than us: Google Search Central — Build and submit a sitemap |
|||
|
|
AR-2.7 | Paginated series are coherently signaled | |
|
Page two and everything after it has to be reachable by something that does not click. Why it matters, from somebody other than us: Google Search Central — Pagination and incremental page loading |
|||
|
|
AR-2.8 | IndexNow fires on publish and update | |
|
Tell search engines the moment something changes, rather than waiting to be crawled again. Why it matters, from somebody other than us: IndexNow documentation |
|||
3 · Rendering and extraction · 20%
8 checks| Expand | Check | Question | |
|---|---|---|---|
|
|
AR-3.1 | Primary content is present without JavaScript | |
|
If your content only appears after JavaScript runs, a crawler that does not run it sees an empty page. This is the heaviest check in the Index. Why it matters, from somebody other than us: Google Search Central — JavaScript SEO basics |
|||
|
|
AR-3.2 | Progressive disclosure content ships in the initial HTML | |
|
Tabs and accordions are fine, as long as the text is already in the HTML before anybody clicks. Why it matters, from somebody other than us: Google Search Central — JavaScript SEO basics |
|||
|
|
AR-3.3 | Is your page structured so a machine can follow it? | Quick scan |
|
Meaningful elements rather than an undifferentiated wall of containers. It is the difference between a document and a soup of boxes. Why it matters, from somebody other than us: W3C WAI — Page structure tutorial |
|||
|
|
AR-3.4 | Do your headings tell a clear story? | Quick scan |
|
One main heading, then sub-headings in order. Assistants use headings to work out which part of a page answers a question. Why it matters, from somebody other than us: W3C WAI — Headings |
|||
|
|
AR-3.5 | Real data tables with header cells | |
|
Tuition, hours, fees, comparisons — in a real table with header cells, not an image and not a grid of divs. Why it matters, from somebody other than us: W3C WAI — Tables tutorial |
|||
|
|
AR-3.6 | Stable, human-readable anchor IDs on section headings | |
|
Stable IDs on your headings let a model cite the exact passage rather than the whole page. Why it matters, from somebody other than us: WHATWG HTML — The id attribute |
|||
|
|
AR-3.7 | Alt text on content images, empty alt on decorative | |
|
Alt text is the only text an image has. Decorative images should say so with an empty alt rather than describing themselves. Why it matters, from somebody other than us: W3C WAI — Alt decision tree |
|||
|
|
AR-3.8 | Key facts exist as HTML text, not only in images or PDFs | |
|
A fact locked inside a PDF, a scan or an infographic is a fact an assistant cannot quote. Why it matters, from somebody other than us: W3C WAI — Images of text |
|||
4 · Alternate representations · 8%
6 checks| Expand | Check | Question | |
|---|---|---|---|
|
|
AR-4.1 | Do you publish a guide for AI assistants? | Quick scan |
|
A file at /llms.txt listing your most important pages. It is early and cheap, and it forces a useful conversation about what actually matters on your site. Why it matters, from somebody other than us: The llms.txt proposal |
|||
|
|
AR-4.2 | /llms-full.txt where full-text inclusion is appropriate | |
|
The expanded variant, with the text inline. Worth it when your content is small enough to ship whole. Why it matters, from somebody other than us: The llms.txt proposal |
|||
|
|
AR-4.3 | Markdown companion for every canonical page | |
|
A clean Markdown version of each page: none of the navigation, none of the markup a model has to wade through to reach your words. Why it matters, from somebody other than us: RFC 7763 — The text/markdown media type |
|||
|
|
AR-4.4 | link rel=alternate advertises the Markdown version | |
|
Publishing the Markdown is not enough. The HTML page has to point at it, or nothing will ever find it. Why it matters, from somebody other than us: RFC 8288 — Web Linking |
|||
|
|
AR-4.5 | Accept: text/markdown content negotiation | |
|
Ask the same URL for Markdown and get Markdown back. One address, two representations, no second set of links to maintain. Why it matters, from somebody other than us: RFC 9110 — HTTP Semantics, content negotiation |
|||
|
|
AR-4.6 | Alternate representations are edge-cached | |
|
Generated representations should come from the CDN. Otherwise every request rebuilds them at origin, and you will turn them off when the bill arrives. Why it matters, from somebody other than us: Cloudflare — Cache concepts |
|||
5 · Structured data and the entity graph · 22%
12 checks| Expand | Check | Question | |
|---|---|---|---|
|
|
AR-5.1 | JSON-LD is generated from mapped fields, not hardcoded | |
|
Schema generated from your content model survives the next content change. Hardcoded schema rots quietly and nobody notices for a year. Why it matters, from somebody other than us: Google Search Central — Introduction to structured data |
|||
|
|
AR-5.2 | Can a machine tell what your organization is? | Quick scan |
|
Structured data that links together — your organization, your site, this page — rather than a scattering of disconnected labels. Why it matters, from somebody other than us: JSON-LD |
|||
|
|
AR-5.3 | Can a machine be certain it is you? | Quick scan |
|
Links from your markup to authoritative records like Wikidata or ROR. Without one, an assistant is guessing which organization of your name it has found. Why it matters, from somebody other than us: Schema.org — sameAs |
|||
|
|
AR-5.4 | BreadcrumbList on every page below the homepage | |
|
Every page below the homepage should declare where it sits, so a model knows a program page belongs to a department. Why it matters, from somebody other than us: Google Search Central — Breadcrumb structured data |
|||
|
|
AR-5.5 | Vertical-specific schema types | |
|
Use the types that match what you actually publish — courses, programs, clinicians, grants — rather than a generic WebPage on everything. Why it matters, from somebody other than us: Google Search Central — Structured data gallery |
|||
|
|
AR-5.6 | FAQPage and QAPage on genuine question-and-answer content | |
|
Mark up real questions and answers. Do not invent an FAQ block that is not on the page: fabricated markup is a policy problem, not a shortcut. Why it matters, from somebody other than us: Google Search Central — FAQ structured data |
|||
|
|
AR-5.7 | HowTo on procedural content | |
|
Steps marked as steps, so a model does not have to infer the sequence from prose and get it wrong. Why it matters, from somebody other than us: Schema.org — HowTo |
|||
|
|
AR-5.8 | speakable on summaries and ledes | |
|
Flag your own best short answer — the lede, the summary — so an assistant reads that rather than guessing at a paragraph. Why it matters, from somebody other than us: Schema.org — speakable |
|||
|
|
AR-5.9 | isAccessibleForFree, about, and mentions with entity references | |
|
Say whether the page is free to read, and link the entities it is actually about. Both are things an assistant would otherwise have to assume. Why it matters, from somebody other than us: Schema.org — isAccessibleForFree |
|||
|
|
AR-5.10 | Product, Offer, and Service with real prices | |
|
Prices and offers in markup, and current. A stale price in structured data is worse than no price at all. Why it matters, from somebody other than us: Google Search Central — Product structured data |
|||
|
|
AR-5.11 | SearchAction on the WebSite node | |
|
Expose your site search as a pattern an agent can call, instead of a box only a human can type into. Why it matters, from somebody other than us: Google Search Central — Sitelinks search box |
|||
|
|
AR-5.12 | Schema validation runs in CI | |
|
Broken markup should fail your build rather than reach production and sit there until the next audit. Why it matters, from somebody other than us: Schema Markup Validator |
|||
6 · Authorship, provenance, freshness · 10%
8 checks| Expand | Check | Question | |
|---|---|---|---|
|
|
AR-6.1 | Author entity pages with credentials | |
|
Authors who resolve to real people with real credentials, on pages of their own — not a name in a byline and nothing behind it. Why it matters, from somebody other than us: Google Search Central — Creating helpful, reliable content |
|||
|
|
AR-6.2 | Bylines linked to author entities | |
|
Sign substantive pages, and point the byline at the author's entity rather than repeating their name as text on every article. Why it matters, from somebody other than us: Schema.org — author |
|||
|
|
AR-6.3 | reviewedBy on YMYL content | |
|
Health, legal and financial pages should name their reviewer in the markup, not only in the design where a machine cannot see it. Why it matters, from somebody other than us: Schema.org — reviewedBy |
|||
|
|
AR-6.4 | datePublished and dateModified are accurate | |
|
A modified date that changes on every deploy is not a freshness signal. It is noise, and it costs you the trust of the real one. Why it matters, from somebody other than us: Google Search Central — Article structured data |
|||
|
|
AR-6.5 | citation markup on primary-source references | |
|
Where you cite a primary source, make the citation machine-readable so the chain from claim to evidence survives. Why it matters, from somebody other than us: Schema.org — citation |
|||
|
|
AR-6.6 | C2PA Content Credentials on original assets | |
|
Provenance that survives into the delivered file, so an image can prove where it came from after somebody else has reposted it. Why it matters, from somebody other than us: C2PA — Content Credentials |
|||
|
|
AR-6.7 | Editorial policy page referenced via publishingPrinciples | |
|
Document how your content is produced, reviewed, corrected and funded — then point at that page from your markup. Why it matters, from somebody other than us: Schema.org — publishingPrinciples |
|||
|
|
AR-6.8 | Can a machine find out who you are? | Quick scan |
|
Founding date, leadership, address, contact details, legal identifiers. Thin About pages are the most common weakness we see. Why it matters, from somebody other than us: Schema.org — Organization |
|||
7 · Agent interfaces · 5%
9 checks| Expand | Check | Question | |
|---|---|---|---|
|
|
AR-7.1 | NLWeb endpoint over the site's schema.org data | |
|
A natural-language endpoint over your own structured data, so an assistant can ask your site a question instead of scraping around it. Why it matters, from somebody other than us: NLWeb |
|||
|
|
AR-7.2 | NLWeb exposed as an MCP server with an ask method | |
|
The same endpoint, exposed the way agents already know how to call things. Why it matters, from somebody other than us: Model Context Protocol |
|||
|
|
AR-7.3 | Domain MCP server over real content APIs | |
|
Your course catalog, provider directory or grant database, callable as documented tools rather than scraped out of a search results page. Why it matters, from somebody other than us: Model Context Protocol |
|||
|
|
AR-7.4 | OpenAPI specification for public APIs | |
|
If you have a public API, describe it in a spec an agent can read, and version it so today's answer is still true next quarter. Why it matters, from somebody other than us: OpenAPI Specification |
|||
|
|
AR-7.5 | /.well-known/ discovery entries for agent capabilities | |
|
Put your agent capabilities where agents look for them, rather than in a URL somebody has to be told about. Why it matters, from somebody other than us: IANA — Well-Known URIs registry |
|||
|
|
AR-7.6 | Form fields carry label, name, and autocomplete | |
|
An agent filling in your form has to know what each field is for. Labels, names and autocomplete tokens are how it finds out. Why it matters, from somebody other than us: W3C WAI — Labeling controls |
|||
|
|
AR-7.7 | No captchas on browse, search, or filter interactions | |
|
Challenge the actions that need challenging. Searching and filtering are not those actions, and a captcha there ends the visit. Why it matters, from somebody other than us: W3C — Inaccessibility of CAPTCHA |
|||
|
|
AR-7.8 | Critical flows complete without JS-only interactions | |
|
Register, donate, apply, find a clinician — these should complete through ordinary form submissions and real URLs, not only through clicks. Why it matters, from somebody other than us: W3C WAI — Forms tutorial |
|||
|
|
AR-7.9 | Stable selectors on critical-flow elements | |
|
Hashed class names change on every build. An agent that found your Apply button yesterday cannot find it today. Why it matters, from somebody other than us: WHATWG HTML — data-* attributes |
|||
8 · Measurement and instrumentation · 3%
7 checks| Expand | Check | Question | |
|---|---|---|---|
|
|
AR-8.1 | GA4 channel group for AI assistant referrers | |
|
Traffic from ChatGPT, Perplexity, Claude and the rest lands in Direct by default, where it disappears. A channel group makes it countable. Why it matters, from somebody other than us: Google Analytics — Default channel groups |
|||
|
|
AR-8.2 | Server-side tagging captures stripped referrers | |
|
Some assistants strip the referrer before the browser sees it. Server-side tagging catches what the client-side tag cannot. Why it matters, from somebody other than us: Google — Server-side tagging |
|||
|
|
AR-8.3 | Access log retention with a queryable store | |
|
Crawler logs have to survive long enough to show a before and an after. Many hosts discard them in days. Why it matters, from somebody other than us: Cloudflare — Logs |
|||
|
|
AR-8.4 | Scheduled AI crawler activity report | |
|
Watch crawler behavior continuously rather than auditing it once. A crawler that stops appearing usually means somebody reintroduced a block. Why it matters, from somebody other than us: Google Search Console — Crawl stats report |
|||
|
|
AR-8.5 | Fixed prompt panel run monthly across models | |
|
Ask the same questions of the same models every month. It is the only way to see whether your share of the answers is moving. Why it matters, from somebody other than us: Google Search Central — AI features and your website |
|||
|
|
AR-8.6 | Extraction-fidelity baseline captured | |
|
Feed your page to a model, ask it your key questions, and score the answers. Then do it again after the fixes and compare. Why it matters, from somebody other than us: Google Search Central — AI features and your website |
|||
|
|
AR-8.7 | Search Console and Bing Webmaster Tools verified | |
|
Verify both. Bing matters more than its search share suggests, because its index feeds several AI products. Why it matters, from somebody other than us: Bing Webmaster Tools |
|||
Want to see where your own site lands? Run the Quick scan.