The four calculator money pages had forty-eight articles in the same corpus and zero inbound links between them.
Not a handful. Zero. The mortgage calculator and stamp duty calculator, both YMYL financial content, sat inside a 48-article editorial body on the same site that had never pointed to any of them. Not once.
That was the highest-ranked finding in the Q.1 audit. Across all three independent assessment lenses (content/SEO, design/UX, architecture), the link equity gap came first.
What the previous diagnosis missed
Building on the previous technical audit of those six YMYL pages, Phase Q named the failures that pass couldn’t surface. HTTP 200, index, follow, canonical self-referencing: all present. What a technical audit doesn’t measure is link equity, reviewer attribution, or whether a TypeScript strictness setting is actually in effect.
Phase Q addressed all three.
What Phase Q was
I ran the three-lens assessment (content/SEO, design/UX, architecture) against live GA and Google Search Console telemetry. B-092 promoted to a phase the same day it was raised.
Q.0 was the integrity sweep: fabricated trust signals removed, stale rate articles reframed honestly. Articles that had been implying current rates without having fetched them got explicit sourcing language. Unglamorous work. It’s the foundation the rest of Phase Q sits on. You can’t audit signal quality on pages that contain fabricated signals.
Q.1 came next. Then Q.2a. Three PRs, all landed 2026-07-20.
The link equity failure
The four calculator pages were internal link dead-ends. No engineered second pageview. A user reading about stamp duty rates had no authored path to the stamp duty calculator. They could find it via site nav, but no editorial decision had connected the two.
YMYL pages need inbound link equity. That’s not a preference. It’s how crawl weight distributes and how topical authority accumulates. An orphaned money page with correct content still signals poor editorial structure to a crawler that arrives via sitemap and finds no contextual references anywhere in the corpus.
Q.1 fixed this. Body-prose links from the article set into each of the four calculator pages. Companion work from June had already seeded internal links from six articles into /disclaimer and /stamp-duty-calculator, moving crawl weight to pages that had been footer-only. Q.1 extended that coverage to the full calculator set. Zero inbound links to not zero.
The E-E-A-T failure
The four money pages had unnamed reviewers. A generic reviewer credit: no name, no credentials, no verifiable publication record.
That’s a documented gap on YMYL financial content. Experience and expertise signals need to be verifiable. A reviewer with no name is a reviewer whose expertise can’t be checked. The E-E-A-T signal doesn’t attach.
The fix is mechanical once you see the problem: supply actual names and credentials. Q.1 did that alongside the link equity work. The two gaps share an underlying cause. Both signal “this page has been thought about by a human expert who decided it belonged here” when they’re present, and both say the opposite when they’re absent. Fixing them in the same PR was the right call.
The TypeScript failure
next.config.mjs had typescript.ignoreBuildErrors: true.
The repo also had no typecheck script and no CI job that ran the compiler. The Playwright workflow existed but had been red for weeks. strict: true was in tsconfig.json. It was doing nothing.
This is a false-success failure. The build was green. The IDE flagged errors locally and they never reached a blocking gate. strict: true in tsconfig.json and ignoreBuildErrors: true in next.config.mjs are contradictory settings; the second wins. The strictness was declared, not enforced.
Q.2a turned ignoreBuildErrors off. Twelve masked product errors emerged. Not warnings. Compile errors the pipeline had been swallowing while producing a clean build. Twelve errors, all previously invisible to CI.
Q.2a also added a Quality Gate CI job: a typecheck step on every PR. The strictness is now enforced rather than declared.
The YMYL connection is indirect but real. A money page whose codebase carries twelve suppressed type errors has unknown correctness properties. Most of the twelve sat in product-adjacent UI code rather than the calculation logic itself. “Probably fine” isn’t a position you can hold on financial content. The config said the code had been type-checked. It hadn’t been.
The common shape
Three failures. None of them content depth.
Link equity: nobody wrote the links. Articles in the early corpus predated some of the calculators, and the editorial convention that arrived with the later builds never propagated backwards.
E-E-A-T: named reviewers require names. The early build used a generic credit and left it there.
TypeScript: strict: true and ignoreBuildErrors: true both sat in the config; the enforcement pipeline had neither.
Each failure had the same shape. Something declared but not enforced, or a signal that should have been authored and never was. The site claimed type-checking. It listed a reviewer. The corpus was supposed to cover the calculators. Three declarations sitting alongside three gaps between what was declared and what was true.
The asymmetry with the previous technical audit is precise. A technical audit checks what’s present: HTTP status, crawlability, canonical structure. These three failures all sat in what was declared but absent. Editorial links that should have existed. A name where there was a placeholder. A type gate that lived in the config but not the pipeline.
What came after
Phase R arrived alongside Phase Q. R.1 connected the mortgage and stamp duty calculators via carried numbers: ?price= in the URL, useCarriedNumberParam reading it on mount, the property price following the user from one tool to the next. The “Where £X sits” insight panel contextualises the output against income bands so the number means something relative to broader thresholds, not just as a standalone figure.
That’s a different kind of plumbing. Not authority signals but user flow. Q.1 created the editorial path from articles to calculators. R.1 made the path between calculators themselves worth taking. The sequence matters: earn the second pageview structurally, then make the second pageview useful.
The diagnosis
The YMYL failure wasn’t content quality. Nothing the assessment returned pointed at thin pages. I found three infrastructure gaps that content quality cannot compensate for.
This matters as a diagnostic frame. If the assessment had returned on content depth, the fix would have been more content: longer pages, more citations, more worked examples. That’s expensive and slow. The actual fix was editorial links in an existing corpus, a name on a reviewer credit, and a one-line change in next.config.mjs plus a CI job. Most of a morning’s work.
Not every YMYL failure requires content. Some require plumbing. Phase Q found it.



