Readiness Index
AI Readiness Index

All 68 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 First contact scan or a Full 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 First contact scan runs 13 of these on a single page, free — the Full scan runs all 68 across your site, also free. The ninth, Unscored Leading Indicators, holds the 6 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.

#1 · First Contact · 13 tests · 28 pts

AIR-1.15 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 — Overview of OpenAI crawlers
OpenAI names its own crawlers here, so this is the one place to confirm which user agents robots.txt needs to address.
AIR-1.25 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 — AI Crawl Control
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.31 pts 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 Search Central — HTTP status codes and network errors
Google publishes exactly which status codes and errors stop a crawler cold, straight from the team that builds the crawler.
AIR-1.41 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
Content Signals Policy
The standard itself, published by the group defining what a robots.txt AI-permission line actually means.
AIR-1.51 pts 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
RFC 9309 — Robots Exclusion Protocol
The actual internet standard robots.txt follows, from the IETF working group that ratified it in 2022.
AIR-1.61 pts 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
Google Search Central — Robots meta tag and X-Robots-Tag
The same reference explains how a leftover noarchive-style setting silently blocks an assistant from quoting your page.
AIR-1.72 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 Search Central — Canonicalization
Google's explanation of canonical URLs, written for the exact crawler that decides which version of a page is real.
AIR-1.82 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
W3C WAI — Page structure tutorial
The W3C's own accessibility tutorial on giving a page real structure, the same structure a machine parses too.
AIR-1.92 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
W3C WAI — Headings
The W3C's guidance on heading order, written for screen readers but read the same way by an assistant.
AIR-1.102 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 llms.txt proposal
The proposal's own site, from the person who coined the /llms.txt format this check looks for.
AIR-1.112 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
JSON-LD
The JSON-LD specification's own site, the format nearly every structured-data check in this Index assumes.
AIR-1.122 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 — sameAs
Schema.org's own definition of sameAs, the property that links your markup to an authoritative outside record.
AIR-1.132 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 — Organization
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 pts

AIR-2.16 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 Search Central — JavaScript SEO basics
Google's own explanation of when its crawler renders JavaScript and when it gives up, from the company that built it.
AIR-2.23 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
Google Search Central — JavaScript SEO basics
The same guidance covers progressive disclosure — content that should already be in the HTML before anyone clicks.
AIR-2.32 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
W3C WAI — Tables tutorial
The W3C's tutorial on real data tables, the format a machine can actually parse cell by cell.
AIR-2.42 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
WHATWG HTML — The id attribute
The HTML living standard itself, defining the id attribute a stable anchor link depends on.
AIR-2.51 pts 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
W3C WAI — Alt decision tree
The W3C's own decision tree for when alt text is required and when an empty alt is correct.
AIR-2.61 pts 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
W3C WAI — Images of text
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 · 14 pts

AIR-3.12 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 Search Central — Introduction to structured data
Google's own introduction to structured data, from the company whose crawler actually consumes the markup.
AIR-3.22 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 Search Central — Breadcrumb structured data
Google's own reference for breadcrumb markup, the property that tells a model where a page sits in your site.
AIR-3.35 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 Search Central — Structured data gallery
Google's full gallery of supported structured-data types, the closest thing to a menu of what to use instead of WebPage.
AIR-3.41 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 Search Central — FAQ structured data
Google's own policy page on FAQ markup, including the warning against marking up questions nobody actually asked.
AIR-3.51 pts 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 — isAccessibleForFree
Schema.org's own definition of the property that tells a model whether it's allowed to read a page at all.
AIR-3.61 pts 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 Search Central — Product structured data
Google's reference for product markup, including why a stale price is worse than no price to its own systems.
AIR-3.71 pts 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 Search Central — Sitelinks search box
Google's own specification for exposing a site search as structured data an agent can call directly.
AIR-3.81 pts Schema validation runs in CI
What we're measuring

Broken markup should fail your build rather than reach production and sit there until the next audit.

Why this matters
Schema Markup Validator
The validator schema.org itself runs on submitted markup, the same tool a broken build should be checked against.

#4 · Crawl, Index and Licensing Hygiene · 10 tests · 14 pts

AIR-4.11 pts 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
Really Simple Licensing (RSL)
RSL's own specification defines the machine-readable licensing format this check looks for.
AIR-4.21 pts 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
Really Simple Licensing (RSL)
The same standard that defines the license file also defines how it travels with content in feeds and markup.
AIR-4.31 pts 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
IETF — Web Bot Auth architecture
The IETF draft defining cryptographic bot verification, the mechanism this check is asking your edge to support.
AIR-4.41 pts 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 Search Central — Robots meta tag and X-Robots-Tag
Google's own documentation on the header that has to carry this directive when a file can't hold a meta tag.
AIR-4.52 pts 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 Search Central — Soft 404 errors
Google defines a soft 404 as a page that should return a real error but returns 200 instead.
AIR-4.61 pts 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 Search Central — Redirects and Google Search
Google's own guidance on redirect chains, from the crawler that has to follow every hop you add.
AIR-4.72 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 Search Central — Faceted navigation
Google's own advice for the faceted-navigation problem, aimed at engineers whose crawl budget it actually spends.
AIR-4.83 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
Sitemaps XML protocol
The sitemaps.org spec that defines lastmod, jointly backed by Google, Bing and Yahoo.
AIR-4.91 pts 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 Search Central — Build and submit a sitemap
Google's own instructions for splitting sitemaps by type, from the side that actually reads them.
AIR-4.101 pts 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 Search Central — Pagination and incremental page loading
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 · 8 pts

