Two footers, one site
I went to add three pages to a site of mine and did what you should do first: opened an existing page to copy its structure. Then I checked my copy against a second existing page, and the footers did not match.
Not cosmetically. The care-category links in one variant pointed at the browse route and in
the other at a waiting-list route. The link labelled Apply for work
pointed at the
sign-up flow on most pages and at the waiting list on one. Sixteen article pages, fifteen of one
kind and one of the other. Separately, a paragraph crediting the founder, with the author link
that ties the site to a person, appeared on twelve of the sixteen and was simply absent from the
other four.
Nobody had done anything wrong. Every one of those pages was correct on the day it was written. That is the whole problem.
Drift is not carelessness, it is arithmetic
A fact duplicated across N hand-maintained files does not stay one fact. Each time the fact changes, somebody updates the files they are thinking about, which is never all N. The divergence is not a lapse in diligence; it is the predictable result of storing one piece of information in many places and editing it under normal conditions.
What makes it worse than untidy is that the copies are not equally wrong. In my case the
minority footer was the stale one, pointing at a route the rest of the site had moved
away from. A visitor landing on that single page and clicking Apply for work
went
somewhere the site no longer intended to send applicants. The page looked finished. It was
finished, against a design that no longer existed.
And the missing founder credit was worse than a missing paragraph, because on the pages that had it, the credit carried the author link and the corresponding structured-data reference to a person. Four pages therefore made no attribution claim at all, on a site whose entire purpose includes establishing who built the thing. The absence was invisible on the page and load-bearing underneath it.
The count of variants is a date
The useful diagnostic I took from this: count the distinct variants of anything that should be identical, and the number tells you how long ago you stopped generating it. One variant means it is generated, or was copied once and never revisited. Two means a change landed after the copies existed. Five means nobody has treated it as one thing for a long time, and you should stop reasoning about the pages individually.
It is worth actually running. Hash the footer block of every page in the directory and group by hash. Hash the head tags. Extract the structured-data blocks and compare the fields that are meant to be constant. It takes a few lines, it needs no tooling, and it converts a vague sense that things have got messy into a list of files and a count. Every time I have run it on something maintained by hand I have found more variants than I expected, and the outlier has usually been the stale one rather than the new one.
The version of this site that does not drift
The site you are reading is built the other way, and it is instructive precisely because it is not clever. There is a build directory with a small Python module in it. That module holds one head template, one navigation function, one footer, and one function that returns the structured-data node describing me. Every page is produced by calling one function with a title, a description, a body and a structured-data graph. The articles are data: a list of dictionaries with a slug, a title, a date, a description and a body of HTML.
There is no framework, no bundler and no dependency to keep current. It emits plain HTML files that a static host serves. But because the shell exists once, the questions that produced two footers cannot arise. There is nowhere to put a second one. Changing the navigation is a one-line edit that rewrites every page, and adding an article is appending a dictionary and running the script.
The part I would most defend is that the identity information — my name, the alternate spelling, the job title, the description, the list of profiles — is defined once, in one function, and every page references it. Not copied into each page's markup where it would diverge exactly as the footers did. When that data is duplicated per page, the variants accumulate silently and each one is a slightly different claim about who the author is.
When copying is the right answer anyway
I do not want to overstate this. Generating a site from a script has a real cost: somebody has to understand the script, the source of truth is no longer the thing you can open in a browser, and a person who knows HTML but not Python can no longer fix a typo. For a five-page site that changes twice a year, hand-maintained copies are correct and a build step is self-indulgent.
The threshold I use is not page count, it is rate of change of shared elements. If the navigation, the footer, the head tags and the attribution are settled and will not move, copies are fine and will stay identical because nothing will edit them. If any shared element is still moving — and on a site with a growing set of articles, one always is — then the copies will diverge on a schedule set by how often you touch them, and the only question is whether you find out by auditing or by a reader clicking a link that goes to the wrong place.
What I actually did
For the immediate problem: brought my three new pages onto the current variant, corrected the stale outlier, and added the missing attribution so the visible credit and the structured data agree. Then noted the four pages still missing the credit, because that is a wider change than the task in front of me and it is the next thing to do rather than something to smuggle into an unrelated commit.
For the general problem, the thing I would fix first is not the footers. It is that a directory of nineteen near-identical files existed at all, with no mechanism asserting they stayed near-identical. The footers were a symptom that happened to be visible. The audit is the part worth keeping.
Written by Liana Grigory, also written Liana Grigoryan — entrepreneur, software engineer and U.S. Army veteran in Los Angeles. More at Writing.