The AI Readiness Index Open standard by TEN7

Changelog

Every version, and why it changed

A change to a weight, a gate or the scoring model is a new major version, and scores from different major versions cannot be compared.

  • Current: 12.0
  • Effective 18 October 2026
Contents
  1. Changelog

The Index version is independent of the scanner version. Both appear in every result file.

Bump the minor version for new tests, clarified detection, or corrected band anchors. Bump the major version for any weight change, gate change, or scoring-model change — anything that makes two scores non-comparable.

A test ID is never reused for another test, and the crosswalk is permanent.

Never silently re-weight. A client's trend line is the most valuable thing the Index produces, and one quiet weight change destroys it. When a major bump lands, re-score the last run under both versions and show the difference.

#Changelog

#12.0 — 2026-10-18

A MAJOR bump. Scores computed under Index 12 cannot be compared with scores computed under Index 11, in either direction. Every weight moved, the structure of the score changed, 38 tests carry the hundred points where 51 did, and every test has a new ID. A site that scored 70 under 11.5 and scores 70 under 12.0 has not stayed the same: the two numbers answer different questions. Every site's trend line carries one marker, Index changed from 11.5 to 12.0, and benchmarks compare only sites within a major version.

  1. Four categories replace seven dimensions. Reach (4 tests, 25 points), Read (19 tests, 35 points), Understand (11 tests, 25 points) and Act (4 tests, 15 points). Primary Indicators is now Reach. The seven crawl-housekeeping tests that sat beside it (sitemaps, redirects, missing pages, filters, pagination, file rules, media sitemaps) moved to Read, where they are about finding pages and not about being let in, which is why Read carries more tests than Reach and no test lost weight on that account.
  2. Seventy-two tests, 38 of them scored. Index 11 had 67: 51 scored, 7 leading indicators and 9 best practices. Index 12 has the 38 scored tests and three unscored groups: Posture (6), Extras (20) and Measurement (8). Six tests retire. Fourteen are new.
  3. Every test carries an evidence label and graded sources. The labels are AI product, Search index, Standard only, None found and Practice, and the grades are A, B and C. A test is scored only if it has documented use, or is labeled Practice. Each test names its sources and a review date six months out. See What counts as evidence.
  4. The free scan is the Reach scan. It runs RCH-1 to RCH-4 from one page and the site's front-door files, with no browser, and reports points out of 25. The Primary Indicators scan ran thirteen tests. The posture panel, llms.txt and the other unscored items are shown from the same fetches.
  5. Gates are RCH-1 and RCH-2. RCH-1 reads the search crawlers of OpenAI, Anthropic, Perplexity, Google, Bing, Apple, Meta, Amazon and Mistral by name, where AIR-1.1 read ten agents, six of them training or opt-out agents. RCH-2 merges AIR-1.2 and AIR-1.3 into one edge test that also catches a challenge page. A training block never gates and never costs a point.
  6. Training crawlers and Content Signals leave the score. Which training crawlers a site allows is shown in PST-1, a statement about AI use in PST-2, a license in PST-3, a text and data mining reservation in PST-4 and whether the statements agree in PST-5. A choice is not a defect. No company is documented honoring Content Signals or RSL, which is why they carry no points. PST-1 also names the tools that act on a person's request and may ignore robots.txt, and lists xAI's Grok crawler names as observed and undocumented: xAI publishes no crawler documentation and no list of its addresses.
  7. Google's AI control becomes a prompt. Google lets owners switch a site out of its AI answers. A scan cannot see the setting, so PST-6 asks the owner to confirm it and never scores it. Its two points went to RCH-1 and RCH-4 in the first 12.0 draft, and the weights have since moved again; see decision (10).
  8. Six tests retire. AIR-1.5 (crawlers ignore comments by design), AIR-3.7 (Google removed the sitelinks search box in November 2024), LI-1 (Google removed HowTo rich results in 2023), LI-4 (no consumer found), BP-2 (nothing documents agents using data attributes) and BP-4 (no evidence for the claim).
  9. Six new tests. RED-19 (does each page give its answer near the top), UND-8 (does the hidden page code say the same as the visible text), ACT-4 (do your buttons, links and menus have names an AI agent can read), PST-4 (TDMRep), PST-5 (do the statements about AI use agree) and PST-6 (Google's AI control, as a confirm prompt).
  10. Twelve scored tests moved out of the score, 22 points between them, because no consumer is documented. AIR-1.4 (now PST-2), AIR-4.1 and AIR-4.2 (PST-3), AIR-1.10 (EXT-1), AIR-6.2 (EXT-2), AIR-4.3 (EXT-3), AIR-1.11 (EXT-5), AIR-3.1 (EXT-6), AIR-3.4 (EXT-7) and AIR-5.3, AIR-5.5 and AIR-5.6 (EXT-8 to EXT-10) are shown without points. A site that has them is credited in words. The points went to tests with documented use: RCH-1, RCH-2, RCH-4, RED-1, RED-2, UND-3, UND-6, UND-9, ACT-1 and ACT-2 each weigh more than in 11.5, and ACT-4 is new. AIR-1.12 and AIR-3.8 stay in the score at two points each as UND-10 and UND-11, because Google documents a reader for each: sameAs as a recommended Organization property, and the rule that invalid markup is not eligible for its features.
  11. Practice tests are one point each, seven in all. RED-13 to RED-19 are sound practice with no documented consumer. Index 11 gave several of them two points.
  12. Detection changed in thirteen tests. Per-crawler robots verdicts with group inheritance and Applebot's fall-back to the Googlebot rules (RCH-1); edge probes with the new crawler names (RCH-2); noindex and bot-specific page tags (RCH-4); the share of words missing from the first response (RED-1); text visible on load and not removed until a click (RED-2); the advertised Markdown address and the response headers (RED-10, RED-11, RED-12); price markup compared with the visible page (UND-3); distinct authors counted once (UND-4, UND-5); visible dates matched against the markup (UND-6); breadcrumbs required only where the site has a hierarchy (UND-7). Types Google has retired no longer count toward UND-2.
  13. New IDs, and a permanent crosswalk. AIR-n.m, LI-n and BP-n give way to RCH, RED, UND, ACT, PST, EXT and MSR. Every Index 11 ID maps to what it became, in The crosswalk from Index 11. An old ID never stops resolving and a new ID is never reused. Exports carry both IDs.
  14. Decisions made before release. (1) Google's AI-control setting leaves the score and is shown as a confirm prompt. (2) Practice tests are one point each. (3) Understand was set at 20 and Act at 5; it was 18 and 7 before decision (9), and decision (10) moved both again. (4) The free scan is the Reach scan. (5) Test IDs are new category IDs with a permanent crosswalk. (6) There are three unscored groups. (7) The 20,000-property census scan is discarded and the census is re-run from the start under Index 12. (8) Points moved off the tests that almost every site passes and onto the tests that tell sites apart, with every category total unchanged: RCH-1 from 15 to 10 and RED-1 from 15 to 13, RCH-2 from 8 to 13 and RED-2 from 5 to 7. Re-weighting the published Index 11.0 results of 921 sites showed RCH-1, RCH-4 and ACT-2 giving the average site about 22 of their 23 points, which lifted every score without separating anyone; the edge test, which the average site passes 40 percent of, tells sites apart far better and carries the same evidence. (9) Understand is 20 and Act is 5: sameAs and validation, which have a documented reader (Google's Organization and structured-data documentation), moved into the score as UND-10 and UND-11, paid for by ACT-2 3 to 1, UND-2 3 to 2 and UND-1 2 to 1; Reach stayed 30 and Read stayed 45 at that point. (10) Marker Y, 2026-10-18: Reach 25, Read 35, Understand 25, Act 15. Four categories stay; the proportions moved because Reach and Read carried 75 points while Act carried five. ACT-4 was added so Act has a substantive test beyond forms and CAPTCHAs, and the points moved off the tests nearly every site passes (RCH-4 5 to 3, RCH-1 10 to 8) and off Read's heaviest tests (RED-1 13 to 10, RED-2 7 to 5), with Understand led by dates (UND-6 4 to 6). The previous set, marker X (30/45/20/5), is tagged weights-x-30-45-20-5 and written in docs/WEIGHT-MARKERS.md. The free Reach scan runs RCH-1 to RCH-4 and reports out of 25. (12) Eight unscored tests (EXT-14 to EXT-20 and MSR-8) were added, 2026-10-18, so that Index 12 measures every check listed by Cloudflare's Agent Readiness score and Lighthouse's agentic browsing category: WebMCP, sign-in discovery, agent cards and skills, DNS-AID, agent payment protocols, a declared sitemap, accessibility-tree integrity and layout stability. They carry the new evidence label Scanner-listed and no points, because a scanner listing a check is not an AI product reading it; no score moves. The table in Coverage of published scanners shows which of their checks each answers and which are only partly covered or not covered. (11) Act was nearly free in the pilot (2026-10-18, 180 S&P 500 sites): the median site earned 90 percent of its 15 points. ACT-4 now passes a page at 1 percent unnamed controls, not 5, which takes full marks from 121 of 166 sites to 74 and spreads the bands from 0 to 4; and ACT-2 now applies only where the site has search or filtering, so the census no longer counts the 113 of 180 sites with none as passing it. Weights are unchanged. Together the two moved the pilot's median Act share from 90 to 65 percent and its median score from 59 to 56.5. (13) A sampled address that answers with a PDF or another non-HTML document is no longer read as an HTML page: it nested almost a thousand levels, failed three pilot scans and fed millions of characters of noise to the text checks. Applied to the pilot's stored evidence it set aside 18 pages on 10 of 195 sites and moved those scores by 0 to 3 points, 1 at the median.

