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.

[See AIR-1.1 in the full index →](https://readinessindex.io/tests#c-AIR-1.1)

Why this matters

[OpenAI — Overview of OpenAI crawlers](https://platform.openai.com/docs/bots)

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.

[See AIR-1.2 in the full index →](https://readinessindex.io/tests#c-AIR-1.2)

Why this matters

[Cloudflare — AI Crawl Control](https://developers.cloudflare.com/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.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.

[See AIR-1.3 in the full index →](https://readinessindex.io/tests#c-AIR-1.3)

Why this matters

[Google Search Central — HTTP status codes and network errors](https://developers.google.com/search/docs/crawling-indexing/http-network-errors)

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.

[See AIR-1.4 in the full index →](https://readinessindex.io/tests#c-AIR-1.4)

Why this matters

[Content Signals Policy](https://contentsignals.org/)

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.

[See AIR-1.5 in the full index →](https://readinessindex.io/tests#c-AIR-1.5)

Why this matters

[RFC 9309 — Robots Exclusion Protocol](https://www.rfc-editor.org/rfc/rfc9309.html)

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.

[See AIR-1.6 in the full index →](https://readinessindex.io/tests#c-AIR-1.6)

Why this matters

[Google Search Central — Robots meta tag and X-Robots-Tag](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag)

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.

[See AIR-1.7 in the full index →](https://readinessindex.io/tests#c-AIR-1.7)

Why this matters

[Google Search Central — Canonicalization](https://developers.google.com/search/docs/crawling-indexing/canonicalization)

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.

[See AIR-1.8 in the full index →](https://readinessindex.io/tests#c-AIR-1.8)

Why this matters

[W3C WAI — Page structure tutorial](https://www.w3.org/WAI/tutorials/page-structure/)

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.

[See AIR-1.9 in the full index →](https://readinessindex.io/tests#c-AIR-1.9)

Why this matters

[W3C WAI — Headings](https://www.w3.org/WAI/tutorials/page-structure/headings/)

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.

[See AIR-1.10 in the full index →](https://readinessindex.io/tests#c-AIR-1.10)

Why this matters

[The llms.txt proposal](https://llmstxt.org/)

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.

[See AIR-1.11 in the full index →](https://readinessindex.io/tests#c-AIR-1.11)

Why this matters

[JSON-LD](https://json-ld.org/)

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.

[See AIR-1.12 in the full index →](https://readinessindex.io/tests#c-AIR-1.12)

Why this matters

[Schema.org — sameAs](https://schema.org/sameAs)

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.

[See AIR-1.13 in the full index →](https://readinessindex.io/tests#c-AIR-1.13)

Why this matters

[Schema.org — Organization](https://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 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.

[See AIR-2.1 in the full index →](https://readinessindex.io/tests#c-AIR-2.1)

Why this matters

[Google Search Central — JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/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.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.

[See AIR-2.2 in the full index →](https://readinessindex.io/tests#c-AIR-2.2)

Why this matters

[Google Search Central — JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)

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.

[See AIR-2.3 in the full index →](https://readinessindex.io/tests#c-AIR-2.3)

Why this matters

[W3C WAI — Tables tutorial](https://www.w3.org/WAI/tutorials/tables/)

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.

[See AIR-2.4 in the full index →](https://readinessindex.io/tests#c-AIR-2.4)

Why this matters

[WHATWG HTML — The id attribute](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute)

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.

[See AIR-2.5 in the full index →](https://readinessindex.io/tests#c-AIR-2.5)

Why this matters

[W3C WAI — Alt decision tree](https://www.w3.org/WAI/tutorials/images/decision-tree/)

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.

[See AIR-2.6 in the full index →](https://readinessindex.io/tests#c-AIR-2.6)

Why this matters

[W3C WAI — Images of text](https://www.w3.org/WAI/tutorials/images/textual/)

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.

[See AIR-3.1 in the full index →](https://readinessindex.io/tests#c-AIR-3.1)

Why this matters

[Google Search Central — Introduction to structured data](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data)

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.

[See AIR-3.2 in the full index →](https://readinessindex.io/tests#c-AIR-3.2)

Why this matters

[Google Search Central — Breadcrumb structured data](https://developers.google.com/search/docs/appearance/structured-data/breadcrumb)

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.

[See AIR-3.3 in the full index →](https://readinessindex.io/tests#c-AIR-3.3)

Why this matters

[Google Search Central — Structured data gallery](https://developers.google.com/search/docs/appearance/structured-data/search-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.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.

[See AIR-3.4 in the full index →](https://readinessindex.io/tests#c-AIR-3.4)

Why this matters

[Google Search Central — FAQ structured data](https://developers.google.com/search/docs/appearance/structured-data/faqpage)

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.

[See AIR-3.5 in the full index →](https://readinessindex.io/tests#c-AIR-3.5)

Why this matters

[Schema.org — isAccessibleForFree](https://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.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.

[See AIR-3.6 in the full index →](https://readinessindex.io/tests#c-AIR-3.6)

Why this matters

[Google Search Central — Product structured data](https://developers.google.com/search/docs/appearance/structured-data/product)

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.

[See AIR-3.7 in the full index →](https://readinessindex.io/tests#c-AIR-3.7)

Why this matters

[Google Search Central — Sitelinks search box](https://developers.google.com/search/docs/appearance/structured-data/sitelinks-searchbox)

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.

[See AIR-3.8 in the full index →](https://readinessindex.io/tests#c-AIR-3.8)

Why this matters

[Schema Markup Validator](https://validator.schema.org/)

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.

[See AIR-4.1 in the full index →](https://readinessindex.io/tests#c-AIR-4.1)

Why this matters

[Really Simple Licensing (RSL)](https://rslstandard.org/)

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.

[See AIR-4.2 in the full index →](https://readinessindex.io/tests#c-AIR-4.2)

Why this matters

[Really Simple Licensing (RSL)](https://rslstandard.org/)

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.

[See AIR-4.3 in the full index →](https://readinessindex.io/tests#c-AIR-4.3)

Why this matters

[IETF — Web Bot Auth architecture](https://datatracker.ietf.org/doc/draft-meunier-web-bot-auth-architecture/)

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.

[See AIR-4.4 in the full index →](https://readinessindex.io/tests#c-AIR-4.4)

Why this matters

[Google Search Central — Robots meta tag and X-Robots-Tag](https://developers.google.com/search/docs/crawling-indexing/robots-meta-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.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.

[See AIR-4.5 in the full index →](https://readinessindex.io/tests#c-AIR-4.5)

Why this matters

[Google Search Central — Soft 404 errors](https://developers.google.com/search/docs/crawling-indexing/http-network-errors)

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.

[See AIR-4.6 in the full index →](https://readinessindex.io/tests#c-AIR-4.6)

Why this matters

[Google Search Central — Redirects and Google Search](https://developers.google.com/search/docs/crawling-indexing/301-redirects)

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.

[See AIR-4.7 in the full index →](https://readinessindex.io/tests#c-AIR-4.7)

Why this matters

[Google Search Central — Faceted navigation](https://developers.google.com/search/docs/crawling-indexing/crawling-managing-faceted-navigation)

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.

[See AIR-4.8 in the full index →](https://readinessindex.io/tests#c-AIR-4.8)

Why this matters

[Sitemaps XML protocol](https://www.sitemaps.org/protocol.html)

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.

[See AIR-4.9 in the full index →](https://readinessindex.io/tests#c-AIR-4.9)

Why this matters

[Google Search Central — Build and submit a sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)

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.

[See AIR-4.10 in the full index →](https://readinessindex.io/tests#c-AIR-4.10)

Why this matters

[Google Search Central — Pagination and incremental page loading](https://developers.google.com/search/docs/specialty/ecommerce/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 · 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.

[See AIR-5.1 in the full index →](https://readinessindex.io/tests#c-AIR-5.1)

Why this matters

[Google Search Central — Creating helpful, reliable content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

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.

[See AIR-5.2 in the full index →](https://readinessindex.io/tests#c-AIR-5.2)

Why this matters

[Schema.org — author](https://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.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.

[See AIR-5.3 in the full index →](https://readinessindex.io/tests#c-AIR-5.3)

Why this matters

[Schema.org — reviewedBy](https://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.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.

[See AIR-5.4 in the full index →](https://readinessindex.io/tests#c-AIR-5.4)

Why this matters

[Google Search Central — Article structured data](https://developers.google.com/search/docs/appearance/structured-data/article)

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.

[See AIR-5.5 in the full index →](https://readinessindex.io/tests#c-AIR-5.5)

Why this matters

[Schema.org — citation](https://schema.org/citation)

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.

[See AIR-5.6 in the full index →](https://readinessindex.io/tests#c-AIR-5.6)

Why this matters

[C2PA — Content Credentials](https://c2pa.org/)

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.

[See AIR-6.1 in the full index →](https://readinessindex.io/tests#c-AIR-6.1)

Why this matters

[OpenAPI Specification](https://spec.openapis.org/oas/latest.html)

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.

[See AIR-6.2 in the full index →](https://readinessindex.io/tests#c-AIR-6.2)

Why this matters

[IANA — Well-Known URIs registry](https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml)

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.

[See AIR-6.3 in the full index →](https://readinessindex.io/tests#c-AIR-6.3)

Why this matters

[W3C WAI — Labeling controls](https://www.w3.org/WAI/tutorials/forms/labels/)

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.

[See AIR-6.4 in the full index →](https://readinessindex.io/tests#c-AIR-6.4)

Why this matters

[W3C — Inaccessibility of CAPTCHA](https://www.w3.org/TR/turingtest/)

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.

[See AIR-7.1 in the full index →](https://readinessindex.io/tests#c-AIR-7.1)

Why this matters

[RFC 7763 — The text/markdown media type](https://www.rfc-editor.org/rfc/rfc7763.html)

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.

[See AIR-7.2 in the full index →](https://readinessindex.io/tests#c-AIR-7.2)

Why this matters

[RFC 8288 — Web Linking](https://www.rfc-editor.org/rfc/rfc8288.html)

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.

[See AIR-7.3 in the full index →](https://readinessindex.io/tests#c-AIR-7.3)

Why this matters

[RFC 9110 — HTTP Semantics, content negotiation](https://www.rfc-editor.org/rfc/rfc9110.html)

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.

[See AIR-7.4 in the full index →](https://readinessindex.io/tests#c-AIR-7.4)

Why this matters

[Cloudflare — Cache concepts](https://developers.cloudflare.com/cache/)

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.

[See LI-1 in the full index →](https://readinessindex.io/tests#c-LI-1)

Why this matters

[Schema.org — HowTo](https://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.

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.

[See LI-2 in the full index →](https://readinessindex.io/tests#c-LI-2)

Why this matters

[Schema.org — speakable](https://schema.org/speakable)

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.

[See LI-3 in the full index →](https://readinessindex.io/tests#c-LI-3)

Why this matters

[IndexNow documentation](https://www.indexnow.org/documentation)

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.

[See LI-4 in the full index →](https://readinessindex.io/tests#c-LI-4)

Why this matters

[Schema.org — publishingPrinciples](https://schema.org/publishingPrinciples)

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.

[See LI-5 in the full index →](https://readinessindex.io/tests#c-LI-5)

Why this matters

[NLWeb](https://github.com/nlweb-ai/NLWeb)

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.

[See LI-6 in the full index →](https://readinessindex.io/tests#c-LI-6)

Why this matters

[Model Context Protocol](https://modelcontextprotocol.io/)

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.

[See LI-7 in the full index →](https://readinessindex.io/tests#c-LI-7)

Why this matters

[The llms.txt proposal](https://llmstxt.org/)

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.

[See BP-1 in the full index →](https://readinessindex.io/tests#c-BP-1)

Why this matters

[W3C WAI — Forms tutorial](https://www.w3.org/WAI/tutorials/forms/)

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.

[See BP-2 in the full index →](https://readinessindex.io/tests#c-BP-2)

Why this matters

[WHATWG HTML — data-* attributes](https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)

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.

[See BP-3 in the full index →](https://readinessindex.io/tests#c-BP-3)

Why this matters

[Google Analytics — Default channel groups](https://support.google.com/analytics/answer/9756891)

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.

[See BP-4 in the full index →](https://readinessindex.io/tests#c-BP-4)

Why this matters

[Google — Server-side tagging](https://developers.google.com/tag-platform/tag-manager/server-side)

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.

[See BP-5 in the full index →](https://readinessindex.io/tests#c-BP-5)

Why this matters

[Cloudflare — Logs](https://developers.cloudflare.com/logs/)

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.

[See BP-6 in the full index →](https://readinessindex.io/tests#c-BP-6)

Why this matters

[Google Search Console — Crawl stats report](https://support.google.com/webmasters/answer/9679690)

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.

[See BP-7 in the full index →](https://readinessindex.io/tests#c-BP-7)

Why this matters

[Google Search Central — AI features and your website](https://developers.google.com/search/docs/appearance/ai-features)

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.

[See BP-8 in the full index →](https://readinessindex.io/tests#c-BP-8)

Why this matters

[Google Search Central — AI features and your website](https://developers.google.com/search/docs/appearance/ai-features)

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.

[See BP-9 in the full index →](https://readinessindex.io/tests#c-BP-9)

Why this matters

[Bing Webmaster Tools](https://www.bing.com/webmasters/about)

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