Technical SEO · Window Film & Tinting
NorthGuard Window Film: 19 routes, one byte-identical HTML shell
A site-wide rendering bug meant every URL returned byte-identical HTML. The same technical SEO audit scored 35/100 before the fix and 98/100 a month later.
- Baseline · Jul 9, 2026
- 35/100
- Technical SEO audit score
- Re-audit · Aug 10, 2026
- 98/100
- Technical SEO audit score
- Scope
- 19
- Routes restored to distinct HTML
The finding
Our 2026-07-09 audit hashed the raw HTML returned for every route on the site. All 19 URLs produced an identical MD5. The site was shipping a client-rendered shell with no server-side rendering and no prerendering, so the HTML a crawler received never varied by route — same title, same canonical, same body, on every page.
Every route initially returned the same app-shell HTML, forcing crawlers that rely on initial HTML — and Google before its rendering phase completes — to depend on JavaScript execution just to discover each route's unique content. Static prerendering moved the page-specific title, canonical, and body content into the initial response, removing that dependency entirely.
The fix
We moved the site onto Next.js prerendering so that each route emits its own fully-formed HTML document at build time. Every URL now ships a distinct <title>, a self-referencing <link rel="canonical">, and its own body content in the initial response — before any JavaScript runs.
The verification
We re-ran the identical audit on 2026-08-10 against the live production site. The technical SEO score moved from 35/100 to 98/100. The duplicate-HTML check that failed on the 19 audited URLs now passes on the same 19 URLs, confirmed by fetching each URL and diffing the raw response — not by trusting a dashboard.
Why this is the Gap Analysis pattern
The score measures the crawlability and indexability of the HTML a crawler receives. Between the two runs the site was also rebuilt on Next.js and its blog was reinstated, so we don't present this as a single-variable experiment: the check that failed was the duplicate-HTML check, and that is the check that now passes. That's the whole thesis: find what's structurally broken before you pay to drive traffic into it.