Re-score a site's last run under both versions and show the two numbers side by side before anyone compares them; neither is wrong.

#11.5 — 2026-10-11

A minor bump: one more vertical for AIR-3.3. No weight, band or scoring-model change, and no score computed under 11.4 moves.

AIR-3.3 is scored against the client's declared vertical, and school districts had no honest one. Higher Education's set (Course, EducationalOccupationalProgram, CollegeOrUniversity, EducationEvent) describes a college, and marking a district against it would score it for not being one. K-12 Education is added with its own expected set: EducationalOrganization, School, Event, EducationEvent and Course.

The fifteen existing verticals are byte-for-byte unchanged, in their stored values and their type sets, so a site scored under 11.4 scores identically under 11.5. A site with no vertical is unchanged in every respect: still not declared, still out of the denominator.

#11.4 — 2026-10-09

A minor bump: clarified detection. No weight, gate or scoring model changed, and a site's score under 11.4 is within one point of its score under 11.3, only through AIR-4.3. The scores are comparable, not identical.

  1. AIR-4.3 cites the draft that is current. The standard pointed at draft-meunier-web-bot-auth-architecture, which was renamed and folded into draft-ietf-webbotauth-httpsig-protocol (revision -00, September 2026, a working group draft that expires 2027-03-05). Detect and Fix now use its terms: Signature-Agent is a dictionary of HTTPS URLs, a signed request covers @authority and the signature-agent member with created, expires and tag="web-bot-auth", and the key directory is a JSON Web Key Set at /.well-known/http-message-signatures-directory.
  2. What counts as a key directory is stricter, and a new band says so. Any 200 at that address used to score 4, an HTML page included. Now band 4 is a directory that answers 200 at the address itself, with no redirect, as application/http-message-signatures-directory+json, with a key set that has at least one key. A key set served through a redirect or as another media type, which a verifier following the draft refuses, scores 3. Something at the address that is not a key set scores as no directory: 2 when the edge tells AI agents apart by user-agent, otherwise 0.
  3. What moves. Only a site that publishes a key directory: from 4 to 3 (a quarter of a point) when it is served the wrong way, and from 4 to 2 or 0 (up to one point) when what is at the address is not a key set. Nothing else changes.

