How a getReport score is made
Every number in a report comes from 187 checks, a public formula and data sources named below. Nothing is weighed by hand, and sponsors cannot change a score.
How a page is measured
One report checks one page, as a person asked for it, on mobile or desktop. Our crawler, GetReportBot, fetches the page from the Frankfurt region, Germany, follows up to 10 redirects and reads the files around it (robots.txt, sitemaps, security.txt, llms.txt). The page is then opened in Chromium to measure what visitors get after JavaScript runs.
- Speed: Google PageSpeed Insights (Lighthouse) for the lab numbers, and the Chrome UX Report for how real visitors experienced the page over the last 28 days, when Google has enough data.
- Accessibility: axe-core in Chromium on the rendered page, plus checks of our own (zoom, tap targets, contrast summary). Automated tools find about a third of accessibility problems; the rest needs a person.
- Security: the response headers, the TLS certificate and handshake, cookies, a fixed list of at most 15 well-known paths, and Google’s Safe Browsing list.
- SEO, structured data, social previews and best practices: the HTML as served and as rendered, the links and images on the page, and the structured data against Google’s documented requirements.
- Libraries and hosting: known vulnerabilities come from OSV.dev, the network that owns the server’s address from Team Cymru’s public lookup.
The same page is served from a 12-hour cache instead of being fetched again, so two people checking it an hour apart see the same report.
How the scores are calculated
Each check ends as passed, a problem, a warning or information. A module starts at 100 and loses the check’s weight for a problem and half of it for a warning; information costs nothing. The speed module is the exception: its score is Lighthouse’s performance score, so it matches PageSpeed Insights.
The overall score is the weighted mean of the modules that finished (weights below, out of 100); a module that could not run is left out rather than counted as zero. Grades: A from 90, B from 80, C from 70, D from 50, F below. A page that answers with an error (HTTP 4xx or 5xx) gets no overall grade, because the checks then describe the error page, not the site.
| Module | Weight in the overall score | Checks |
|---|---|---|
| Speed | 30% | 30 |
| SEO | 25% | 52 |
| Security | 15% | 33 |
| Accessibility | 10% | 14 |
| Structured data | 5% | 10 |
| Social | 5% | 11 |
| Best practices | 10% | 37 |
Every check, with its weight
The weight is what a problem costs the module score; each name links to the page that explains the problem and the fix. The same list is available as JSON.
Speed: 30 checks
- Lighthouse performance score — information, no weight
- Largest Contentful Paint — problem, weight 25
- Interaction to Next Paint — problem, weight 10
- Cumulative Layout Shift — problem, weight 25
- Total Blocking Time — problem, weight 30
- First Contentful Paint — problem, weight 10
- Time to First Byte — problem, weight 5
- Speed Index — problem, weight 10
- Render-blocking files — warning, weight 8
- Unused CSS — warning, weight 8
- Unused JavaScript — warning, weight 8
- Modern image formats — warning, weight 8
- Image sizing — warning, weight 8
- Offscreen image loading — warning, weight 8
- Web font text visibility — warning, weight 4
- Third-party code weight — warning, weight 4
- Page element count — warning, weight 4
- Long main-thread tasks — warning, weight 4
- Main-thread work — warning, weight 4
- Server response time — warning, weight 4
- Redirects before the page — warning, weight 8
- Text compression — warning, weight 8
- Static file caching — warning, weight 4
- HTTP/2 and HTTP/3 — warning, weight 4
- Real-user Largest Contentful Paint — information, no weight
- Real-user Interaction to Next Paint — information, no weight
- Real-user Cumulative Layout Shift — information, no weight
- Real-user Time to First Byte — information, no weight
- Real-user First Contentful Paint — information, no weight
- Speed against other sites on your host — information, no weight
SEO: 52 checks
- Page title — problem, weight 10
- Title length — warning, weight 3
- Meta description — warning, weight 4
- Meta description length — warning, weight 2
- One H1 heading — warning, weight 3
- Heading order — warning, weight 2
- Canonical tag — warning, weight 4
- Canonical target — problem, weight 5
- Noindex directive — problem, weight 10
- robots.txt file — warning, weight 2
- robots.txt rules for this page — problem, weight 10
- Sitemap in robots.txt — warning, weight 2
- XML sitemap — warning, weight 3
- Sitemap format — warning, weight 3
- Sitemap URL status — warning, weight 3
- Page listed in sitemap — information, no weight
- hreflang tags — warning, weight 3
- hreflang return links — warning, weight 3
- hreflang alternates status — warning, weight 2
- Page language — warning, weight 3
- Viewport meta tag — problem, weight 6
- Search indexability — problem, weight 10
- Redirect chains — warning, weight 3
- www and non-www versions — warning, weight 3
- Trailing slash consistency — warning, weight 1
- URL length — warning, weight 1
- Internal links — warning, weight 2
- Nofollow external links — information, no weight
- Broken links — warning, weight 4
- Links through redirects — information, no weight
- WordPress search visibility — problem, weight 8
- Default WordPress content — warning, weight 3
- WordPress tagline — warning, weight 2
- WordPress permalinks — warning, weight 4
- Out-of-stock product pages — warning, weight 1
- WordPress attachment pages — warning, weight 2
- Duplicate SEO plugins — warning, weight 3
- Images without alt text — problem, weight 8
- Images marked decorative — information, no weight
- Word count — warning, weight 4
- Title and H1 match — warning, weight 1
- Site favicon — warning, weight 1
- Apple touch icon — warning, weight 1
- Breadcrumb navigation — information, no weight
- Pagination links — information, no weight
- AMP version — information, no weight
- AI crawler access — information, no weight
- llms.txt file — information, no weight
- llms.txt format — warning, weight 1
- AI opt-out directives — information, no weight
- Content that needs JavaScript — warning, weight 3
- SEO tags changed by JavaScript — problem, weight 6
Security: 33 checks
- HTTPS connection — problem, weight 15
- HTTP to HTTPS redirect — problem, weight 8
- HSTS header — warning, weight 5
- HSTS preload readiness — information, no weight
- Minimum TLS version — problem, weight 10
- Certificate expiry — warning, weight 8
- Certificate chain — problem, weight 12
- Content-Security-Policy header — warning, weight 12
- Inline and wildcard scripts in CSP — warning, weight 4
- X-Content-Type-Options header — warning, weight 3
- Frame embedding protection — warning, weight 4
- Referrer-Policy header — warning, weight 3
- Permissions-Policy header — warning, weight 2
- Secure flag on cookies — warning, weight 5
- HttpOnly flag on cookies — warning, weight 4
- SameSite attribute on cookies — warning, weight 3
- Mixed content — problem, weight 8
- Server version in headers — warning, weight 2
- X-Powered-By header — warning, weight 2
- Wildcard CORS header — warning, weight 4
- Public staging copy — problem, weight 5
- Default admin author — warning, weight 3
- Abandoned plugins — warning, weight 3
- Plugins closed on wordpress.org — problem, weight 6
- security.txt file — information, no weight
- CMS version — warning, weight 6
- Directory listings — problem, weight 6
- Exposed .env and .git files — problem, weight 15
- Cloaked content — problem, weight 15
- Spam links — problem, weight 15
- Redirects only for Google — problem, weight 15
- Hidden outbound links — warning, weight 5
- Google unsafe site flag — problem, weight 15
Accessibility: 14 checks
- Critical accessibility issues — problem, weight 10
- Serious accessibility issues — problem, weight 5
- Moderate accessibility issues — warning, weight 2
- Minor accessibility issues — warning, weight 1
- Text colour contrast — warning, weight 3
- Page landmarks — warning, weight 2
- Skip to content link — warning, weight 1
- Form field labels — problem, weight 5
- Link and button names — problem, weight 4
- Image alt text — warning, weight 3
- Tab order — information, no weight
- Page language — warning, weight 2
- Zoom on phones — problem, weight 4
- Tap target size — warning, weight 2
Structured data: 10 checks
- Structured data — warning, weight 6
- JSON-LD syntax — problem, weight 8
- Microdata usage — information, no weight
- Structured data types — information, no weight
- Required schema properties — warning, weight 6
- Rich result eligibility — warning, weight 4
- Organization logo and profiles — warning, weight 2
- WooCommerce Product schema fields — warning, weight 3
- Schema from multiple plugins — warning, weight 3
- Duplicate schema entities — warning, weight 2
Social: 11 checks
- Open Graph title — warning, weight 4
- Open Graph description — warning, weight 3
- Open Graph image — warning, weight 5
- Open Graph image size — warning, weight 2
- Open Graph image reachable — warning, weight 4
- og:url and canonical URL match — warning, weight 2
- Open Graph type — warning, weight 1
- Twitter card type — warning, weight 3
- Image for X (Twitter) cards — warning, weight 2
- Facebook App ID — information, no weight
- Link preview rendering — information, no weight
Best practices: 37 checks
- HTML validation errors — information, no weight
- Doctype declaration — warning, weight 2
- Character encoding declaration — warning, weight 2
- JavaScript errors on load — warning, weight 3
- Deprecated browser features — warning, weight 2
- document.write() usage — warning, weight 2
- HTTP/2 or HTTP/3 requests — warning, weight 3
- HTTP/2 server support — warning, weight 4
- HTTP/3 advertised — information, no weight
- Text compression — warning, weight 4
- CDN in front of the site — information, no weight
- Cache lifetime for static files — warning, weight 3
- Total image weight — warning, weight 4
- Heavy image files — warning, weight 3
- Oversized images — warning, weight 3
- Images without width and height — warning, weight 2
- Broken images — warning, weight 3
- WooCommerce cart fragments — warning, weight 3
- Cached cart and checkout — problem, weight 8
- WordPress plugin weight — warning, weight 3
- Duplicate caching plugins — warning, weight 3
- Page builder weight — warning, weight 3
- Autoplaying video — warning, weight 1
- Sideways scrolling — warning, weight 4
- Vulnerable JavaScript libraries — problem, weight 5
- Technology stack — information, no weight
- Trackers before consent — warning, weight 5
- Cookies before consent — warning, weight 5
- Cookie banner reject option — information, no weight
- Cookie lifetime — information, no weight
- Cookie banner — information, no weight
- Google Consent Mode — information, no weight
- Analytics and tag managers — information, no weight
- Privacy policy link — warning, weight 2
- Contact page link — warning, weight 1
- 404 page for missing pages — warning, weight 2
- www and non-www redirect — warning, weight 2
What a report does not do
- It checks one page, not a whole site. Templates differ, so check a product page or an article too.
- It measures from one place at one moment. A slow answer can be a busy minute; run it again before you act on a single number.
- It sees only public pages: no logins, no forms, no guessing of paths. WordPress plugins count only when the page reveals them.
- Lab speed numbers are a simulation of a mid-range phone on a slow network. The real-visitor numbers, where Google has them, are the ones that count for ranking.