Status
The Score is under development and nothing is scored yet. The weights described on this page are asserted rather than measured: they follow published evidence, but no experiment of ours has yet shown that changing an attribute changes what an engine can do. The validation study that would establish it is designed, costed, piloted and unrun.
Validating it is what the measurement programme is for. This page documents the model as it stands, in full, so that when a number does appear the thing that produced it was written down first — and so that the gap between what is specified and what is built is visible rather than implied.
AIGuardian scoring model v11 · 13 attributes · 4 dimensions · measured on the rendered document
One crawl,
two questions.
An AI system can read your site without being able to use it. Those are different capabilities, they fail for different reasons, and only one of them has evidence behind it today. So we score one and observe the other — and say which is which.
The splitTwo kinds of agent want two different things.
Every page is examined twice, against two constructs. The distinction is not a matter of degree — a page can be excellent for one and poor for the other, and the fixes have almost nothing in common.
Information agents
Retrievability
Whether an engine can obtain and use the information on the page.
- Can I fetch the content?
- Is it there without executing JavaScript?
- Can I tell what the page is about?
- Does an extracted passage still make sense alone?
This is what search and answer engines do when they cite you. It is the construct the validation programme is built around, and the only one that produces a number.
13 attributes · 3 dimensions · 1 gate → a 0–100 Score
Action agents
Interface operability
Whether an agent can perceive, navigate and interact with the interface.
- Can I identify the controls?
- Do I know what they do?
- Can I navigate without hovering?
- Did the task actually complete?
These are measured on every page and reported alongside the Score. They carry no weight in the Score, because nothing yet demonstrates that changing them changes what an agent can do.
4 attributes · recorded → Observations, no weight
one crawlper page
static HTMLbefore JavaScript
rendered DOMafter JavaScript
Both documents are stored byte-exact for every page. Scoring v11 declares that its page-grain attributes are measured on the rendered document, and a page missing that document is unmeasurable rather than quietly measured on the other one.
The score4 dimensions, 3 of them still asking questions.
The Score is a weighted composite over 4 dimensions. Some have handed weight back — attributes found to carry no information were removed, and the allocation they held was retired rather than redistributed. That distinction is the point: a reader can see how much of each dimension is doing work.
Governance & Agent Access
2 active, 70% retired
29.4%
Semantic Clarity & Machine Readability
7 attributes, all active
29.4%
RAG & Token Efficiency
4 active, 18% retired
41.2%
Agentic Operability
0 attributes active
observed
only
active — still asked of every siteretired — the question is no longer asked of anyone
Retired weight leaves the sum, not just the numerator
When an attribute is removed, its share is not written onto the survivors. If it were, you would meet a healthy-looking dimension with no way to learn that most of its allocation had been withdrawn. Retired weight leaves both numerator and denominator, so the dimension still spans 0–1 and no site is charged a constant it cannot influence. The percentages on the right are what each dimension is worth after the fully retired one leaves the denominator — which is why they do not match the weights the config declares.
The gateOne condition multiplies instead of contributing.
Share of OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User and PerplexityBot permitted at /. These are the crawlers that decide whether an engine can find and cite the page. Training crawlers (GPTBot, ClaudeBot, CCBot, Bytespider, Google-Extended) are deliberately NOT counted here — blocking them has no effect on citation, and penalising it would score a commercial decision as a technical defect. See ADR 0006.
Blocking a retrieval crawler is not a weighted shortfall — the engine will never fetch the page, and its heading order and structured data become irrelevant. So it multiplies, per engine, with a floor of 0.25: a blocked origin is still read by people, still driven by an agent with a browser, and still fetched when someone points something at it directly.
anthropic
Claude-SearchBot, Claude-User
gemini
unmeasurable — no isolating directive
An engine with no parseable token is recorded as unmeasurable rather than open, and engines are averaged over the ones that could be measured. A site invisible to one engine and open to another is not “60% gated” — those are different facts about different products, and different fixes.
The action agent spaceWell measured is not the same as validated.
Agentic Operability retired its whole allocation. Its measures are well defined, they vary widely across the population, and they are plainly relevant. They are Observations anyway, on the criterion that decides everything here: the construct they belong to has not been shown to predict the outcome it claims to predict. Nothing establishes that an agent fails more often on a div carrying a click handler than on a button — and a weight follows published evidence or it is not a weight.
interactive_accessible_name_coverage
observation
Controls carrying an accessible name
native_semantic_control_share
observation
Controls that are native elements
form_field_label_coverage
observation
Form fields carrying a label
nav_reachable_without_hover
observation
Navigation reachable without hover
The route back is an experiment, not an argument: Observation → experimental validation → Signal → evidence-backed weight. A page can be excellent for retrieval and poor to operate, so the two are never averaged.
What is measuredEvery attribute, and what it costs to fix.
Governance & Agent Access
29.4% of the Scorecors_readable
0.15 · origin · trivial
Access-Control-Allow-Origin permits cross-origin reads.
sitemap_present
0.15 · origin · trivial
A sitemap is discoverable via robots.txt or a conventional path.
Semantic Clarity & Machine Readability
29.4% of the Scoreheading_no_skipped_levels
0.2 · page · moderate
Share of heading transitions that descend by at most one level.
jsonld_present
0.15 · page · moderate
At least one syntactically valid JSON-LD block.
heading_single_h1
0.15 · page · moderate
Exactly one H1.
image_alt_coverage
0.15 · page · moderate
Share of content images carrying a non-empty alt. Anchored at 0.95 rather than 1.0 because decorative images correctly carry empty alt.
title_meta_present
0.15 · page · trivial
Both a non-empty <title> and a meta description.
jsonld_type_coverage
0.1 · page · moderate
Share of JSON-LD blocks declaring a recognised schema.org type (Product, FAQPage, Article, Organization, HowTo, BreadcrumbList).
text_to_code_ratio
0.1 · page · substantial
Visible text bytes over total HTML bytes.
RAG & Token Efficiency
41.2% of the Scorestatic_content_completeness
0.35 · page · architectural
Visible-text tokens in the static HTML over those in the rendered DOM. Low means the content exists only after JS execution and is invisible to every crawler that does not render — the delta that makes storing both Passes worthwhile. Deliberately built on visible text rather than extracted content: the extractor's main-content detection differs between the static and rendered forms of the same page, so an extraction-based ratio measured trafilatura rather than JavaScript.
dom_noise_ratio
0.2 · page · architectural
Raw HTML tokens over extracted-content tokens, o200k_base. Log-scaled because the observed range spans nearly three orders of magnitude (3.9x to 1,599x across a 59-page sample). Unmeasurable when extraction falls below the word floor — a failed extraction produces a spectacular-looking ratio that is a bug, not a finding.
Anchors are set for reachability at both ends. The best anchor sits just above the leanest pages actually observed (3.9x), so excellence is attainable rather than theoretical. The worst anchor marks 99.75% markup overhead, which is unambiguously bad while leaving all but the most extreme pages inside the measurable range.
token_waste_share
0.15 · page · substantial
Share of raw tokens attributable to ablatable constructs — inline SVG, script, style, comments, data-* attributes, class soup. Measured by stripping each category independently so the result is a ranked remediation list rather than a single opaque number.
section_heading_coverage
0.125 · page · moderate
Share of non-empty sections carrying a heading that names their topic. Measured on the document's own sections, so it does not assume a consumer's chunk size.
Missing numbersThree ways a number can be missing. None of them mean zero.
Not applicable
The page has no forms, so form-field labelling has nothing to describe. The attribute leaves that page's denominator.
Unmeasurable
We meant to look and could not — the document was missing, or extraction fell below its floor. Coverage falls and says so.
Retired
This version no longer asks the question of anyone. The weight left both numerator and denominator, and the model records that it did.
A score of 61 at full coverage and a score of 61 at quarter coverage are different claims, so coverage is published beside every Score rather than behind it. An origin with no audited page carries no comparable Score at all — it keeps its disposition and every origin-grain attribute that was measured, and the composite is withheld rather than guessed. Page-grain attributes are combined by median.
← the studies these methods were used for