#11.3 — 2026-10-08

A minor bump: no weight, gate, band or detection rule changed, and a score under 11.3 is identical to the same site's score under 11.2. Like 11.2 it changes how the Index explains itself.

  1. Every entry now says who typically fixes it. A Fixed by bullet follows Effort on all 51 scored tests and on the tests beside them that are run but never scored: one to three of six roles, the first being who typically does or drives the work. A new section, Who fixes it, defines the roles. They are guidance for the reader of a result, so a failed firewall rule and a thin About page do not land on the same desk, and they carry no points.
  2. The roles are written here and nowhere else, as the questions are: a scanner or a report that names who fixes a test reads it from this document.

#11.2 — 2026-10-03

A minor bump: no weight, gate, band or detection rule changed, and a score under 11.2 is identical to the same site's score under 11.1. The revision is to how the Index explains itself.

  1. Every test now carries a plain-language Question and a Why this matters. The question is the first bullet of each entry. Why this matters follows Measures and has a description, a link to a source that is not us, and one sentence on why that source is worth citing. Until now only the thirteen Primary Indicators had a question, and the rest of this was kept outside the document, so what a report said about a test and what this document said could differ. They cannot now: a scanner reads those words from here.
  2. Every test has them, the Leading Indicators and Best Practices that never count toward the score included. Fifty-four questions are new.
  3. The Primary Indicators section says why those thirteen are the quick scan.

#11.1 — 2026-09-30

A minor bump: no weight, gate or model changed, and scores from 11.0 and 11.1 remain comparable. They are not identical. Two tests that a quick scan held below their top band now reach it, so a Primary Indicators score can rise by up to one point against 11.0 with nothing changed on the site. A full scan can move by at most the same amount, and only through AIR-1.10.

  1. AIR-1.10 no longer asks whether llms.txt is generated. The question could not be answered from outside, so the test was capped at band 3 until a client attested to it, and a valid, current file that nobody could vouch for lost half a point. It is auto now. The bands measure what a scanner can see: valid and covering at least 75% of the sitemap is band 4; valid but below that is band 3; the old floor at 25% (band 2, "clear staleness") is gone, so a valid file with working links scores 3 however little it lists. The Drupal module is reported as evidence only. AIR-1.10 leaves the list of tests an attestation can lift.
  2. The Primary Indicators scan resolves sameAs links, up to five, tier-1 identifiers first. AIR-1.12 used to be held at band 3 in a quick scan because those hosts belong to somebody else and requesting them tells them which site is being audited. That is accepted, and bounded by the limit. With both held-back tests released, the thirteen can earn their full 30 points.

#11.0 — 2026-09-24

