Technical SEO fixes that still hold as a site grows

I check whether a crawler can find the page, whether the right version gets indexed, whether the answer survives rendering, and whether it works on a phone. Then the fix goes into templates and checks so it holds as the site grows. A page that fails any of the four never gets its chance, whatever the answer on it says.

Read next What every page on this site has to pass before it goes live

Glaceon runs this page. Freezes a lesson into a rule that holds, so it never has to be learned twice.Pillar F, turn every lesson into a system, in my system.

Three rules that follow from it

  1. Fix the data source instead of the page. When something on a page is wrong, the fix goes in the data or the template that made it, so every page built from it is fixed at once.
  2. The same fact should not change from page to page. A fact that could drift lives in one file that every page reads.
  3. A lesson becomes a rule the build enforces. A check that blocks the release beats an audit that writes a report, so nothing has to be learned twice.

A fix made by hand on one generated page is undone the next time the site builds, and the same mistake stays live on every other page made from that template. At a few hundred pages, hand fixes stop being maintainable at all.

Fix source files, never generated output.

From How I Build Data-Driven Websites as a Solo Operator, March 2026

The JSON data and templates are the truth. The HTML pages are the output. Every fix happens upstream so it propagates everywhere.

From How I Build Data-Driven Websites as a Solo Operator, March 2026

Four places a useful page can lose its chance

  1. Crawl

    Can a crawler reach the page through real links and read its response?

  2. Index

    Is the right URL eligible to be stored, with duplicates and canonicals handled deliberately?

  3. Render

    Does the answer exist in the HTML, and does the rendered page keep it clear?

  4. Experience

    Can someone use it comfortably on a phone, without a slow or shifting page getting in the way?

Why the first two come first, in Google's words: Google primarily finds pages through links from other pages it already crawled. And: Indexing isn't guaranteed; not every page that Google processes will be indexed. So a page no link reaches, or one Google found and left out, is where I start. Sources: Google's SEO Starter Guide, updated December 10, 2025; Google's guide to how Search works, updated December 18, 2025.

On a site with thousands of templated pages, each of those four gets harder in its own way: how I think about technical SEO on complex websites.

In my unnamed data-reference case, a prepublish audit held a change while older output remained live. The case shows why I verify the release as well as the build.

A resource center audit, written for the developers who fix it

From my full-time work, the method

A resource center that grew up outside the main site's search setup

Guides, articles and downloads pile up for years, often on their own platform or folder. The main site gets the crawl and index basics; the resource center often doesn't, so search engines find its pages slowly and can index more than one version of the same one.

What I gave the developers

  1. A sitemap for the section, listing only the pages meant to be in search, each with the date its content last changed.
  2. A robots.txt that points crawlers to that sitemap and keeps them out of what doesn't belong in search, without blocking the pages that do.
  3. A canonical tag on every page pointing to its own clean address, so tracking and filter parameters don't create duplicates.
  4. For each fix, where it goes in the template, what the finished code looks like, and how to test that it worked.

Why: a developer acts on an instruction. "Canonicals are missing" is a diagnosis, and it waits in a backlog. An instruction with the exact tag, the template it goes in and a way to test it gets shipped. And fixing the template fixes every page built from it.

The same fact should not change from page to page

My old site stated the same simple fact two different ways on different pages. This one keeps facts like that in a single data file that every page reads. My job title is one: the pages that show it, from the homepage to every post's byline, read Senior SEO Manager from that file, so a change in one place changes all of them.

DataOne data fileSenior SEO Manager
TemplatesRead the file, never type it
One fact, one file, many pages. What it prevents: two pages telling a reader two different things about the same fact.

What CheckMyTap's index told me six weeks in

The site

CheckMyTap: 1.8K URLs in the sitemap, 583 of them discovered by Google and not indexed

My plan had called for about 30 deep pages. Six weeks later the catalog had outrun it, and the index was telling me so.

What I did

Set 200 thin pages to noindex, which cut the sitemap to 1.6K, and rebuilt the site at the commits before and after to prove the counts. The lesson went into a build check that stops the site from publishing a known kind of error.

Bing went from 560 to 1.4K indexed CheckMyTap pages in April 2026 alone. Bing Webmaster Tools, index counts, through Oct 4, 2026. Google went the other way, and the case study says what I can and can't explain about that.

The CheckMyTap story, including the drop

The check caught it, and the page stayed wrong for nine days

After an Oregon game, The Quack Report kept advertising a game that had already ended. It stayed that way for nine days. The daily check found the stale page each time, but the workflow reported success.

  1. Find the break. The sync changed four files, but its commit list held three. The build that passed locally was not the tree the host tried to publish.
  2. Follow the alarm. The watchdog sent its result through tee. The workflow read tee's success instead of the check's failure, so nobody got the warning.
  3. Repair the path. The sync now declares its write set in one place, checks that the declaration matches the scripts, and builds the committed tree before pushing. A separate check catches pipelines that can swallow a failure.

