How we score your site
Every point deducted from your SEO score maps to a real detected issue. Nothing is fabricated. Here's the full rubric so you can defend the number to your team.
Our truth-only promise
- • We never invent findings to inflate the report.
- • We never inflate the score with fake "bonuses."
- • We never artificially lower a score to sell an upgrade.
- • Every deduction points to a check row you can trace back to the code.
1. Severity penalties
Each unique failing check is deducted from its category's starting 100. Multiple pages triggering the same check don't stack linearly — we scale by an affected-page ratio (see below).
| Severity | Max deduction | Example |
|---|---|---|
| Critical | −22 | Non-2xx response, robots.txt blocking, missing title |
| Warning | −8 | Missing meta description, missing H1, no viewport tag |
| Notice | −2 | Short word count, generic anchor text, missing favicon |
| Info | −0 | Purely informational — never deducts |
2. Category weights
Your overall score is a weighted average of category scores. Categories that control whether the page can rank at all weigh more than those covering polish.
| Category | Weight |
|---|---|
| crawlability | 3.0× |
| indexability | 3.0× |
| on page | 2.5× |
| performance | 2.5× |
| mobile | 2.0× |
| content quality | 2.0× |
| security | 2.0× |
| structured data | 1.5× |
| links | 1.5× |
| accessibility | 1.5× |
| images | 1.2× |
| geo | 1.2× |
| html quality | 1.0× |
| media | 1.0× |
| tracking | 0.6× |
| social | 0.6× |
| domain | 0.4× |
3. Affected-page scaling
A missing meta description on 1 of 100 pages costs less than a missing meta description on 100 of 100 pages. We scale each penalty by:
multiplier = 0.5 + 0.5 × (affected_pages / total_pages)Range is 0.5× (a single page in a large crawl) to 1.0× (every page affected). Single-URL audits are always at 1.0×.
4. Hard caps
Certain issues make a page effectively invisible to search. When we detect one, we cap the overall score so on-page wins can't hide the blocker. Fix the cap-triggering issue and the ceiling comes off.
| Check | Score cap | Why |
|---|---|---|
| page.status_code | ≤ 55 | Non-2xx response means the page can't rank. |
| page.robots_txt_allows | ≤ 45 | Blocked by robots.txt — Google can't crawl it. |
| page.robots_meta | ≤ 60 | noindex meta explicitly de-lists the page. |
| page.x_robots_tag | ≤ 60 | X-Robots-Tag header excludes the page from search. |
| page.canonical_conflict | ≤ 65 | Canonical points to a different domain. |
5. Worked example
Consider a 10-page audit with two issues: a missing meta description on 8 pages (warning) and a short word count on 2 pages (notice).
- Meta description (warning): base 8 × multiplier
0.5 + 0.5 × (8 ÷ 10) = 0.9= −7.2 in on_page. - Short word count (notice): base 2 × multiplier
0.5 + 0.5 × (2 ÷ 10) = 0.6= −1.2 in content_quality. - on_page: 100 − 7.2 = 92.8; content_quality: 100 − 1.2 = 98.8.
- Weighted average across all categories (unaffected ones still count as 100) rounds to roughly 97. No hard cap triggered.
Ready to test it?
Every report links back to this page so anyone can verify the math.