Scores computed under 10.x cannot be compared with scores computed under 11.0. Seventeen tests left the hundred, one dimension was removed, every remaining test was renumbered, and eleven points moved. Every number moved.

  1. Seventeen tests were returning the same answer for every site. Measured, not guessed: across every production scan on record, seventeen tests in dimensions 2 through 8 had never once produced a different result. A test that cannot separate two sites is not measuring anything; it is a constant added to every score, and sixteen points of the hundred were being handed out for nothing. They are all still run and still reported — as Leading Indicators (LI-1 through LI-7) and Best Practices (BP-1 through BP-9), beside the hundred rather than inside it.

  2. The hundred is 51 tests, and every one of them is observable. The Index no longer has a single scored test in manual mode. What the scanner cannot see for itself is reported as a best practice; what carries points is something the crawl establishes. auto-partial remains for the fifteen points held below band 4 pending a confirmation only the client can give.

  3. Dimension 8, Measurement and instrumentation, was removed. Whether a channel group exists in somebody's analytics, whether their access logs are queryable, whether a prompt panel runs monthly — none of it is visible from outside, and all of it was scoring the same everywhere. It is now the Best Practices family, which is where advice that a scan cannot verify belongs.

  4. Seven dimensions, reweighted. Primary Indicators 28 → 30; Rendering and Extraction 15; Structured Data and the Entity Graph 14 → 15; Crawl, Index and Licensing Hygiene 14 → 12; Authorship, Provenance, Freshness 8 → 12; Agent Interfaces 7 → 8; Alternate Representations 7 → 8. The eleven points freed by the removals went to tests that already separate sites rather than into a new one.

  5. AIR-3.8 measures the markup instead of asking about the build. It used to ask whether schema validation ran in CI — unobservable, and so worth two free points to everybody. It now parses every structured-data block on every sampled page, holds each node against the properties its declared type needs, and checks that dates are ISO 8601, that URLs are absolute and that a price carries a currency. Worth 2 points now rather than 1, and AIR-3.3 gave up the point to pay for it.

  6. Everything is renumbered, with no gaps. Removing a dimension and moving seventeen tests out of the hundred left holes across every family, and an id that means nothing is worse than an id that changed. There is no mapping table on purpose: the numbers are not comparable across this bump, and a table would invite somebody to pretend they are.

#10.4 — 2026-09-24

Two dimensions renamed. No weight, band, gate or scoring-model change, and no score computed under 10.3 moves.

Dimension 1 is now Primary Indicators, and dimension 9 is now Leading Indicators.

  1. "First contact" named a moment; the dimension measures a condition. It holds the thirteen highest-signal tests, pulled from six other dimensions because each can be answered from a single page — which is also what makes them the free scan's thirteen. "Primary" says what they are to the reader: the first things to get right, and the ones that decide whether anything below them can be read at all. The free scan takes the same name, so the page somebody lands on and the dimension it reports are no longer two products with one set of tests.

  2. "Unscored leading indicators" said the same thing twice. Leading indicators are unscored by definition — that is what the tier means, and the dimension's own section has said so since 10.0. The word was carried in the name to prevent a misreading that the zero in the weight column already prevents.

Scores are comparable across this bump. Both dimensions keep their ids, their weights, their tests and their band anchors. A result scored under 10.3 and the same evidence scored under 10.4 produce the same number; only the two labels differ. Earlier changelog entries keep the names in use at the time, because they are a record of what happened rather than a description of the Index today.

#10.3 — 2026-09-21

Ten more verticals for AIR-3.3, and an explicit "other". No weight, band or scoring-model change, and no score computed under 10.2 moves.

AIR-3.3 is scored against the client's declared vertical, and five were published: higher education, healthcare, nonprofit, government and research. Every other kind of organization had nothing to declare, so the test left their denominator as not declared — correct, but it meant an ecommerce site or a manufacturer could never be measured on the one test about modelling what they actually contain.

Nine are added — ecommerce, financial services, hospitality, local services, manufacturing, media, professional services, real estate and SaaS — each with its expected type set above. The five that existed are byte-for-byte unchanged, in both their stored values and their type sets, so a site scored under 10.2 scores identically under 10.3.

other is the tenth, and it is deliberately different: it carries no expected type set. A client who tells us their industry is not on the list has told us something true, and marking them against types the Index never defined for them would be scoring them for our own gap. AIR-3.3 is therefore not scored for other and the report says why, with an invitation to tell us the industry so a set can be added.

A client with no vertical at all is unchanged in every respect: still not declared, still out of the denominator, still the same score.

#10.2 — 2026-09-17

Corrected detection for AIR-1.2. No weight, band or scoring-model change, but a site's AIR-1.2 result can move, because the old one was measuring the wrong thing.

The edge probe sent each agent's bare token as its entire User-Agent header — a literal User-Agent: GPTBot. No crawler sends that. Edge protection keys on the real signature: a browser-shaped prefix, compatible; <Token>/<version>, and the vendor's contact URL. So the probe walked straight past the rules it exists to find, and a site whose CDN was turning GPTBot away scored as though it were letting GPTBot in.

Measured on readinessindex.io on 2026-09-17, against an edge running Cloudflare's AI-crawler blocking: probing as GPTBot and CCBot was served 200, while the real strings for the same two agents were served 403 by the same edge on the same request path. The Index reported 2 of 8 agents blocked. Four were.

AIR-1.2 is a gate. Under-detecting here does not shade a number slightly — it hands a site the one verdict the Index exists to raise, AI assistants can reach you, when they cannot.

  1. The probe now sends each agent's real User-Agent string, listed in PROBE_USER_AGENTS with its provenance: OpenAI and Perplexity publish theirs verbatim, and Anthropic, Common Crawl and ByteDance do not, so those three are the canonical observed forms and are marked as such.
  2. Findings still name the bare token. It is what a reader recognises and what they would write into robots.txt; the full string belongs on the wire, not in the report.
  3. Version drift is expected and harmless. OpenAI moved GPTBot from 1.2 to 1.4 without announcement. Edge rules match the shape and the token rather than the digits, so a stale version still probes honestly — a bare token does not.

