How the SEO score is calculated
A transparent, weighted checklist — not a black box. Every point is attributable, and every failure is named on the record so you can act on it.
The 15 on-page checks
Each check runs against the rendered HTML and carries a fixed weight. The score is earned ÷ available × 100.
| Check | Points | Why it matters |
|---|---|---|
| Title present | 12 | The single strongest on-page ranking element. Absent means the page is competing blind. |
| Title length 10–60 | 6 | Outside this range search results truncate or look thin. |
| Meta description | 10 | Controls the snippet. Missing means the engine invents one. |
| Description length 50–160 | 5 | Too short wastes the slot; too long is cut off. |
| H1 present | 10 | Declares the page topic to crawlers and screen readers. |
| Only one H1 | 4 | Multiple H1s dilute the topic signal. |
| Canonical tag | 8 | Prevents duplicate-content splits across parameters and variants. |
| JSON-LD structured data | 10 | Required for rich results. Its absence is the most common gap we see. |
| Open Graph tags | 8 | Governs how the page renders when shared — a direct traffic lever. |
| Twitter card | 3 | Same, for X/Twitter previews. |
| Viewport meta | 6 | Without it, mobile rendering is broken and mobile ranking suffers. |
| html lang attribute | 4 | Signals language for regional targeting and accessibility. |
| Image alt coverage ≥ 80% | 6 | Accessibility plus image-search visibility. |
| Body content ≥ 300 words | 8 | Below this, pages rarely rank for anything competitive. |
| Not noindex | 10 | A stray noindex removes the page from search entirely — worth catching first. |
Core Web Vitals — when we can measure them
LCP and CLS are only observable in a real browser. When a page is rendered by our browser engine, three further checks apply at Google's "good" thresholds: LCP ≤ 2500 ms (10 pts), CLS ≤ 0.1 (5 pts), TTFB ≤ 800 ms (5 pts).
A site is never punished for a measurement we did not take
What about XML sitemaps and robots.txt?
Deliberately excluded from the page score. A sitemap is a site-wide fact, not a property of one page, and folding it in would make two pages on the same domain score differently for a reason neither of them controls. We fetch /sitemap.xml and /robots.txt at the domain level and report them as separate flags, which is also how you would want to filter on them.
Why agencies buy this
For SEO agencies — a prospect list that opens itself
seo_issues names the exact failures, so your outreach can say "your product pages have no structured data and three of your top templates are missing canonicals" instead of "we noticed some SEO issues". That is the difference between a reply and a delete.
For design and web-build agencies — the redesign trigger
For anyone selling to ecommerce
Other scoring methodology