All 51 tests
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 test in the AI Readiness Index, the same list a Primary Indicators scan or a Scan of your own site is measured against. Open any row for why it matters.
Grouped into nine dimensions, worth 100 points, so a fix that matters more counts for more. The Primary Indicators scan runs 13 of these on a single page, free — the Full scan runs all 51 across your site, also free. The ninth, Unscored Leading Indicators, holds the 7 tests marked Not scored: run and reported like every other test, but for a practice with essentially no adoption yet, so scoring it would subtract the same points from every site and move nobody relative to anybody. It's worth 0 of the 100 until that changes.
How the points add up, and where they round
Each test scores a band from 0 to 4. What it contributes is its weight times its band, divided by four — so a test worth 2 at band 3 contributes exactly 1.5 points. Your score is every contribution added at full precision, divided by the 100 points above, and rounded once at the end.
Every points figure we show you is a whole number, because a report is meant to be read out loud and nobody argues about three quarters of a point. That means the rows on a report will not add up to the score on it — roughly a third of them round up or down to get there. Both figures are right, and the score is always computed from the exact ones, never from the rounded ones.
You never have to take that on trust. Every full report links to its own full accounting: every test, its band, the arithmetic written out, and the final division, with nothing rounded.
Primary Indicators
AIR-1.1 5 PTS Can AI crawlers reach your site?
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.
AIR-1.2 5 PTS Does your CDN let AI crawlers through?
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.
AIR-1.3 1 PT Is your page readable without a security challenge?
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.
AIR-1.4 3 PTS Have you stated what AI may do with your content?
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.
AIR-1.5 1 PT Can a person read your AI policy?
A few plain sentences in robots.txt saying what you permit. Journalists and lawyers read this file, and most sites say nothing in it.
AIR-1.6 1 PT Are you allowing assistants to quote you?
Old settings that told search engines not to show an excerpt also stop an assistant quoting your page in an answer.
AIR-1.7 2 PTS Does this page declare its real address?
A canonical link names the true address of a page. Without one, the same content reads as several competing pages.
AIR-1.8 2 PTS Is your page structured so a machine can follow it?
Meaningful elements rather than an undifferentiated wall of containers. It is the difference between a document and a soup of boxes.
AIR-1.9 2 PTS Do your headings tell a clear story?
One main heading, then sub-headings in order. Assistants use headings to work out which part of a page answers a question.
AIR-1.10 2 PTS Do you publish a guide for AI assistants?
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.
AIR-1.11 2 PTS Can a machine tell what your organization is?
Structured data that links together — your organization, your site, this page — rather than a scattering of disconnected labels.
AIR-1.12 2 PTS Can a machine be certain it is you?
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.
AIR-1.13 2 PTS Can a machine find out who you are?
Founding date, leadership, address, contact details, legal identifiers. Thin About pages are the most common weakness we see.
Rendering and Extraction
AIR-2.1 6 PTS 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.
AIR-2.2 3 PTS 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.
AIR-2.3 2 PTS 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.
AIR-2.4 2 PTS 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.
AIR-2.5 1 PT 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.
AIR-2.6 1 PT 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.
Structured Data and the Entity Graph
AIR-3.1 2 PTS 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.
AIR-3.2 2 PTS 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.
AIR-3.3 4 PTS Vertical-specific schema types
Use the types that match what you actually publish — courses, programs, clinicians, grants — rather than a generic WebPage on everything.
AIR-3.4 2 PTS 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.
AIR-3.5 1 PT 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.
AIR-3.6 1 PT 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.
AIR-3.7 1 PT 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.
AIR-3.8 2 PTS Schema validation of the structured data on the page
Markup that does not parse, or that leaves out what its type needs, is served to machines that cannot use it — and nothing on the page says so.
Crawl, Index and Licensing Hygiene
AIR-4.1 1 PT RSL licensing document published and referenced
Machine-readable licensing terms, so an AI company can find out what you allow without emailing you first.
AIR-4.2 1 PT 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.
AIR-4.3 1 PT 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.
AIR-4.4 1 PT 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.
AIR-4.5 1 PT 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.
AIR-4.6 1 PT Redirects resolve in a single hop
Every extra redirect is another chance to be dropped. One hop, straight to the destination.
AIR-4.7 2 PTS 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.
AIR-4.8 2 PTS 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.
AIR-4.9 1 PT 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.
AIR-4.10 1 PT Paginated series are coherently signaled
Page two and everything after it has to be reachable by something that does not click.
Authorship, Provenance, Freshness
AIR-5.1 2 PTS 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.
AIR-5.2 2 PTS 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.
AIR-5.3 2 PTS 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.
AIR-5.4 2 PTS 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.
AIR-5.5 2 PTS 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.
AIR-5.6 2 PTS 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.
Agent Interfaces
AIR-6.1 2 PTS 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.
AIR-6.2 2 PTS /.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.
AIR-6.3 2 PTS 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.
AIR-6.4 2 PTS 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.
Alternate Representations
AIR-7.1 2 PTS 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.
AIR-7.2 2 PTS 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.
AIR-7.3 2 PTS 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.
AIR-7.4 2 PTS 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.
Leading indicators
Practices with essentially no adoption yet. Measured and reported so you can see them; unscored, because scoring something nobody has adopted takes the same points from everybody and moves nobody relative to anybody.
LI-1 0 PTS HowTo on procedural content NOT SCORED
Steps marked as steps, so a model does not have to infer the sequence from prose and get it wrong.
LI-2 0 PTS speakable on summaries and ledes NOT SCORED
Flag your own best short answer — the lede, the summary — so an assistant reads that rather than guessing at a paragraph.
LI-3 0 PTS IndexNow fires on publish and update NOT SCORED
Tell search engines the moment something changes, rather than waiting to be crawled again.
LI-4 0 PTS Editorial policy page referenced via publishingPrinciples NOT SCORED
Document how your content is produced, reviewed, corrected and funded — then point at that page from your markup.
LI-5 0 PTS NLWeb endpoint exposed as an MCP server with an ask method NOT SCORED
A natural-language endpoint over your own structured data, so an assistant can ask your site a question instead of scraping around it.
LI-6 0 PTS Domain MCP server over real content APIs NOT SCORED
Your course catalog, provider directory or grant database, callable as documented tools rather than scraped out of a search results page.
LI-7 0 PTS /llms-full.txt where full-text inclusion is appropriate NOT SCORED
The expanded variant, with the text inline. Worth it when your content is small enough to ship whole.
Best practices
Real work, worth doing, and invisible to a scan. Whether a channel group exists in your analytics or a build validates before it merges cannot be seen from outside, so these are guidance rather than points.
BP-1 0 PTS Critical flows complete without JS-only interactions NOT SCORED
Register, donate, apply, find a clinician — these should complete through ordinary form submissions and real URLs, not only through clicks.
BP-2 0 PTS Stable selectors on critical-flow elements NOT SCORED
Hashed class names change on every build. An agent that found your Apply button yesterday cannot find it today.
BP-3 0 PTS GA4 channel group for AI assistant referrers NOT SCORED
Traffic from ChatGPT, Perplexity, Claude and the rest lands in Direct by default, where it disappears. A channel group makes it countable.
BP-4 0 PTS Server-side tagging captures stripped referrers NOT SCORED
Some assistants strip the referrer before the browser sees it. Server-side tagging catches what the client-side tag cannot.
BP-5 0 PTS Access log retention with a queryable store NOT SCORED
Crawler logs have to survive long enough to show a before and an after. Many hosts discard them in days.
BP-6 0 PTS Scheduled AI crawler activity report NOT SCORED
Watch crawler behavior continuously rather than auditing it once. A crawler that stops appearing usually means somebody reintroduced a block.
BP-7 0 PTS Fixed prompt panel run monthly across models NOT SCORED
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.
BP-8 0 PTS Extraction-fidelity baseline captured NOT SCORED
Feed your page to a model, ask it your key questions, and score the answers. Then do it again after the fixes and compare.
BP-9 0 PTS Search Console and Bing Webmaster Tools verified NOT SCORED
Verify both. Bing matters more than its search share suggests, because its index feeds several AI products.
Is your site ready for AI?
Scan a page, get a number you can verify. Free.