A site that passed AIR-1.2 under 10.1 and fails it under 10.2 was failing all along. Re-scan before concluding anything from a comparison across this boundary.

#10.1 — 2026-09-17

Clarifications and two scanner switches. No weight, band or scoring change — a site scored under 10.0 and the same site scored under 10.1 report the same number from the same evidence.

  1. Rounding is now stated in the specification, in Rounding, and the full accounting. It always happened; it was never written down. Every points figure shown to a reader is a whole number, roughly a third of a run's rows round to get there, and the score is computed from the exact contributions and rounded exactly once at the end — so a report's printed rows do not sum to its printed score. Implementers must publish the arithmetic and must never compute a score from figures they have already rounded.
  2. Every result carries a full accounting, reachable from the foot of the report: every test, its weight, its band, weight × band ÷ 4 written out, its exact contribution, the figure printed instead, and the final division. It recomputes the score from weight and band rather than reprinting the stored figure, so a disagreement between the accounting and the report is visible rather than silent.
  3. Resolving external identifiers has a rule of its own, in Resolving external identifiers. A third party's availability is never a fact about the client's site: a timeout against ORCID records one link unconfirmed, and must neither fail the scan nor score the client down. What the audit disclosed, and to whom, is recorded in the evidence.

#10.0 — 2026-09-17

Every test is scored. Nothing outside dimension 9 leaves the denominator any more, on any run a person is shown. A test the engine cannot band from evidence resolves to a band by rule instead of dropping out — full marks where the site has none of the thing, a held band 2 where the answer is invisible from outside, zero where the test it builds on is not passing. The full model is in Applicability and N/A above.

Scores are not comparable across this boundary, in either direction. Both halves of the fraction moved: the denominator is now the full 100 on every site, and tests that contributed nothing now contribute a band. The reference fixtures show the size of it — the clean site reads 84 of 100 where it read 93 of 69, and the weak site 50 where it read 38 of 55. A site that scored under 9.x and re-scores under 10.0 must have both numbers shown side by side, per the versioning rule, and neither number is wrong: they are answers to two different questions.

  1. The rule. Applicability resolution is unchanged — it still decides whether a test has anything to find. What changed is what happens to its verdict: precondition_not_met, vertical_mismatch and dependency_not_applicable score 4; not_declared_in_engagement_profile, no_attestation and insufficient_evidence are held at 2; dependency_not_met scores 0. Two reasons are deliberately not in that table — check_not_implemented and scanner_error both mean we failed, not the site, and inventing a band for our own defect would hide it.
  2. Held is not earned. A held test carries band_capped_at: 2 and the cap reason awaiting confirmation from your team, exactly as an unattested_ceiling always has, so earnable_points falls and confirming it can still move the score. A report that showed 100 points available where only 87 could be reached would be selling points nobody can buy.
  3. The backlog now ranks by what is reachable, not by raw weight. points_available is earnable − earned rather than weight − earned. This fixes an older bug in passing: a test held by a first-run cap or an attestation ceiling used to promise its full remaining weight at the top of the backlog, and no amount of work on the site could collect it.
  4. Every scored row carries evidence. A test banded by this rule records what was looked for, what came back, and what it scored — so we found none of this is checkable in the same place as any other finding, rather than being an assertion.
  5. Two exemptions, both for runs nobody is handed. The quick scan (thirteen tests, a fixed published ceiling) and the census (population statistics, where our blind spot must not be reported as an industry result) keep the 9.x behavior via score_everything: false.

Why now. The self-serve full scan made the old model's cost impossible to ignore. Nobody filling in a URL box declares an engagement profile, so a real report came back with 52 of its 100 points unassessed, 19 of them for want of business facts alone — and the rows that carried them told the reader neither a result nor anything to do. The Index is named for a hundred points. It should score them.

#9.0 — 2026-09-16

