Skip to content

Test your website now

Free, no card. We read only public pages.

Run free audit →

Transparency

Scoring methodology

A score is only useful if you can reconstruct it. Here is the exact arithmetic behind every number in the product.

1. Category weights

Each category is scored 0–100 independently, then combined into the overall score using these weights. They total 100, so a full audit’s overall score is a weighted mean and no category is silently worth more than its row says. One cap applies on top: when at least 30% of the pages that answered (4xx answers aside) returned a server error, the overall is at most 74 (Needs work); at 50% or more it is at most 49 (Critical). The cap needs at least 2 such pages, and the report says when it lowered the score. A scan mode that measures only some categories divides by the weights of those categories, so the ones it skipped are absent from the average rather than counted as perfect.

CategoryWhat it coversWeight
SecurityHeaders, TLS, cookies, exposure surface22%
PerformanceCore Web Vitals readiness, payload, caching16%
SEOIndexability, metadata, structure, links14%
AccessibilityWCAG signals, semantics, contrast12%
UX qualityClarity, states, navigation, trust10%
TechnicalStatus codes, rendering, assets, canonicals10%
ComplianceGDPR, policies, consent, transparency8%
Mobile readinessViewport, tap targets, responsive integrity5%
Browser compatEngine coverage, fallbacks, legacy risk3%

2. Severity penalties

Every category the scan MEASURED starts at 100. Each finding subtracts a penalty, and the result is clamped to 0–100. The penalty has three parts: the severity below, how confirmed the finding is (step 3), and how much of the site it affects (step 4).

A category the scan did not measure gets no score at all - not 100, not 0. It is reported as not measured and carries no weight in the overall, which is why a narrower scan mode reports the score of what it looked at rather than a flattering average with perfect marks for everything it skipped.

SeverityPenaltyWhat it means
Critical−25Exploitable or business-breaking.
High−12Material risk or measurable user impact.
Medium−6Best practice violation with indirect impact.
Low−2.5Polish, hygiene and minor deviations.
Info−0.5Advice rather than a defect. Scored lightly, except the zero-weight checks listed below.
Manual check0Held out of the score until you attest or dismiss it.
Not applicable0Not applicable to the detected stack. Never a penalty, never a pass.
penalty  = severity × status × page_spread
category = clamp(0, 100, 100 - Σ penalty)      // measured categories only
overall  = Σ(category × weight) / Σ(weight)   // summed over the MEASURED ones
                                              // a full audit measures all ten,
                                              // so that divisor is 100

These are the numbers the engine computes with, rendered from the same modules it reads - the penalties and status factors from packages/shared/src/scoring-engine.ts, the category weights it combines them with from packages/shared/src/scoring.ts - rather than restated here. Until this audit they were restated, and all four were wrong.

One exception is made by check rather than by severity. These checks report their value and cost nothing in any category, whatever their severity and status, when the category that scores them is part of the scan, because another check already scores the same measurement. They still run, still fail or warn, and still appear on the report and in the checklist:

  • perf.mobile.lcp (Mobile LCP under 2.5 s), scored once as perf.cwv.lcp (Largest Contentful Paint under 2.5 s).
  • seo.links.broken-internal (No broken internal links), scored once as tech.status.ok (Page returns a successful status).

3. How confirmed a finding is

A finding's status scales its penalty. An open failure costs full price; something we can only infer costs a quarter, because charging full price for a guess is how audit tools lose an argument with a developer.

StatusFactorWhy
fail×1An open finding, confirmed.
warning×0.5A signal that needs a look but is not proven broken.
needs_review×0.25An inference we will not charge you full price for.
pass×0Nothing to pay.
fixed×0Resolved since the last scan.
ignored×0You decided it does not apply.

Manual checks carry a penalty of 0 whatever their status, so an unreviewed checklist never silently deflates your grade - and never silently inflates it either. They are reported as unresolved, not as passes.

4. How much of the site it affects

A problem on one page out of fifty is not the same as a problem on all fifty. The spread multiplier runs from 0.5 for a single page to 1.0 for every page, so a site-wide misconfiguration costs twice what an isolated one does.

page_spread = 0.5 + 0.5 × (affected_pages / total_pages)

What does not affect the penalty is which page it is. Every page counts the same. Three pages on this site previously said otherwise - that checkout and pricing carried more weight than a blog archive - and no such term has ever existed in the model.

5. Coverage confidence

Every scan reports a confidence value from 0 to 1 beside its score. It is not part of the arithmetic above - it answers a different question: how much of the applicable check surface actually ran. Directly observed checks count in full, inferred ones count half, and checks that were skipped or sampled out count for nothing.

confidence = (auto + 0.5 × inferred) / (auto + inferred + skipped)

So a scan that rendered five of twelve pages tells you so, instead of presenting a partial sweep as a complete one. A low confidence value is a statement about our coverage, not about your site.

6. Score bands

Excellent90–100
Good75–89
Needs work50–74
Critical0–49

7. What we deliberately do not do

  • We do not change weights silently. All 9 live in one module, packages/shared/src/scoring.ts, and a change there moves this table in the same commit.
  • We do not reward the presence of a tool, only the correctness of its configuration.
  • We do not double-count one root cause across several categories.
  • We do not penalise checks that are not applicable to the detected stack.
  • We do not weight one page above another. If that changes, this line changes with it.

Related guide

The website audit checklist, in the order that actually pays

What to check on a website and in what order: what decides whether it is secure, fast, indexable and usable - and the questions no external scan can answer.

Read the guide →