The eight dimensions.
Band descriptors name an element, a number or a state — never “good” or “strong” — so a second reviewer can check a score and disagree with it on the evidence.
RUBRIC-V3.0
First impression
first_impressionWhat a visitor can understand about the offer from the mobile above-the-fold view alone, without scrolling or interacting.
- 0–2Nothing above the fold identifies the business or what it sells — logo and navigation only, an unskippable splash/age gate, or a hero that fails to render.
- 3–4Above the fold is a bare hero image or carousel with no statement of what is sold, or two or more overlays (cookie bar + popup + chat widget) cover the content on load.
- 5–6The visitor must scroll once, or read a secondary element, to work out what is sold; the hero is decorative (stock photo, abstract slogan) rather than explanatory.
- 7–8The offer and the next action are both identifiable without scrolling; at most one element competes with them (cookie bar, promo strip, chat bubble) and it closes in one tap.
- 9–10Above the fold names the product, says who it is for, and shows one next action; at most one primary and one secondary CTA; no overlay obscures the hero; headline and body text are legible at default zoom.
Headline clarity×2
headline_clarityWhether the largest text on the page states what is sold and to whom, in the visitor's language rather than the company's.
- 0–2No H1, or the H1 is the company name alone, or it is an image with no text alternative, or it describes something the page does not sell.
- 3–4The H1 is a brand slogan or feature jargon that cannot be decoded without reading body copy, or several H1s compete on the same page.
- 5–6The H1 is understandable but generic — it would fit a competitor unchanged ("Quality you can trust", "Powering growth").
- 7–8The H1 states the product or outcome and is specific to this business (a competitor could not paste it verbatim); at most one abstract term is used.
- 9–10The H1 names a concrete outcome and the audience in under 12 words with no unexplained jargon, and the sub-headline adds mechanism or proof rather than restating it.
CTA effectiveness
cta_effectivenessWhether a visitor who is ready to act finds one obvious action, understands what it will do, and can reach it without hunting.
- 0–2No call to action anywhere on the page, or every CTA is disabled, broken, or leads off-site to an unrelated destination.
- 3–4The only CTA sits below the fold, is buried in navigation, is rendered as plain text, or is a phone number/email with no tap-to-act behaviour.
- 5–6A CTA appears above the fold but its label is generic ("Submit", "Learn more", "Click here"), or three or more equally weighted CTAs compete for the same click.
- 7–8A single primary CTA is visible without scrolling on mobile, its label states the outcome, and no more than two competing CTAs appear above the fold.
- 9–10Exactly one primary CTA, repeated with the same label and styling at each decision point, its label naming the outcome ("Get my free audit", not "Submit"), visible above the fold on mobile with a tap target of at least 44px.
Trust signals
trust_signalsWhether a first-time visitor is given verifiable reasons to believe the business is real, competent, and safe to transact with.
- 0–2No testimonials, reviews, policies, company identity or contact route — or claims that are demonstrably fake (duplicate stock-photo faces, dead award links).
- 3–4One weak signal only: a generic "as seen in" strip, a security badge image with no issuer link, or a contact form as the sole route to a human.
- 5–6Trust claims exist but are unattributable — anonymous testimonials ("— J.D., happy customer"), unlinked logo walls, round unsourced numbers ("10,000+ customers").
- 7–8At least two independent and attributable trust categories — e.g. reviews carrying reviewer identity AND a published guarantee/refund/privacy position — plus working contact details.
- 9–10Named customers with attributable detail (full name plus company or city, photo or verified review source), a named third-party proof (press, certification, audited figure), a reachable human channel (address, phone, registered entity), and a stated refund or guarantee position.
Mobile readiness
mobile_readinessWhether the page is usable on a 412px phone without zooming, horizontal scrolling, or mis-tapping.
- 0–2Unusable on a phone: layout does not render, a desktop-only table or menu is required, an interstitial cannot be dismissed, or zoom is disabled on illegible text.
- 3–4Horizontal scrolling is required, text needs pinch-zoom to read, elements overlap, or a fixed-width desktop layout has simply been scaled down.
- 5–6Readable but cramped — body text between 12px and 16px, tap targets between 30px and 44px, or a sticky bar/chat widget covering part of the primary CTA.
- 7–8Layout reflows cleanly with no horizontal scroll; at most one interactive target is undersized or one fixed element crowds the viewport.
- 9–10No horizontal overflow, body text at least 16px, every interactive target at least 44px with at least 8px spacing, sticky elements under a quarter of the viewport, and form fields using the correct input types.
Page speed perception
page_speed_perceptionHow quickly the page becomes usable on a mid-tier mobile device on a typical connection, measured rather than felt.
- 0–2Lighthouse mobile performance below 30, LCP over 6s, or the main content never renders inside the measurement window.
- 3–4Performance 30–49, LCP 4.0–6.0s, or INP above 500ms — the wait is long enough that visitors abandon before first paint of content.
- 5–6Performance 50–69, LCP 3.0–4.0s, or CLS 0.10–0.25 — a visible wait or a visible layout shift during load.
- 7–8Performance 70–89 with LCP at or under 3.0s and no single Core Web Vital in a failing band.
- 9–10Performance 90 or above with LCP at or under 2.5s, CLS at or under 0.1, and INP at or under 200ms.
SEO basics
seo_basicsWhether the page gives search engines and answer engines the minimum structured facts needed to index it and quote it correctly.
- 0–2No title, no headings, no meta description and no canonical — or the page blocks indexing (noindex/robots) while serving as a commercial landing page.
- 3–4Title or H1 missing or duplicated, no meta description, no structured data, and alt text on under a quarter of content images.
- 5–6Title present but templated or generic ("Home | Brand"), meta description missing or auto-truncated, no JSON-LD, alt coverage between 25% and 60%.
- 7–8Title, meta description, a single H1 and a canonical URL are all present and specific to the page; some valid structured data; alt coverage at or above 60%.
- 9–10Unique descriptive title (≤60 chars) and meta description (≤160 chars), exactly one H1 over a sensible H2 outline, valid JSON-LD matching the page's actual type, canonical URL, and meaningful alt text on at least 90% of content images.
Conversion flow×2
conversion_flowWhether the path from arrival to the completed action is short, unblocked, and free of steps that give the visitor a reason to stop.
- 0–2The stated action cannot be completed — broken form, non-functional cart or booking, a CTA pointing at a 404, or no path from this page to any conversion at all.
- 3–4Hard blocks on the path: mandatory account creation before any value, more than 8 form fields, or a checkout/enquiry demanding information the page never explains.
- 5–6The path works but leaks: 5–8 form fields, at least one field the offer does not justify (company size for a PDF, phone for a newsletter), or the price only becomes visible after a form.
- 7–8The primary action completes in 3 steps or fewer, every field asked for is justified by the offer, and the main objection (price, timing, commitment) is answered before the CTA.
- 9–10The primary action completes in 2 steps or fewer with 4 or fewer fields, price/terms/delivery are stated before the commitment point, errors are inline and recoverable, and no account or payment detail is demanded before value is shown.
What we did not observe, we may not certify.
Seven signals are collected per audit. Confidence is derived from which of a dimension’s required signals actually arrived — the model gets no vote. A model that can assert its own confidence will assert high for a guess.
page_textPAGE CONTENT (extracted text)dom_signalsDOM SIGNALS (buttons, CTAs, forms, headings, images)meta_schemaDOM SIGNALS → meta/schema subset (title, meta description, JSON-LD)screenshot_mobileSCREENSHOT — mobile viewport (412px)screenshot_desktopSCREENSHOT — desktop viewport (1280px)lighthouseLIGHTHOUSE PERF (real mobile measurements)multi_pageADDITIONAL PAGES (deep audit)
| Confidence | Derived when | Score may fall in | Counts for |
|---|
| High | every required signal present | 0 – 10 | 1× weight |
| Medium | some but not all present | 3 – 8 | 0.75× weight |
| Low | none present — inferred | 4 – 7 | 0.4× weight |
The clamp cuts both ways on purpose. An engine that only capped the top would still invent failures — “no testimonials found” when the page structure was never read is a false accusation about a real business. Unobserved dimensions keep participating at reduced weight rather than being dropped, because dropping them would silently change what the number means between two audits of the same site. The shortfall surfaces as coverage instead.
Weights are data, not opinion.
Base weights sum to 10. A vertical replaces the whole curve rather than nudging one value, so you can read a single column and know the entire weighting.
| Dimension | Base | Ecommerce | SaaS | Real estate | Agency | local_business | Portfolio |
|---|
| First impression | 1 | 1 | 1 | 1 | 1.5 | 1 | 2 |
| Headline clarity | 2 | 1.5 | 2.5 | 1.5 | 2 | 1.5 | 1.5 |
| CTA effectiveness | 1 | 1.5 | 1.5 | 1.5 | 1 | 1.5 | 1 |
| Trust signals | 1 | 2 | 1 | 2 | 1.5 | 1.5 | 1 |
| Mobile readiness | 1 | 1.5 | 1 | 1.5 | 1 | 2 | 1.5 |
| Page speed perception | 1 | 1.5 | 1 | 1 | 1 | 1 | 1 |
| SEO basics | 1 | 1 | 1 | 1 | 1 | 1.5 | 1 |
| Conversion flow | 2 | 2 | 2 | 2 | 1.5 | 1.5 | 1 |
Market modifiers then multiply on top. They make a different claim from a vertical profile — not “this is a different product” but “in this market this dimension costs you more conversions”.
| Market | Modifier |
|---|
| IN | Mobile readiness ×1.25 · Page speed perception ×1.25 |
| ID | Mobile readiness ×1.25 · Page speed perception ×1.25 |
| NG | Mobile readiness ×1.25 · Page speed perception ×1.3 |
| BR | Mobile readiness ×1.2 · Page speed perception ×1.2 |
| ZA | Mobile readiness ×1.2 · Page speed perception ×1.25 |
Code owns the number.
The model returns per-dimension scores and its evidence. It is forbidden from emitting overall_score; if it does, the value is discarded.
effectiveWeight_i = weight_i × confidenceFactor_i
score_i = clamp(modelScore_i, confidenceRange_i)
overall_score = Σ(score_i × effectiveWeight_i) / Σ(effectiveWeight_i)
coverage = Σ(effectiveWeight_i) / Σ(weight_i)
Audit-level confidence falls out of coverage: ≥0.85 high, ≥0.6 medium, otherwise low. Every dimension records what the model said, what shipped, whether it was clamped, and which evidence was missing — so a score is explainable line by line.
Graded against the market it actually sells into.
Detected from the audited site’s own signals — ccTLD, declared currency, hreflang, phone and postal formats, payment brands, regulatory identifiers — and never from the IP of whoever ran the audit.
| Market | Currency | Checks | Regulatory |
|---|
| Global (baseline) | USD | 10 | 2 |
| India | INR | 19 | 5 |
| United States | USD | 15 | 4 |
| United Kingdom | GBP | 14 | 5 |
| European Union (eurozone baseline) | EUR | 15 | 6 |
| United Arab Emirates | AED | 16 | 5 |
| Singapore | SGD | 15 | 4 |
| Australia | AUD | 15 | 4 |
| Global (baseline) | USD | 10 | 2 |
| Brazil | BRL | 15 | 4 |
| Global (baseline) | USD | 10 | 2 |
| Indonesia | IDR | 17 | 4 |
| European Union (eurozone baseline) — serving DE | EUR | 15 | 6 |
| European Union (eurozone baseline) — serving FR | EUR | 15 | 6 |
| Global (baseline) | USD | 10 | 2 |
| Global (baseline) | USD | 10 | 2 |
Overrides run in both directions. The UK tightens the global company-identity check, because the Companies Act 2006 trading-disclosure regime makes a company number mandatory. The US relaxes it, because no federal statute requires publishing one. Auditing a US site as though it were breaking a law it is not subject to is the same class of error as asking a Brazilian site for a RERA number.
Facts with a shelf life.
Core Web Vitals thresholds, AI-crawler user agents, consent regimes, accessibility deadlines — all held as dated data, not as prose in a prompt.
V1.0
The current bundle is 54 dated, sourced rules, generated 2026-09-12, each carrying a source URL and a review date. This is why an audit recommends optimising INP rather than FID — and why correcting a fact like that is a data edit and a version bump, not a prompt rewrite.
Does the score predict anything?
The test we hold ourselves to: audits where the owner marked a recommended fix as shipped, re-audited automatically after 30 days, same URL and same rubric version — measured against sites that were re-audited and shipped nothing.
Not enough data to publish yet — 0 completed 30-day pairs against a floor of 30.
We publish this at the same n ≥ 30 floor the benchmark index uses, and not before. A median over a handful of sites is an anecdote with a decimal point, and quoting one here would undermine everything above it.
Think a score is wrong?
A rubric you cannot argue with is a black box with extra steps. Quote the band you think applies and the element on your page that meets it. Corrections that hold change the rubric — and the rubric version changes with them.