A new dimension, not a new score. Every leading-tier test — measured and reported since 4.0, never scored — moves out of the dimension it happened to be filed under and into its own: #9 · Unscored Leading Indicators, declared at 0 of the 100 points, last in dimension order. Nothing about why a leading test doesn't count changes; what changes is that it no longer sits inside a dimension whose own heading implies every one of its tests carries weight. A reader adding up a dimension's own rows now gets that dimension's own declared total, every time — before this, seven of those rows didn't, because they were leading tests hiding in plain sight in dimensions 3, 4, 5, and 6.

  1. Six tests move, ten more renumber to close the gaps they leave. tests.yaml (then checks.yaml) stays grouped and numbered by dimension (6.0's own rule), so a check moving dimension is a check getting a new id:
    • AIR-3.5 (HowTo) → AIR-9.1, AIR-3.6 (speakable) → AIR-9.2. The four that followed them close the gap: AIR-3.7 → AIR-3.5, AIR-3.8 → AIR-3.6, AIR-3.9 → AIR-3.7, AIR-3.10 → AIR-3.8.
    • AIR-4.11 (IndexNow) → AIR-9.3. Last in its dimension; nothing behind it to renumber.
    • AIR-5.7 (editorial policy) → AIR-9.4. Also last; same reason.
    • AIR-6.1 (NLWeb endpoint) → AIR-9.5, AIR-6.3 (domain MCP server) → AIR-9.6. The seven that followed close the gap: AIR-6.2 → AIR-6.1, AIR-6.4 → AIR-6.2, AIR-6.5 → AIR-6.3, AIR-6.6 → AIR-6.4, AIR-6.7 → AIR-6.5, AIR-6.8 → AIR-6.6, AIR-6.9 → AIR-6.7.
    • The one dependency naming an id that moved is updated to match: the test now numbered AIR-6.1 (formerly AIR-6.2) required AIR-6.1 before this change; it requires AIR-9.5 now, the new number for the same test it always depended on.
  2. No weight, band, or score changes. Every test kept its own weight; every dimension holding only core tests kept its own declared total, because removing a test that never contributed to it changes nothing about the sum. A site scored under 8.0 and the same site scored under 9.0 report identical numbers everywhere except which id and dimension two handfuls of findings print under — the same guarantee 6.0 made for the same reason.
  3. A related bug, caught while building this: a dimension's own applicable/earned points included any leading test inside it. Scoring itself was never affected — score_run's own total already excluded leading tests — but _dimension_results didn't apply the same exclusion, so a dimension holding one could show a share-earned number diluted by a test that was never part of its denominator. Dimension 9 would have inherited this as a dimension that could show nonzero earned points against a declared weight of zero — negative points "left," on the one dimension where that number most needs to read as exactly zero. Fixed in the same change: leading tests are now excluded from a dimension's own applicable and earned totals, everywhere they're computed, not only in the overall score.

#8.0 — 2026-09-16

A convention change, not a scoring one, bumped major because it touches the one canonical dimension label everywhere it's used. A dimension heading now reads #1 · First Contact · 13 tests · 28 pts rather than 13 checks · 28% weight — the dimension's own weight, shown as points, not re-expressed as a percent of the total (every other number on the site already reads as points, and the percent was the odd one out). The site's own word for what it audits is "test" now, not "check" — the nav, the footer, the scan pages. Nothing is re-scored: a check's id, weight, and band are exactly what they were; only what the page calls it changed.

#7.0 — 2026-09-15

A major bump on both the letter and the spirit of the rule. Seventeen checks change weight, and for the nine that were at zero this is not accounting — a check worth zero points cannot move a score, and now every one of them can. Re-score before comparing a 7.0 result to anything earlier.

  1. No core check weighs zero. The nine checks 5.0 rounded to zero on the 100-point scale — AIR-5.5, AIR-5.6, AIR-6.4, AIR-6.5, AIR-7.4, AIR-8.1, AIR-8.2, AIR-8.6, AIR-8.7 — each now carry at least 1 point, funded by moving weight rather than by widening the scale. A check in the Index is a claim that something is worth measuring; a check worth nothing was a claim the number itself contradicted.
  2. Three dimensions could not fund their own floor. Agent interfaces (9 checks) and Measurement and instrumentation (7 checks) each totaled fewer points than they have checks — mathematically, some of them had to be zero. Both dimensions' declared weight rises to match their own check count (5 → 7, and 3 → 7), every check in each now weighing exactly 1. Alternate representations funds its own zero-weight check from within its existing 5, plus 2 more for the same reason (5 → 7), landing at 1/2/1/2/1 across its five checks rather than the flat 1 the other two dimensions reach.
  3. First contact funds the difference: 36 → 28. The 8 points the other three dimensions needed come from here, not from Structured data or Crawl, index and licensing hygiene — First contact is still by far the heaviest dimension, and the two checks it gates on (AIR-1.1, AIR-1.2) keep their weight of 5 each unchanged; the reduction is absorbed by the other eleven, heaviest first, none dropping below 1.
  4. Dimensions are still declared in descending weight order — see Weights — which is why Alternate representations lands at 7 rather than the 5 its own checks would otherwise need: dimension 7 must weigh at least as much as dimension 8, and dimension 8's own floor is 7.

#6.0 — 2026-09-11

A major bump, on the letter of the versioning rule rather than its spirit, same as 5.0. No check's detection, band anchor, gate, or weight moved. What changed is how a check is named.

  1. Every check is renumbered so its id prefix names its own dimension. AIR-1.1 through AIR-1.13 are Dimension 1, AIR-2.1 through AIR-2.6 are Dimension 2, and so on through AIR-8.7 — this reverses 5.0's decoupling (above), which let a check's id and its dimension field disagree. The registry (then checks.yaml, now tests.yaml) is now grouped and ordered by dimension, and _validate_ids enforces the ascending order that follows from it.
  2. The id prefix itself changes, from AR- to AIR-. Every check id, every anchor (#air-1.1, not #ar-1.1), and every mention of a check anywhere the site or this document names one, uses the new prefix.
  3. A dimension has one canonical label, used everywhere one is named: #N · Title Case Name · N checks · W% weight — for example, #1 · First Contact · 13 checks · 36% weight. The methodology page's own dimension headings and the checks list both follow it now.
  4. Nothing is re-scored. A site scored under 5.0 and the same site scored under 6.0 differ only in which id and dimension label each finding is printed under, not in any check's verdict, weight, or band.

#5.0 — 2026-09-10

A major bump, on the letter of the versioning rule rather than its spirit. Nothing here changes what a check detects or how a band is assigned — no detection logic moved, no band anchor moved, no gate moved. What changed is the accounting underneath the checklist, which is exactly the kind of change the rule says must never happen silently.

  1. Weights are integers, on the same 100-point scale. Every dimension total and every check weight is now a whole number, and the eight dimension totals still sum to exactly 100. That forces nine checks — AIR-7.4, AIR-5.5, AIR-5.6, AIR-6.4, AIR-6.5, and four of the five checks in Measurement and instrumentation — to round to zero: each was already worth less than half a point, and a 100-point scale has no smaller unit to give them. A check worth zero points cannot move a score. That is a known, accepted cost of staying on 100 rather than moving to a finer-grained scale, not an oversight — recorded here rather than left for someone to discover. The leading tier's own weights (measured, still never scored) round the same way, with a floor of 1 rather than 0: they describe a real practice worth naming even at the bottom of the scale. (Fixed in 7.0, below — every core check now floors at 1 too, by moving weight rather than by widening the scale.)
  2. A dimension is a field, not a naming convention. The registry used to validate that a check's id prefix matched its dimension — AR-2.3 (now AIR-1.7) had to live in dimension 2. That coupling is gone. A check's id is permanent from the day it is written; which dimension it is grouped under can move, and now does. (Reversed in 6.0, below — the id prefix is coupled to the dimension again, this time by renumbering the check rather than by validating against it.)
  3. First contact is a new dimension: exactly the 13 checks the free quick scan runs, pulled out of six different dimensions they used to sit in. The quick scan's own weight and the number this document states for Dimension 1 are now the same claim — they used to be two different sums that happened to disagree. AIR-4.1–AIR-4.4 (RSL, Web Bot Auth, X-Robots-Tag) — what was left of the old Dimension 1 once its quick-scan checks moved out — folded into the old Dimension 2, renamed Crawl, index and licensing hygiene, so the Index still has 8 dimensions, not 9.
  4. Dimensions are ordered by weight, descending; checks within a dimension the same way, gates pinned first. Both orders are computed from the registry, never a hand-maintained list — see Weights, and every ### AIR-x.y section in this document, for the result.
  5. Nothing is re-scored. Every scan already on record keeps its 4.0 stamp and renders exactly as it did the day it ran; the Census stays on 4.0 until it is next run. AI-READINESS-INDEX.md's own rule above — re-score before comparing across a major bump — still applies to anyone who wants to line up a 4.0 result next to a 5.0 one; nothing here does that automatically, because nothing here changed what a re-score would find. A site scored under 4.0 and the same site scored under 5.0 differ only by integer rounding, not by any check's verdict.

#4.0 — 2026-09-08

A major bump, and the versioning rule applies in full. Any site scored under 3.x must be re-scored under 4.0 before its number is compared to anything.

  1. A gate failure no longer caps the score. total is the site's real, uncapped score, computed exactly as in Scoring; gated and gate_failures are reported beside it as a separate fact, never blended into it. The old model produced one number standing for two facts and comparable to neither — a gated site with excellent structure scored identically to a gated site with none. ungated_score, ungated_grade, and the Gated grade are gone rather than kept as duplicates of what total and gated already say between them. See Gates.
  2. A leading tier exists for checks with essentially no 2026 adoption. Six checks move out of the hundred points entirely — scoring them would subtract the same points from every site, which moves nobody relative to anybody. They are still run and still reported, as leading_adopted of leading_total (adopted meaning band 2 or better), so a site gets credit for being early without it changing anyone's score.

#3.0 — 2026-09-07

A major bump, and the versioning rule applies in full. Any site scored under 2.x must be re-scored under 3.0 before its number is compared to anything.

  1. The crawler obeys the robots.txt group addressed to it. Until now the scanner read robots.txt only to score it, and crawled regardless of what it said about the scanner itself. It now honors a Disallow addressed to its own product token, and a site that turns it away is recorded as exactly that — robots.txt is still fetched, so AIR-1.1 still resolves and the gate still answers, while every other check reports insufficient evidence. This changes which URLs are sampled, and therefore what a site can score, which is why the version is 3.0.
  2. A blanket User-agent: * disallow does not stop the crawler, and the reasoning is now published rather than implied. Crawl-delay under * is honored regardless. See Consent.
  3. The AIR-1.2 probe is documented rather than glossed. The behavior has not changed — the probe has always carried other crawlers' product tokens — but the specification previously said we "do not pretend to be somebody else's bot", which was not an accurate description of the wire. It now states what the requests carry and the three constraints that make it measurement rather than impersonation. No score moves; the honesty of the document does.
  4. A survey population is a first-class concept, with the sourcing and citation rules a published measurement needs. See Populations.
  5. Every result carries the Index's effective date alongside its version, so an old report cannot silently start meaning something new.

#2.0 — 2026-09-01

A major bump, and the versioning rule applies in full. The one-time exemption taken at 1.1 is spent. Any site scored under 1.x must be re-scored under 2.0 before its number is compared to anything.

  1. AIR-1.1's bands are anchored on agent class rather than agent count, and the gate now turns on the answer-serving class. Blocking every training crawler costs 2 of 5 points and does not gate; blocking one answer-serving agent does. Under 1.x the table could not tell PerplexityBot from CCBot — both scored band 3 — which meant a site invisible to an answer engine and a site excluded from a corpus were graded identically. This changes which sites are gated, which is why the version is 2.0.
  2. critical severity widens to band 0 or 1 on checks weighing 3.0 or more. A 6-point check at band 1 is not a major finding sitting alongside a missing table caption. Ordering and points are unchanged; only the label moves.
  3. AIR-4.11, AIR-3.1 and AIR-8.7 gain a band 3, and their unattested ceilings rise from 2 to 3 to match. Their tables previously skipped 3, so with a ceiling at 2 the whole observable range was {0, 2} and there was no way to say mostly right.

#1.2 — 2026-09-01

Refinements found while implementing all 68 checks. None changes a weight or a gate. Two change how a band is reached and are recorded here so a re-score is explicable.

  1. @id coverage in AIR-1.11 counts entity nodes only. A ListItem inside a BreadcrumbList, a PostalAddress on an Organization and a SearchAction's EntryPoint are value objects: they have no identity and nothing should reference them. Counting them penalized a site for marking breadcrumbs up correctly.
  2. AIR-1.12 resolution is opt-in. Band 4 requires sameAs links to resolve, which means requesting Wikidata, ROR and LinkedIn — hosts the client never allowlisted, and hosts that learn which site is being audited. The scanner classifies by authority tier from the markup alone and declares an observed ceiling of band 3 until told to fetch.
  3. AIR-6.6 expects an autocomplete token only where the field type implies one (email, tel, url, password). A search box has no sensible token and must not be marked down for lacking one.
  4. "Widespread" in AIR-4.6 needs a count as well as a share. One three-hop chain on a two-page site is a finding, not a systemic failure.
  5. Every band ceiling now states its reason in the result and in the report: awaiting a baseline run, awaiting confirmation from the client, limited by the band attested, or needing review by a person. A client told a number was held down is owed the reason.
  6. AIR-4.11's detection method is weaker than this document implied. The IndexNow key file is named after the key, and the key is not published, so a third party can only find it where the site advertises it. A negative result is not discoverable, which is weaker than absent, and the check says so.
  7. AIR-5.6 is not implemented. Reading C2PA manifests means parsing image and PDF bytes. The check reports that it had no evidence and leaves the denominator rather than scoring a site zero for a measurement nobody took.

#1.1 — 2026-09-01

Twelve gaps found while building the first scanner against 1.0. Several of these would ordinarily force a major bump, because they change how a score is computed. They are landing as a minor bump because no site has ever been scored under 1.0 — the scanner did not exist yet, so there is no trend line to break. This exemption applies once. Every change after this one follows the rule above.

  1. Automated coverage now counts auto-partial at half weight. Under the previous wording the metric could not exceed 0.83, while this document's own example result showed 0.87 — arithmetically unreachable.
  2. Attestations may lift an auto-partial band ceiling, never set or lower a band. Four checks (AIR-4.11, AIR-1.10, AIR-3.1, AIR-8.7) had a top band this document itself says requires attestation, and no mechanism to supply one.
  3. Cross-run checks cap at band 3 on a first run (AIR-6.9 at 2) and lift with a supplied baseline. AIR-4.8, AIR-2.4 and AIR-6.9 previously required a second audit with no definition of what run one does.
  4. The ten AI agents are sorted into three classes. AIR-1.1's bands referenced categories the document never defined, and AIR-1.2 asked us to probe two user-agents that no crawler ever sends.
  5. Money-page double weighting is defined as counting 2 in both sides of the coverage rubric. Previously asserted and never operationalized.
  6. A gated run grades as Gated and gains an ungated_grade field. The bands table offered two labels for the same run.
  7. "Requires AIR-X.Y to pass" means band ≥ 2, with N/A cascading to dependents. Previously undefined against a 0–4 scale.
  8. Business-fact applicability comes from a declared engagement profile, never inference. Undeclared scores N/A with a reason.
  9. A 25-URL representation sub-sample bounds AIR-4.4, AIR-7.2, AIR-7.4 and AIR-7.5, which together would otherwise triple the request count against a client's origin.
  10. confidence is an enum: high, medium, low.
  11. AIR-2.1 coverage clamps to 1.0 and excludes empty renders; a missing robots.txt scores AIR-1.1 band 4; score_pct is null where nothing applies; backlog ties break on check ID; site.cms is best-effort and nullable.
  12. Rounding happens once, and the file records that per-check points will not sum exactly to the total.