ReadinessIndex.io Logo, orange and white bar charts on a purple background
AI Readiness Index

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.

#1

Primary Indicators

13 tests · 30 points

AIR-1.1 5 PTS Can AI crawlers reach your site?
What we're measuring

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 this matters
OpenAI names its own crawlers here, so this is the one place to confirm which user agents robots.txt needs to address.
AIR-1.2 5 PTS Does your CDN let AI crawlers through?
What we're measuring

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 this matters
Cloudflare sits in front of a huge share of the web, so its own AI-crawler rules are what most sites actually enforce.
AIR-1.3 1 PT Is your page readable without a security challenge?
What we're measuring

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 this matters
Google publishes exactly which status codes and errors stop a crawler cold, straight from the team that builds the crawler.
AIR-1.4 3 PTS Have you stated what AI may do with your content?
What we're measuring

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 this matters
The standard itself, published by the group defining what a robots.txt AI-permission line actually means.
AIR-1.5 1 PT Can a person read your AI policy?
What we're measuring

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 this matters
The actual internet standard robots.txt follows, from the IETF working group that ratified it in 2022.
AIR-1.6 1 PT Are you allowing assistants to quote you?
What we're measuring

Old settings that told search engines not to show an excerpt also stop an assistant quoting your page in an answer.

Why this matters
The same reference explains how a leftover noarchive-style setting silently blocks an assistant from quoting your page.
AIR-1.7 2 PTS Does this page declare its real address?
What we're measuring

A canonical link names the true address of a page. Without one, the same content reads as several competing pages.

Why this matters
Google's explanation of canonical URLs, written for the exact crawler that decides which version of a page is real.
AIR-1.8 2 PTS Is your page structured so a machine can follow it?
What we're measuring

Meaningful elements rather than an undifferentiated wall of containers. It is the difference between a document and a soup of boxes.

Why this matters
The W3C's own accessibility tutorial on giving a page real structure, the same structure a machine parses too.
AIR-1.9 2 PTS Do your headings tell a clear story?
What we're measuring

One main heading, then sub-headings in order. Assistants use headings to work out which part of a page answers a question.

Why this matters
The W3C's guidance on heading order, written for screen readers but read the same way by an assistant.
AIR-1.10 2 PTS Do you publish a guide for AI assistants?
What we're measuring

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 this matters
The proposal's own site, from the person who coined the /llms.txt format this check looks for.
AIR-1.11 2 PTS Can a machine tell what your organization is?
What we're measuring

Structured data that links together — your organization, your site, this page — rather than a scattering of disconnected labels.

Why this matters
The JSON-LD specification's own site, the format nearly every structured-data check in this Index assumes.
AIR-1.12 2 PTS Can a machine be certain it is you?
What we're measuring

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 this matters
Schema.org's own definition of sameAs, the property that links your markup to an authoritative outside record.
AIR-1.13 2 PTS Can a machine find out who you are?
What we're measuring

Founding date, leadership, address, contact details, legal identifiers. Thin About pages are the most common weakness we see.

Why this matters
Schema.org's own Organization type, listing the founding date, address and identifiers a thin About page usually skips.
#2

Rendering and Extraction

6 tests · 15 points

AIR-2.1 6 PTS Primary content is present without JavaScript
What we're measuring

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 this matters
Google's own explanation of when its crawler renders JavaScript and when it gives up, from the company that built it.
AIR-2.2 3 PTS Progressive disclosure content ships in the initial HTML
What we're measuring

Tabs and accordions are fine, as long as the text is already in the HTML before anybody clicks.

Why this matters
The same guidance covers progressive disclosure — content that should already be in the HTML before anyone clicks.
AIR-2.3 2 PTS Real data tables with header cells
What we're measuring

Tuition, hours, fees, comparisons — in a real table with header cells, not an image and not a grid of divs.

Why this matters
The W3C's tutorial on real data tables, the format a machine can actually parse cell by cell.
AIR-2.4 2 PTS Stable, human-readable anchor IDs on section headings
What we're measuring

Stable IDs on your headings let a model cite the exact passage rather than the whole page.

Why this matters
The HTML living standard itself, defining the id attribute a stable anchor link depends on.
AIR-2.5 1 PT Alt text on content images, empty alt on decorative
What we're measuring

Alt text is the only text an image has. Decorative images should say so with an empty alt rather than describing themselves.

