Six sites, 43 pages, all builds green, sitemap in sync with the page list. Then someone asked which item to fix next, and nobody could answer.
The audit scored the fleet at 81.8 out of 100. Content came in at 60.1%, lower than any technical gap.
Answering "what do we fix first" means scoring each dimension separately. Otherwise you are guessing.

This is not a Google score
Google does not grade sites or publish ranking weights. Every "SEO score" in the market is a set of human-written rules turned into one number. Ours is no different.
What we wanted was an explanation. A page does not get "87". It gets "87, of which title lost 3.1 because the rendered title is 76 characters against a 70 limit". Weights sit at the top of the output, and each rule's score, evidence and suggested fix follow in the same JSON file.
The rules are fixed. The same input produces the same number twice, and editing a rule bumps the version so old scores can still be reconciled.
Six dimensions, weights we chose
| Dimension | Weight | What it measures | Score rate |
|---|---|---|---|
| Crawl and index | 30 | environment flag / noindex consistency / sitemap reconciliation / robots | 83.3% |
| Content quality | 25 | title / description / word count / sourced facts / status | 60.1% |
| Page and structured data | 15 | unique h1 / canonical / lang / JSON-LD | 100% |
| Internal links | 10 | orphan pages / broken links / nav reachability | 94.7% |
| Performance (CWV) | 10 | TTFB / LCP / CLS, sampled only | not measured |
| Freshness and authority | 10 | updated coverage / refreshed within 180 days / legal pages | 91.7% |
Crawl gets 30 because a page outside the index makes every later edit pointless. Content gets 25 because the title and description decide the click. Performance sits at 10: it needs real sampling, most sites have none, and full weight would never be earned.
These weights are our scheduling priority, not a search engine's. A fittings shop and a workwear shop should not share the same weights, so the file can be overwritten one key at a time.
The low scores came with labels attached
The production site scored 89.8 with all 9 pages indexable. The other five sit in staging at 79.2 to 81.4, and each loses exactly 6.0 points.
That 6.0 is deliberate. Staging pages carry noindex or point at a test domain, and they should stay out of search. Counting them in the fleet total is a reminder that these five are not live yet.
The rest of the deductions cluster in two places. Titles run long, costing 4 to 6 points per site. Facts and claims have no source at all: 0 of 43 pages passed, and that rule's 5 points went with it.
Sourced facts are the hardest content debt
The rule is narrow. Each page needs at least one entry in its facts or claims block with a non-empty source.
If a page says "25-day lead time", a production schedule or a supplier email backs it. If it claims ISO 9001, a certificate number or a lookup link backs it.
Readers benefit more than crawlers here. One citable sentence on a page does more than ten lines of "we are a professional manufacturer".
Unmeasured means out of the denominator
Performance is worth 10 points, and it only counts with real TTFB, LCP and CLS samples, either measured or pulled from CDN logs.
Without samples the dimension is marked unmeasured, and the denominator drops by 10. The total reads higher than it should, and the output says so.
We would rather inflate the score than invent a 7.5. Once an estimate enters the number, nobody trusts the number.
The order we fix things
- Align environment and noindex. It is the easiest 6 points to lose in the 30-point dimension, and the easiest to win back.
- Rewrite titles and descriptions. Thirteen points live here; a copy edit lands the same day, no developer needed.
- Add sources to facts. Five points, and customers see them.
- Clear orphan pages and legal pages, about 3 points.
- Leave performance until real samples exist.
In that order, a staging site moves from 80 to 90 in two days. Run it the other way and performance work can move the score by zero, because there is no data to move.
Where this does not fit
The rules work for a fleet with tens of pages, static generation, and content stored in git. The audit builds the site into a temp directory and reads the rendered HTML, without touching a single file in the site.
Sites past a thousand pages, or rendered by a framework, or already holding real CDN logs should start from the logs and the Core Web Vitals distribution instead.
FAQ
Can we tell clients our site scores 90 on SEO?
No. It is an internal scheduling tool with our own rules and weights. Say the concrete things instead: all 43 pages indexable, no duplicate titles.
What counts as a passing score?
Above 85 is usable, 80 to 85 needs spot fixes, below 75 means hold the ad spend. Six sites is a small sample, so the bands will move.
What if we have no performance data?
Mark it unmeasured and drop it from the denominator. Add it back when sampling exists, and never fill the gap with a lab estimate.
How often should it run?
Before each content merge, and bump the version whenever a rule or weight changes. Scores land in a timestamped ledger, so a regression shows up as a line.
Why not just use a third-party SEO tool?
Use one if it helps, but its score cannot be explained and different tools do not compare. We need to know why a page lost points and where to edit, which a single number cannot answer.
Last updated: 2026-10-21