Skip to content

Methodology

How we score

The technical SEO score is a weighted roll-up of pass / warn / fail checks across seven dimensions. Here is every number that goes into it.

Dimension weights

Total = Σ(dimension score × weight) ÷ Σ(weights of scored dimensions). A dimension that couldn’t be measured is dropped and the rest are re-normalised; the report then says “Based on N of 7 dimensions”.

DimensionWeight
Crawlability & Indexing25%
On-Page & Content20%
Performance15%
Mobile Usability10%
Structured Data & Social10%
HTTPS & Trust10%
Architecture & Internal Links10%

Authority, Search Visibility and Competitors (full report) are scored 0–100 on their own and never enter the total.

Check weights and credit

Dimension score = Σ(credit × weight) ÷ Σ(weight) × 100, rounded. Weight comes from severity; credit from status.

Severity → weight

  • Critical · 4
  • High · 3
  • Medium · 2
  • Low · 1

Status → credit

  • Pass · 100%
  • Warn · 50%
  • Fail · 0%
  • Info / not measured · excluded

Fewer than 3 measured checks in a dimension → no score for it (“Insufficient data”), and it is excluded from the total. Fewer than 5 pages crawled → Architecture is marked low-confidence and excluded.

Gate rules

These five failures make the rest of the report moot, so they cap it. Any one failing → its dimension is capped at 30, the total at 40, the grade at F, and the report opens with a “Fix this first” banner.

  • crawl.entry.status — the entry URL does not end on a 200
  • crawl.entry.indexable — the entry page is noindex (meta or X-Robots-Tag)
  • crawl.robots.blocks-site — robots.txt disallows / for * or Googlebot
  • sec.https — HTTPS is not available
  • sec.tls.expired — the certificate has expired or the handshake fails

Two conditions come before any scoring: if a firewall or challenge page blocks our crawler we publish no score at all; if the entry page is an empty JavaScript shell we score what raw HTML allows and mark content checks as not measured.

Page-level checks

Checks like “missing title” or “broken internal link” are judged by the share of crawled pages affected, not by a single page.

  • 0% of pages affected → pass
  • ≤ 20% affected → warn
  • > 20% affected → fail

A few checks use their own bands where Google’s guidance differs (for example image alt text: ≤ 10% missing pass, ≤ 30% warn). Every page-level evidence line opens with the sample size — “Across 20 crawled pages…”.

Core Web Vitals thresholds

Real-user p75 values from the Chrome UX Report (CrUX) via PageSpeed Insights, mobile. Good → pass, needs improvement → warn, poor → fail. No field data → the lab value is used, capped at warn and labelled “lab, single run”. PageSpeed unavailable → not measured.

MetricGoodNeeds improvementPoor
LCP (Largest Contentful Paint)≤ 2.5 s≤ 4.0 s> 4.0 s
INP (Interaction to Next Paint)≤ 200 ms≤ 500 ms> 500 ms
CLS (Cumulative Layout Shift)≤ 0.1≤ 0.25> 0.25
TTFB (Time to First Byte)≤ 800 ms≤ 1800 ms> 1800 ms

Grade scale

  • A

    ≥ 85

  • B

    ≥ 70

  • C

    ≥ 55

  • D

    ≥ 40

  • F

    < 40

Same scale as the AI visibility report, so the two never disagree about what an “A” means.

Data sources and limits

  • Our crawler (AEOeyeBot): robots.txt, up to 6 sitemap files, 4 protocol/host variants, a random-path 404 probe, and 20 HTML pages on the free report (12 by navigation, 8 sampled from the sitemap by path) or 40 on the full report (25 + 15). Raw HTML only — no JavaScript rendering.
  • Google PageSpeed Insights: one mobile run per report (plus desktop on the full report). CrUX is aggregated over 28 days; Lighthouse is a single lab run and varies.
  • DataForSEO (full report): backlink summary and anchors, ranked keywords (Google US, English), competitor domains. Traffic and index figures are estimates.

Disclaimer

Reports are automated, reflect a single point in time, and sample a subset of a site’s pages. They are not a guarantee of rankings and are not affiliated with or endorsed by the audited site, Google or DataForSEO. Thresholds follow Google Search Central and web.dev guidance and may change as that guidance does; this page is updated when they do.