LoomalyDocs

How the health score works

The five dimensions the health score is made of, what each severity costs, how performance counts, and a worked example.

Your health score is a number from 0 to 100, shown in status and report. It answers one question: how much of your site do search engines and AI assistants find, read and trust? It's built from five dimensions, and each one appears next to the score, with what fixing each of the top problems would add.

Five dimensions

Every rule belongs to one dimension. The weight is the dimension's share of the overall score.

DimensionWhat it measuresWeight
IndexabilityCan the page get into Google at all: it loads, isn't noindex, points its canonical at itself, serves real content without JavaScript, isn't a soft 404, uses HTTPS.35%
Page basicsTitle, meta description, H1, image alt text, internal links, language and hreflang tags, social preview tags.20%
Content & AI readabilityWhether the page has enough real content, says what its title promises, gives the visitor a next step, and shows AI crawlers the same content as Google.20%
Structured dataSchema.org markup that makes a page eligible for rich results and easier for AI to quote.10%
PerformanceCore Web Vitals and server response time, from Google PageSpeed Insights.15%

Indexability weighs most because nothing else matters on a page Google can't index. Performance weighs less than it might look: Google uses page experience as one signal among many, and a fast page that isn't indexed earns nothing.

What each problem costs

Each page gets a score from 0 to 100 in each dimension:

  • An Error in a dimension fails it on that page: the page scores 0 there.
  • Each Warning costs 25 points.
  • Each Notice costs 5 points, and notices cost at most 10 together.

A rule counts once per page, however many times it fires there: ten images without alt text on one page are one problem. A dimension's score for the site is the average over the pages it was checked on, and the overall score is the weighted average of the dimensions.

So notices are hints, not penalties: a page with four notices still scores above 95. An error is serious by design. It only comes from problems that stop a page from being indexed or from working.

Performance

Performance is measured on the representative pages of each template, not on every page, so it's averaged over the pages actually measured.

  • Real-user data first. When Chrome has enough visits to a page, the numbers are from real users over the last 28 days. When it doesn't, Google falls back to the whole site's numbers, and the issue says so. Without any real-user data, a lab test on a throttled phone connection is used.
  • Google's bands. A Core Web Vital in Google's "needs improvement" band (LCP 2.5–4 s, INP 200–500 ms, CLS 0.1–0.25) is a warning, and so is Time to First Byte between 800 ms and 1.8 s. Only real-user data in the "poor" band is an error. A lab-only result stays a warning however slow it is, because lab tests are harsher than what most visitors see.
  • Only recent numbers count. A measurement older than 45 days stops counting. Its issue moves to Needs re-measuring until the page is measured again.

Until anything has been measured, the performance dimension shows Not measured yet and the score is made of the other four.

Worked example

A site with 10 audited pages, 2 of them measured for performance:

  • 1 page is set to noindex (error, indexability),
  • 4 pages have no meta description (warning, page basics),
  • every page is missing breadcrumb markup (notice, structured data),
  • 1 measured page has an LCP of 3.2 s from real users (warning, performance).
DimensionPagesScore
Indexability9 at 100, 1 at 090
Page basics6 at 100, 4 at 7590
Content & AI readability10 at 100100
Structured data10 at 9595
Performance1 at 100, 1 at 7588

Overall: 90 × 35% + 90 × 20% + 100 × 20% + 95 × 10% + 87.5 × 15% = 92.

todo and report would list the fixes by what they're worth: removing the noindex +4, the meta descriptions +2, the LCP +2, the breadcrumbs +1.

What counts as open

The score counts every issue that's open on an audited page, whatever scan found it. An issue you marked fixed keeps counting until a re-check confirms it's gone, so the score can't rise before the fix is live. Ignored issues don't count.