The repair traces the whole path from source data to the live page: the check now reads the same files that get published, and a failure holds the release. The Quack Report case study shows the site around that decision.

The technical work, project by project

The checks behind every site
Every check this site runs, the failure behind each one, and the bad input it is proven to catch.
CheckMyTap
A large catalog where reviews stopped being enough, and the build check that now stops known errors.
An independent fan reference
A source check that caught an overclaim, the correction, and a tighter check after it.
How I keep my sites accurate
The checks every change passes before it goes live, and the mistakes that put each one there.
Technical SEO: clarity for crawlers and people
My post on what technical SEO is for, with the three questions every page should answer.
My audit: where I trusted AI too soon
The launch mistakes that turned rules into checks.

Three questions every page answers, in this site's code

The real purpose of technical SEO is clarity.

The question, from my postWhere this site answers itWhat happens when it's missing
What is this page about?Every page has a written entry: the question it answers.That page doesn't go live, and neither does an entry with no question in it.
How does it relate to other pages?The same entry names the page above it, the pages beside it and the one page a reader should go to next.A page nothing links to, a link to a missing page or a next step that disagrees with the map never goes live.
Why does it exist within the site?The entry names who lands on the page and where they arrive from.A page with no reader written down doesn't go live.

Checked every time the site changes: every page needs a reader, a question and a next step, and every internal link has to land on a page that exists. Those are two of the 83 checks that run on every change, and 74 of the 83 first prove they still catch a planted mistake. How the link checks work

The same four, on this site

Here's what a crawler gets from this site, counted on the finished pages rather than taken from what I meant to build.

PartWhat a crawler getsWhat keeps it true
Crawl78 pages in the sitemap, each with the date its content last changed.One list of addresses builds every page, so nothing on the list goes missing.
Crawl135 old addresses send a 301 straight to their new page, and 23 retired ones answer with the 404 page. No chains.Every redirect has to land on a real page in one hop before a release goes out.
IndexThe canonical tag on 78 of 78 pages points to the page itself.Set once, in the template every page uses, from the page's own address.
IndexStructured data naming the site and me (WebSite, Person) on every page, and an Article on each of the 39 posts and case studies.Counted on the finished pages, never assumed from the template.
RenderThe first-screen answer is in the HTML on 78 of 78 pages, so it's there with JavaScript off.Every page is also loaded with JavaScript off before a release; one that loses its answer stops it.
ExperienceAt most 200 KB of CSS, 88 KB of JavaScript and 220 KB of HTML on any page.A page over any of the three fails the release check.
Experience2 font files, served from this site. No font requests go anywhere else.Every character on the site is one the fonts can draw, so you never see an empty box.
Experience2 outside scripts, both analytics (www.clarity.ms, www.googletagmanager.com), and neither loads when a browser sends Global Privacy Control.Those two are the whole list; a third can't sneak in with an update.

From this build, last changed . The checks themselves: every check, and the failure behind it.

The lesson the fact sheet taught, and the check it became

The rule this page is about, applied to the sheet above.

What happened
On October 14, 2026, my technical SEO page gained a fact sheet about this site: pages in the sitemap, redirects, canonicals, structured data, the answer without JavaScript, page weight, fonts and outside scripts. A fact sheet that drifts from the site is the exact mistake it describes, so this recounts every figure from the finished pages after each build and fails on any disagreement.
The rule it froze
If a figure up there ever disagrees with the finished site, the site doesn't publish until the two agree. The sheet and its check shipped together, so a figure about this site could never be typed.

That's the whole method in one section: a fact that could drift gets a check the day it ships, and the check keeps running from then on.

Why Glaceon runs this page

Each pillar of my system is an Eevee evolution, picked for its best stat. This page is pillar F, turn every lesson into a system.

Glaceon No. 471, Ice type

Its best stat is Sp. Atk, and its whole move set is about freezing things in place. That is what every check on this page does: a lesson becomes a rule the build enforces, so it never has to be learned twice.

HP
65
Attack
60
Defense
110
Sp. Atk
130
Sp. Def
95
Speed
65

Base stats from PokeAPI, read October 14, 2026. Every Eevee evolution totals 525, so none is stronger, only built for a different job.

All six evolutions, and the pillar each one runs

Arrow keys move. Enter opens. Esc closes.

Ask Bella

Ask Bella Hayden's corgi, who answers from this site and cites every fact.

BELLA

WOOF. I'm Bella, Hayden's corgi. He's my human. Ask me about him; every answer cites its source.

Reading this page? The top button is my short version of it.

How it works: the answers are written ahead from this site's pages, and anything else gets a search of the site that shows you its exact words. Every claim has a numbered source you can tap. Nothing is generated while you wait, nothing is made up, and nothing you type leaves your browser. Every answer, in plain HTML

Top

This page was last updated