How we score a site

Every check the Scanner runs, what it is worth, and the standard it is derived from. A score you can't audit is just an opinion — so this is the whole rubric, including the parts that count against us.

How the maths works

Each check scores 0.0–1.0. A category score is the weight-weighted mean of its checks, times 100. The overall score is the weight-weighted mean across every check, so a category's influence is the sum of its weights — currently 28.4 across 22 checks.

A check that doesn't apply to a site is marked not applicable and dropped from both sides of that mean — it is never scored as zero. Weights and scoring rules are versioned; two scores are only compared within the same rubric version, so a change we make never shows up as a regression you caused.

AI-agent readiness

Can an autonomous agent read and act on the page without executing JavaScript? Weight mass 5.0 (18% of the overall score).

CheckWeightDerived from
Server-rendered contentcriticalagent.server_rendered_content2.0Google: JavaScript SEO basicsOpenAI: crawlers and bots
Structured datacriticalagent.structured_data1.5JSON-LD 1.1 (W3C Recommendation)Google: structured data policies
Machine-readable metadataagent.machine_metadata1.0HTML Standard: the meta element
llms.txt / agents.md qualityagent.llms_txt0.5llms.txt specificationLighthouse: llms.txt audit

SEO & crawlability

Can crawlers find, fetch and index the page at all? Weight mass 5.8 (20% of the overall score).

CheckWeightDerived from
robots.txt presentseo.robots_txt1.5RFC 9309: Robots Exclusion Protocol
Title & meta descriptioncriticalseo.title_meta1.5Google: control your title links
Open Graph tagsseo.open_graph1.0The Open Graph protocol
XML sitemapseo.sitemap1.0Sitemaps XML protocol
Canonical URLseo.canonical0.8RFC 6596: The Canonical Link Relation

Performance & accessibility

Is the page fast and usable — for people and for machines? Weight mass 9.0 (32% of the overall score).

CheckWeightDerived from
Accessibility (Lighthouse)criticala11y.lighthouse2.0WCAG 2.2 (W3C Recommendation)
Largest Contentful Paintcriticalperf.cwv_lcp2.0Largest Contentful Paint (web.dev)
Cumulative Layout Shiftcriticalperf.cwv_cls1.5Cumulative Layout Shift (web.dev)
Interaction to Next Paintcriticalperf.cwv_inp1.5Interaction to Next Paint (web.dev)
First Contentful Paintperf.cwv_fcp1.0First Contentful Paint (web.dev)
Speed Indexperf.cwv_speed_index1.0Lighthouse: Speed Index

Security

Are transport and the standard protective headers in place? Weight mass 8.6 (30% of the overall score).

CheckWeightDerived from
HTTPScriticalsecurity.https2.0RFC 9110: HTTP Semantics
Content-Security-Policycriticalsecurity.csp1.5Content Security Policy Level 3 (W3C)
HSTS headercriticalsecurity.hsts1.5RFC 6797: HTTP Strict Transport Security
No mixed contentsecurity.mixed_content1.0Mixed Content (W3C)
X-Content-Type-Optionssecurity.content_type_options1.0Fetch Standard: X-Content-Type-Options
Cookie security flagssecurity.cookie_flags0.8RFC 6265: HTTP State Management Mechanism
Referrer-Policysecurity.referrer_policy0.8Referrer Policy (W3C)

Why llms.txt barely counts

It used to be the heaviest check we ran. The evidence didn't support that: an Ahrefs study of 137,210 domains found 97% of published llms.txt files were never requested at all, and no major provider documents reading one. So we cut its weight and stopped penalising sites that don't publish one — if the file is absent, the check simply doesn't apply. We still grade it when it ispublished, because Chrome's Lighthouse audits it under Agentic Browsing.

That is the standard every weight on this page is held to, and why each one carries a citation. Tell us if you think one is wrong — with a source, we'll change it.