Full accounting
readinessindex.io
Every test, its exact contribution, and the division that turns them into a score. Nothing on this page is rounded except where it says so.
How a score is computed
Each test scores a band from 0 to 4. Its contribution is its weight times its band, divided by 4. The score is the sum of those contributions over the total weight, as a percentage.
- Sum of exact contributions
- 87
- Total weight (the denominator)
- 100
- 87 ÷ 100 × 100
- 87.0000
- Rounded once, at the end — the score on the report
- 87
Why the column below does not add up to 87
The report prints every row as a whole number, because a report is read aloud and nobody argues about three quarters of a point. 6 of these 67 rows round up or down to get there. Add the printed column and you get 90; the exact contributions sum to 87, a difference of +3 points.
The score is computed from the exact figures and rounded once, at the end. It is never computed from the rounded rows. Both numbers on this page are correct; only one of them is the score.
Every test
| Test | Weight | Band | Arithmetic | Exact | Shown | Notes |
|---|---|---|---|---|---|---|
| AIR-1.1 No blanket robots.txt blocks on AI crawler user-agents | 5 | 4 | 5 × 4 ÷ 4 | 5 | 5 | |
| AIR-1.2 CDN and WAF do not silently reject AI crawlers | 5 | 4 | 5 × 4 ÷ 4 | 5 | 5 | |
| AIR-1.3 No interactive challenges on read-only paths | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | |
| AIR-1.4 Content Signals declared in robots.txt | 3 | 4 | 3 × 4 ÷ 4 | 3 | 3 | |
| AIR-1.5 Human-readable AI policy comment in robots.txt | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | |
| AIR-1.6 No stray noarchive or nosnippet directives | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | |
| AIR-1.7 Every page emits a valid, self-consistent canonical | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-1.8 Semantic HTML structure | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-1.9 One h1 and a non-skipping heading hierarchy | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-1.10 /llms.txt exists and is generated from the content model | 2 | 3 | 2 × 3 ÷ 4 | 1.5 | 2 | held at band 3: awaiting confirmation from your team |
| AIR-1.11 A single linked entity graph with @id references | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-1.12 sameAs links to external authority records | 2 | 3 | 2 × 3 ÷ 4 | 1.5 | 2 | |
| AIR-1.13 About, Contact, and organizational detail are complete | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-2.1 Primary content is present without JavaScript | 6 | 4 | 6 × 4 ÷ 4 | 6 | 6 | |
| AIR-2.2 Progressive disclosure content ships in the initial HTML | 3 | 4 | 3 × 4 ÷ 4 | 3 | 3 | |
| AIR-2.3 Real data tables with header cells | 2 | 2 | 2 × 2 ÷ 4 | 1 | 1 | |
| AIR-2.4 Stable, human-readable anchor IDs on section headings | 2 | 2 | 2 × 2 ÷ 4 | 1 | 1 | |
| AIR-2.5 Alt text on content images, empty alt on decorative | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | |
| AIR-2.6 Key facts exist as HTML text, not only in images or PDFs | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | |
| AIR-3.1 JSON-LD is generated from mapped fields, not hardcoded | 2 | 3 | 2 × 3 ÷ 4 | 1.5 | 2 | held at band 3: awaiting confirmation from your team |
| AIR-3.2 BreadcrumbList on every page below the homepage | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-3.3 Vertical-specific schema types | 4 | 3 | 4 × 3 ÷ 4 | 3 | 3 | |
| AIR-3.4 FAQPage and QAPage on genuine question-and-answer content | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | banded by rule (precondition not met) |
| AIR-3.5 isAccessibleForFree, about, and mentions with entity references | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | |
| AIR-3.6 Product, Offer, and Service with real prices | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | banded by rule (precondition not met) |
| AIR-3.7 SearchAction on the WebSite node | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | banded by rule (precondition not met) |
| AIR-3.8 Schema validation of the structured data on the page | 2 | 2 | 2 × 2 ÷ 4 | 1 | 1 | |
| AIR-4.1 RSL licensing document published and referenced | 1 | 2 | 1 × 2 ÷ 4 | 0.5 | 1 | held at band 2: awaiting confirmation from your team |
| AIR-4.2 RSL terms propagated to feeds and schema | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | |
| AIR-4.3 Web Bot Auth verification configured | 1 | 2 | 1 × 2 ÷ 4 | 0.5 | 1 | held at band 2: awaiting confirmation from your team |
| AIR-4.4 Correct X-Robots-Tag on non-HTML resources | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | banded by rule (precondition not met) |
| AIR-4.5 Missing pages return 404 or 410 | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | |
| AIR-4.6 Redirects resolve in a single hop | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | |
| AIR-4.7 Faceted, calendar, and parameterized URLs are controlled | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | banded by rule (precondition not met) |
| AIR-4.8 Sitemap lastmod reflects real content changes | 2 | 2 | 2 × 2 ÷ 4 | 1 | 1 | |
| AIR-4.9 Sitemap index split by type, with media sitemaps | 1 | 2 | 1 × 2 ÷ 4 | 0.5 | 1 | |
| AIR-4.10 Paginated series are coherently signaled | 1 | 4 | 1 × 4 ÷ 4 | 1 | 1 | banded by rule (precondition not met) |
| AIR-5.1 Author entity pages with credentials | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-5.2 Bylines linked to author entities | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-5.3 reviewedBy on YMYL content | 2 | 2 | 2 × 2 ÷ 4 | 1 | 1 | held at band 2: awaiting confirmation from your team |
| AIR-5.4 datePublished and dateModified are accurate | 2 | 2 | 2 × 2 ÷ 4 | 1 | 1 | |
| AIR-5.5 citation markup on primary-source references | 2 | 2 | 2 × 2 ÷ 4 | 1 | 1 | held at band 2: awaiting confirmation from your team |
| AIR-5.6 C2PA Content Credentials on original assets | 2 | 2 | 2 × 2 ÷ 4 | 1 | 1 | held at band 2: awaiting confirmation from your team |
| AIR-6.1 OpenAPI specification for public APIs | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | banded by rule (precondition not met) |
| AIR-6.2 /.well-known/ discovery entries for agent capabilities | 2 | 2 | 2 × 2 ÷ 4 | 1 | 1 | |
| AIR-6.3 Form fields carry label, name, and autocomplete | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-6.4 No captchas on browse, search, or filter interactions | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-7.1 Markdown companion for every canonical page | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-7.2 link rel=alternate advertises the Markdown version | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-7.3 Accept: text/markdown content negotiation | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| AIR-7.4 Alternate representations are edge-cached | 2 | 4 | 2 × 4 ÷ 4 | 2 | 2 | |
| LI-1 HowTo on procedural content | 0 | 0 | not counted | — | 0 | Dimension 9 — measured beside the hundred, never inside it. |
| LI-2 speakable on summaries and ledes | 0 | 0 | not counted | — | 0 | Dimension 9 — measured beside the hundred, never inside it. |
| LI-3 IndexNow fires on publish and update | 0 | 0 | not counted | — | 0 | Dimension 9 — measured beside the hundred, never inside it. |
| LI-4 Editorial policy page referenced via publishingPrinciples | 0 | 0 | not counted | — | 0 | Dimension 9 — measured beside the hundred, never inside it. |
| LI-5 NLWeb endpoint exposed as an MCP server with an ask method | 0 | 2 | not counted | — | 0 | Dimension 9 — measured beside the hundred, never inside it. |
| LI-6 Domain MCP server over real content APIs | 0 | 3 | not counted | — | 0 | Dimension 9 — measured beside the hundred, never inside it. |
| LI-7 /llms-full.txt where full-text inclusion is appropriate | 0 | — | not counted | — | — | Dimension 9 — measured beside the hundred, never inside it. |
| BP-1 Critical flows complete without JS-only interactions | 0 | — | not counted | — | — | Dimension 9 — measured beside the hundred, never inside it. |
| BP-2 Stable selectors on critical-flow elements | 0 | — | not counted | — | — | Dimension 9 — measured beside the hundred, never inside it. |
| BP-3 GA4 channel group for AI assistant referrers | 0 | — | not counted | — | — | Dimension 9 — measured beside the hundred, never inside it. |
| BP-4 Server-side tagging captures stripped referrers | 0 | — | not counted | — | — | Dimension 9 — measured beside the hundred, never inside it. |
| BP-5 Access log retention with a queryable store | 0 | — | not counted | — | — | Dimension 9 — measured beside the hundred, never inside it. |
| BP-6 Scheduled AI crawler activity report | 0 | — | not counted | — | — | Dimension 9 — measured beside the hundred, never inside it. |
| BP-7 Fixed prompt panel run monthly across models | 0 | — | not counted | — | — | Dimension 9 — measured beside the hundred, never inside it. |
| BP-8 Extraction-fidelity baseline captured | 0 | — | not counted | — | — | Dimension 9 — measured beside the hundred, never inside it. |
| BP-9 Search Console and Bing Webmaster Tools verified | 0 | 2 | not counted | — | 0 | Dimension 9 — measured beside the hundred, never inside it. |
| Counted rows | 100 | 87 | 90 |
Weights and bands come from the published standard, which also states this rounding rule. This page recomputes the score from those two columns rather than reprinting the stored figure, so if it ever disagreed with the report, the disagreement would show here.