Skip to content
About

How we measure website state

The full methodology behind the StateScore — what we check, how we weight it, and what we deliberately refuse to guess at.

The idea

A website has vital signs in the same way a patient does. It can be fast but invisible to search engines. It can rank beautifully and then go down every Tuesday. Looking at any one of those things in isolation tells you very little about the actual state of the site.

So WebsiteState measures three vitals and combines them into one number:

  • Pulse — is it up, does the certificate work, and is the page it returns actually a real page? Weighted at 40%, because a site that is down scores nothing else.
  • Speed — how quickly the server answers and the browser paints. Weighted at 35%.
  • Visibility — can search engines crawl, read and confidently present the page? Weighted at 25%.

How a score is calculated

Each tool runs a fixed checklist. Every check carries a weight between 1.0 and 3.0 reflecting real-world impact — a noindex tag matters far more than a missing Open Graph image, so it is weighted far more heavily.

Each check then contributes a fraction of its weight:

  • Pass — the full weight.
  • Needs work — half the weight.
  • Failing — none of the weight.
  • Not tested — excluded from the calculation entirely.

The score is the total earned divided by the total available, as a percentage. That last rule is the important one: if we cannot measure something, we do not pretend it failed. A page with no images is not penalised for having no alt text.

Where the numbers come from

Measured on our own servers

Most checks come from a single real HTTP request we make to your site. That one request tells us the status code, the response headers, the full redirect chain, the TLS certificate, the HTML itself, and a millisecond timing breakdown of DNS lookup, TCP connect, TLS handshake and time to first byte. All the SEO checks and seven of the ten performance checks come from that.

Measured by Google Lighthouse

The three Core Web Vitals — Largest Contentful Paint, Cumulative Layout Shift and Total Blocking Time — describe what a browser experiences while painting a page. They cannot be derived from an HTTP response, so we ask Google's PageSpeed Insights API, which runs a full Lighthouse audit in a real Chrome instance. When that service is unavailable those three checks are reported as not tested.

Screenshots

The uptime monitor renders your page in a real browser and stores the image for an hour. This exists because status codes lie: a site can return HTTP 200 while displaying a database error, a blank white page or an expired-domain parking page. The screenshot is the proof.

What we deliberately do not do

  • We do not guess at rankings. No tool can tell you where you will rank. We check the things that are objectively either present or absent.
  • We do not scan private networks. Requests to loopback, private and reserved IP ranges are refused outright. That is a security boundary, not a limitation.
  • We do not pad the checklist. Ten checks per tool, each one actionable. A hundred-item report that nobody reads helps nobody.

Built to be read

This is a deliberately small, dependency-free PHP application: a router, a handful of service classes, plain-PHP templates and vanilla JavaScript. No framework, no build step, no Composer. If you want to see how a check works, you can read the one file that implements it.

The five states

90+ Thriving
75– Healthy
60– Stable
40– Strained
0–39 Critical

Run a check


Still have questions?

Read the FAQs