AIR-5.11 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 Search Central — Creating helpful, reliable content
Google's own guidance on why real, credentialed authorship is part of what it considers trustworthy content.
AIR-5.22 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 — author
Schema.org's definition of the author property, and why it should point at an entity, not just a name string.
AIR-5.31 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 — reviewedBy
Schema.org's own property for naming a reviewer in markup, not only in a design a machine can't read.
AIR-5.42 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 Search Central — Article structured data
Google's reference for dateModified, including its own warning that a date changing on every deploy reads as noise.
AIR-5.51 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 — citation
Schema.org's own definition of a machine-readable citation, the link between a claim and its primary source.
AIR-5.61 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
C2PA — Content Credentials
The C2PA coalition's own standard for provenance that survives into the delivered file itself.

#6 · Agent Interfaces · 7 tests · 7 pts

AIR-6.11 pts NLWeb exposed as an MCP server with an ask method
What we're measuring

The same endpoint, exposed the way agents already know how to call things.

Why this matters
Model Context Protocol
MCP's own specification site, the protocol agents already know how to call without custom integration work.
AIR-6.21 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
OpenAPI Specification
The OpenAPI Specification itself, the versioned format that keeps a described API's contract honest over time.
AIR-6.31 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 — Well-Known URIs registry
IANA's own registry of well-known URIs, the standard location agents already check first.
AIR-6.41 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
W3C WAI — Labeling controls
The W3C's tutorial on labeling form fields, written for assistive tech but read the same way by an agent.
AIR-6.51 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
W3C — Inaccessibility of CAPTCHA
The W3C's own working-group note on why CAPTCHA blocks more than it protects, and where it still belongs.
AIR-6.61 pts Critical flows complete without JS-only interactions
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
W3C WAI — Forms tutorial
The W3C's forms tutorial, covering the plain HTML submissions an agent can complete without clicking anything.
AIR-6.71 pts Stable selectors on critical-flow elements
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
WHATWG HTML — data-* attributes
The HTML living standard's own section on data-* attributes, a stable hook that survives a class-name rebuild.

#7 · Alternate Representations · 5 tests · 7 pts

AIR-7.11 pts /llms-full.txt where full-text inclusion is appropriate
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 llms.txt proposal
The same proposal spells out the expanded variant, where the full text ships inline instead of linked.
AIR-7.22 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
RFC 7763 — The text/markdown media type
The IETF RFC that formally registered text/markdown as a media type in the first place.
AIR-7.31 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
RFC 8288 — Web Linking
The RFC defining the Link header this check expects to point at a Markdown alternative.
AIR-7.42 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
RFC 9110 — HTTP Semantics, content negotiation
The current HTTP standard's own chapter on content negotiation, the mechanism Accept: text/markdown relies on.
AIR-7.51 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 — Cache concepts
Cloudflare's own explanation of what it caches and why, from the CDN a generated page probably sits behind.

#8 · Measurement and Instrumentation · 7 tests · 7 pts

AIR-8.11 pts GA4 channel group for AI assistant referrers
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 Analytics — Default channel groups
Google's own documentation on channel groups, from the analytics platform that quietly files this traffic under Direct.
AIR-8.21 pts Server-side tagging captures stripped referrers
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 — Server-side tagging
Google's own guidance on server-side tagging, built for exactly the referrer-stripping behavior this check is asking about.
AIR-8.31 pts Access log retention with a queryable store
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 — Logs
Cloudflare's own documentation on log retention, from the edge many crawler requests actually pass through first.
AIR-8.41 pts Scheduled AI crawler activity report
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 Search Console — Crawl stats report
Google's own crawl-stats report, the tool built specifically to show whether a crawler stopped showing up.
AIR-8.51 pts Fixed prompt panel run monthly across models
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 Search Central — AI features and your website
Google's own page on AI features, written to explain how its systems currently draw on a site's content.
AIR-8.61 pts Extraction-fidelity baseline captured
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
Google Search Central — AI features and your website
The same reference frames repeat testing as the only way to see whether a fix actually changed an answer.
AIR-8.71 pts Search Console and Bing Webmaster Tools verified
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 Webmaster Tools
Bing's own webmaster tools page, worth verifying because Bing's index quietly feeds several AI products.

#9 · Unscored Leading Indicators · 6 tests · 0 pts

AIR-9.1 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 — HowTo
Schema.org's own type definition for step-by-step content, so a model can follow the sequence instead of guessing at it.
AIR-9.2 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 — speakable
Schema.org's definition of speakable, the property built to flag the best short answer on a page.
AIR-9.3 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
IndexNow documentation
The protocol's own docs, backed jointly by Microsoft Bing and Yandex as the search engines that consume it.
AIR-9.4 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 — publishingPrinciples
Schema.org's property for linking to the page that documents how content gets made, reviewed and corrected.
AIR-9.5 NLWeb endpoint over the site's schema.org data 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
NLWeb
The NLWeb project's own repository, defining the natural-language endpoint this check asks a site to expose.
AIR-9.6 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
Model Context Protocol
The same protocol spec, applied here to a catalog or directory instead of a generic API.
Run a First contact scan

13 tests · one page · about 20 seconds