Why this matters
The W3C's own decision tree for when alt text is required and when an empty alt is correct.
AIR-2.6 1 PT Key facts exist as HTML text, not only in images or PDFs
What we're measuring

A fact locked inside a PDF, a scan or an infographic is a fact an assistant cannot quote.

Why this matters
The W3C's guidance on why a fact rendered as an image is invisible to anything that can't see.
#3

Structured Data and the Entity Graph

8 tests · 15 points

AIR-3.1 2 PTS JSON-LD is generated from mapped fields, not hardcoded
What we're measuring

Schema generated from your content model survives the next content change. Hardcoded schema rots quietly and nobody notices for a year.

Why this matters
Google's own introduction to structured data, from the company whose crawler actually consumes the markup.
AIR-3.2 2 PTS BreadcrumbList on every page below the homepage
What we're measuring

Every page below the homepage should declare where it sits, so a model knows a program page belongs to a department.

Why this matters
Google's own reference for breadcrumb markup, the property that tells a model where a page sits in your site.
AIR-3.3 4 PTS Vertical-specific schema types
What we're measuring

Use the types that match what you actually publish — courses, programs, clinicians, grants — rather than a generic WebPage on everything.

Why this matters
Google's full gallery of supported structured-data types, the closest thing to a menu of what to use instead of WebPage.
AIR-3.4 2 PTS FAQPage and QAPage on genuine question-and-answer content
What we're measuring

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 this matters
Google's own policy page on FAQ markup, including the warning against marking up questions nobody actually asked.
AIR-3.5 1 PT isAccessibleForFree, about, and mentions with entity references
What we're measuring

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 this matters
Schema.org's own definition of the property that tells a model whether it's allowed to read a page at all.
AIR-3.6 1 PT Product, Offer, and Service with real prices
What we're measuring

Prices and offers in markup, and current. A stale price in structured data is worse than no price at all.

Why this matters
Google's reference for product markup, including why a stale price is worse than no price to its own systems.
AIR-3.7 1 PT SearchAction on the WebSite node
What we're measuring

Expose your site search as a pattern an agent can call, instead of a box only a human can type into.

Why this matters
Google's own specification for exposing a site search as structured data an agent can call directly.
AIR-3.8 2 PTS Schema validation of the structured data on the page
What we're measuring

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.

Why this matters
The validator schema.org itself runs on submitted markup, and the same judgment this test makes on every page we sample.
#4

Crawl, Index and Licensing Hygiene

10 tests · 12 points

AIR-4.1 1 PT RSL licensing document published and referenced
What we're measuring

Machine-readable licensing terms, so an AI company can find out what you allow without emailing you first.

Why this matters
RSL's own specification defines the machine-readable licensing format this check looks for.
AIR-4.2 1 PT RSL terms propagated to feeds and schema
What we're measuring

Licensing that travels with the content — in your feeds and your structured data, not only in one file nobody fetches.

Why this matters
The same standard that defines the license file also defines how it travels with content in feeds and markup.
AIR-4.3 1 PT Web Bot Auth verification configured
What we're measuring

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 this matters
The IETF draft defining cryptographic bot verification, the mechanism this check is asking your edge to support.
AIR-4.4 1 PT Correct X-Robots-Tag on non-HTML resources
What we're measuring

PDFs, images and JSON cannot carry a meta robots tag, so the directive has to travel in the HTTP header instead.

Why this matters
Google's own documentation on the header that has to carry this directive when a file can't hold a meta tag.
AIR-4.5 1 PT Missing pages return 404 or 410
What we're measuring

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 this matters
Google defines a soft 404 as a page that should return a real error but returns 200 instead.
AIR-4.6 1 PT Redirects resolve in a single hop
What we're measuring

Every extra redirect is another chance to be dropped. One hop, straight to the destination.

Why this matters
Google's own guidance on redirect chains, from the crawler that has to follow every hop you add.
AIR-4.7 2 PTS Faceted, calendar, and parameterized URLs are controlled
What we're measuring

Filters and calendars can generate millions of URLs. A crawler spends its budget in there instead of on the pages you care about.

Why this matters
Google's own advice for the faceted-navigation problem, aimed at engineers whose crawl budget it actually spends.
AIR-4.8 2 PTS Sitemap lastmod reflects real content changes
What we're measuring

