How the score is calculated
No black box: every point comes from a measurable check. AI is only used to explain results, never to invent them.
1. Checks
We run 63 deterministic checks. Each failed check has a severity and a penalty: critical = 25, warning = 10, suggestion = 3.
2. Pages affected
For checks evaluated on every page, the penalty is scaled by the share of crawled pages affected: penalty × (0.5 + 0.5 × affected / crawled). One page out of ten costs about half the penalty; all pages cost the full penalty.
3. Category score
Each category starts at 100 and is multiplied by (1 − penalty / 100) for every failed check. Example: one critical issue and one warning give 100 × 0.75 × 0.90 = 68. Multiplying gives diminishing returns, so a site with many small issues is not crushed to zero.
4. Overall score
Weighted average: seo 30%, performance 20%, accessibility 20%, technical 20%, content 10%.
Limits
We crawl up to 10 pages (depth 2) and measure homepage resources only. Core Web Vitals are shown only when measured by Google PageSpeed Insights; we never estimate them. Colour contrast and keyboard behaviour need a real browser and are not covered yet.
All checks
| Check | Category | Severity |
|---|---|---|
| Page title | seo | critical |
| Title length | seo | warning |
| Unique titles | seo | warning |
| Meta description | seo | warning |
| Meta description length | seo | info |
| Unique meta descriptions | seo | info |
| Main heading (H1) | seo | warning |
| Single H1 | seo | info |
| Sub-headings (H2) | seo | info |
| Canonical URL | seo | info |
| Single canonical | seo | warning |
| Indexability | seo | warning |
| robots.txt | seo | warning |
| robots.txt rules | seo | critical |
| XML sitemap | seo | warning |
| Sitemap format | seo | warning |
| Sitemap in robots.txt | seo | info |
| Pages blocked by robots.txt | seo | info |
| Internal links | seo | critical |
| Internal linking | seo | info |
| hreflang codes | seo | warning |
| hreflang x-default | seo | info |
| HTTPS | technical | critical |
| TLS certificate | technical | critical |
| HTTP → HTTPS redirect | technical | warning |
| Mixed content | technical | warning |
| Page status codes | technical | critical |
| Redirect chains | technical | warning |
| HTML size | technical | warning |
| Mobile viewport | technical | critical |
| Character encoding | technical | info |
| Favicon | technical | info |
| Open Graph | technical | warning |
| Twitter / X card | technical | info |
| Structured data | technical | info |
| Valid structured data | technical | warning |
| HSTS header | technical | info |
| External links | technical | warning |
| Page resources | technical | warning |
| Server response time | performance | warning |
| Image weight | performance | warning |
| Modern image formats | performance | info |
| Total page weight | performance | warning |
| Text compression | performance | warning |
| Render-blocking scripts | performance | warning |
| Number of resources | performance | info |
| Image dimensions | performance | info |
| Lazy loading | performance | info |
| Browser caching | performance | info |
| Core Web Vitals | performance | warning |
| Page language | accessibility | warning |
| Image alt text | accessibility | warning |
| Form labels | accessibility | warning |
| Button names | accessibility | warning |
| Link text | accessibility | warning |
| Zoom allowed | accessibility | warning |
| Heading order | accessibility | info |
| Unique IDs | accessibility | info |
| Iframe titles | accessibility | info |
| Keyboard order | accessibility | info |
| Content depth | content | warning |
| Placeholder text | content | warning |
| Legal / privacy pages | content | info |