A lastmod date should mean the content changed, not that you deployed. Once it is noise, crawlers stop trusting it.

Why this matters
The sitemaps.org spec that defines lastmod, jointly backed by Google, Bing and Yahoo.
AIR-4.9 1 PT Sitemap index split by type, with media sitemaps
What we're measuring

Separate sitemaps per content type turn “coverage is bad” into “coverage is bad for news,” which is a problem somebody can fix.

Why this matters
Google's own instructions for splitting sitemaps by type, from the side that actually reads them.
AIR-4.10 1 PT Paginated series are coherently signaled
What we're measuring

Page two and everything after it has to be reachable by something that does not click.

Why this matters
Google's guidance on pagination and infinite scroll, written for the crawler that can't click a 'load more' button.
#5

Authorship, Provenance, Freshness

6 tests · 12 points

AIR-5.1 2 PTS Author entity pages with credentials
What we're measuring

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 this matters
Google's own guidance on why real, credentialed authorship is part of what it considers trustworthy content.
AIR-5.2 2 PTS Bylines linked to author entities
What we're measuring

Sign substantive pages, and point the byline at the author's entity rather than repeating their name as text on every article.

Why this matters
Schema.org's definition of the author property, and why it should point at an entity, not just a name string.
AIR-5.3 2 PTS reviewedBy on YMYL content
What we're measuring

Health, legal and financial pages should name their reviewer in the markup, not only in the design where a machine cannot see it.

Why this matters
Schema.org's own property for naming a reviewer in markup, not only in a design a machine can't read.
AIR-5.4 2 PTS datePublished and dateModified are accurate
What we're measuring

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 this matters
Google's reference for dateModified, including its own warning that a date changing on every deploy reads as noise.
AIR-5.5 2 PTS citation markup on primary-source references
What we're measuring

Where you cite a primary source, make the citation machine-readable so the chain from claim to evidence survives.

Why this matters
Schema.org's own definition of a machine-readable citation, the link between a claim and its primary source.
AIR-5.6 2 PTS C2PA Content Credentials on original assets
What we're measuring

Provenance that survives into the delivered file, so an image can prove where it came from after somebody else has reposted it.

Why this matters
The C2PA coalition's own standard for provenance that survives into the delivered file itself.
#6

Agent Interfaces

4 tests · 8 points

AIR-6.1 2 PTS OpenAPI specification for public APIs
What we're measuring

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 this matters
The OpenAPI Specification itself, the versioned format that keeps a described API's contract honest over time.
AIR-6.2 2 PTS /.well-known/ discovery entries for agent capabilities
What we're measuring

Put your agent capabilities where agents look for them, rather than in a URL somebody has to be told about.

Why this matters
IANA's own registry of well-known URIs, the standard location agents already check first.
AIR-6.3 2 PTS Form fields carry label, name, and autocomplete
What we're measuring

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 this matters
The W3C's tutorial on labeling form fields, written for assistive tech but read the same way by an agent.
AIR-6.4 2 PTS No captchas on browse, search, or filter interactions
What we're measuring

Challenge the actions that need challenging. Searching and filtering are not those actions, and a captcha there ends the visit.

Why this matters
The W3C's own working-group note on why CAPTCHA blocks more than it protects, and where it still belongs.
#7

Alternate Representations

4 tests · 8 points

AIR-7.1 2 PTS Markdown companion for every canonical page
What we're measuring

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 this matters
The IETF RFC that formally registered text/markdown as a media type in the first place.
AIR-7.2 2 PTS link rel=alternate advertises the Markdown version
What we're measuring

Publishing the Markdown is not enough. The HTML page has to point at it, or nothing will ever find it.

Why this matters
The RFC defining the Link header this check expects to point at a Markdown alternative.
AIR-7.3 2 PTS Accept: text/markdown content negotiation
What we're measuring

Ask the same URL for Markdown and get Markdown back. One address, two representations, no second set of links to maintain.

Why this matters
The current HTTP standard's own chapter on content negotiation, the mechanism Accept: text/markdown relies on.
AIR-7.4 2 PTS Alternate representations are edge-cached
What we're measuring

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 this matters
Cloudflare's own explanation of what it caches and why, from the CDN a generated page probably sits behind.

Leading indicators

7 items · not scored

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
What we're measuring

Steps marked as steps, so a model does not have to infer the sequence from prose and get it wrong.

Why this matters
Schema.org's own type definition for step-by-step content, so a model can follow the sequence instead of guessing at it.
LI-2 0 PTS speakable on summaries and ledes NOT SCORED
What we're measuring

Flag your own best short answer — the lede, the summary — so an assistant reads that rather than guessing at a paragraph.

Why this matters
Schema.org's definition of speakable, the property built to flag the best short answer on a page.
LI-3 0 PTS IndexNow fires on publish and update NOT SCORED
What we're measuring

Tell search engines the moment something changes, rather than waiting to be crawled again.

Why this matters
The protocol's own docs, backed jointly by Microsoft Bing and Yandex as the search engines that consume it.
LI-4 0 PTS Editorial policy page referenced via publishingPrinciples NOT SCORED
What we're measuring

Document how your content is produced, reviewed, corrected and funded — then point at that page from your markup.

Why this matters
Schema.org's property for linking to the page that documents how content gets made, reviewed and corrected.
LI-5 0 PTS NLWeb endpoint exposed as an MCP server with an ask method NOT SCORED
What we're measuring

A natural-language endpoint over your own structured data, so an assistant can ask your site a question instead of scraping around it.

Why this matters
The NLWeb project's own repository, defining the natural-language endpoint this check asks a site to expose.
LI-6 0 PTS Domain MCP server over real content APIs NOT SCORED
What we're measuring

Your course catalog, provider directory or grant database, callable as documented tools rather than scraped out of a search results page.

Why this matters
The same protocol spec, applied here to a catalog or directory instead of a generic API.
LI-7 0 PTS /llms-full.txt where full-text inclusion is appropriate NOT SCORED
What we're measuring

The expanded variant, with the text inline. Worth it when your content is small enough to ship whole.

Why this matters
The same proposal spells out the expanded variant, where the full text ships inline instead of linked.

Best practices

9 items · not scored

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
What we're measuring

Register, donate, apply, find a clinician — these should complete through ordinary form submissions and real URLs, not only through clicks.

Why this matters
The W3C's forms tutorial, covering the plain HTML submissions an agent can complete without clicking anything.
BP-2 0 PTS Stable selectors on critical-flow elements NOT SCORED
What we're measuring

Hashed class names change on every build. An agent that found your Apply button yesterday cannot find it today.

Why this matters
The HTML living standard's own section on data-* attributes, a stable hook that survives a class-name rebuild.
BP-3 0 PTS GA4 channel group for AI assistant referrers NOT SCORED
What we're measuring

Traffic from ChatGPT, Perplexity, Claude and the rest lands in Direct by default, where it disappears. A channel group makes it countable.

Why this matters
Google's own documentation on channel groups, from the analytics platform that quietly files this traffic under Direct.
BP-4 0 PTS Server-side tagging captures stripped referrers NOT SCORED
What we're measuring

Some assistants strip the referrer before the browser sees it. Server-side tagging catches what the client-side tag cannot.

Why this matters
Google's own guidance on server-side tagging, built for exactly the referrer-stripping behavior this check is asking about.
BP-5 0 PTS Access log retention with a queryable store NOT SCORED
What we're measuring

Crawler logs have to survive long enough to show a before and an after. Many hosts discard them in days.

Why this matters
Cloudflare's own documentation on log retention, from the edge many crawler requests actually pass through first.
BP-6 0 PTS Scheduled AI crawler activity report NOT SCORED
What we're measuring

Watch crawler behavior continuously rather than auditing it once. A crawler that stops appearing usually means somebody reintroduced a block.

Why this matters
Google's own crawl-stats report, the tool built specifically to show whether a crawler stopped showing up.
BP-7 0 PTS Fixed prompt panel run monthly across models NOT SCORED
What we're measuring

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 this matters
Google's own page on AI features, written to explain how its systems currently draw on a site's content.
BP-8 0 PTS Extraction-fidelity baseline captured NOT SCORED
What we're measuring

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 this matters
The same reference frames repeat testing as the only way to see whether a fix actually changed an answer.
BP-9 0 PTS Search Console and Bing Webmaster Tools verified NOT SCORED
What we're measuring

Verify both. Bing matters more than its search share suggests, because its index feeds several AI products.

Why this matters
Bing's own webmaster tools page, worth verifying because Bing's index quietly feeds several AI products.

Is your site ready for AI?

Scan a page, get a number you can verify. Free.