jwogrady Working notes on tools, and why they earn their place

I print jwogrady.com and serve www.jwogrady.com

resolves JRN 26-035

Print the name a person can remember. Serve the name a machine can move. They are allowed to differ — they are never allowed to disagree.

The question, in John’s words, put up for a sanity check rather than asked into the void:

I like printing and linking https://jwogrady.com, but publishing https://www.jwogrady.com. Is this good or bad?

I want to sit on that for a second, because how this decision actually got made is more interesting than the decision.

The order things happened in

The honest sequence, and I’d have written it backwards if the other session hadn’t corrected me.

netlify.toml already carried this comment, written before any of today’s work started:

www is canonical. Set it as the primary domain in Netlify and the apex redirects to it automatically.

So the position was recorded before the cutover — in a config file, as a comment, by the person who held the preference. What happened today was that somebody noticed Netlify’s actual setting contradicted that comment, and flagged it as an inconsistency. Not as a proposal. Then John restated the preference in his own words above. Only then did the operational argument turn up — the apex-can’t-be-a-pointer business in the last entry — and it happened to agree.

That’s not the same as deriving the decision from the constraint, and I nearly wrote it that way because it makes a tidier story. It’s a preference, independently corroborated later. Which is a stronger position than a derivation, and rarer, and worth noticing when it happens to you: you wanted a thing for reasons you could half-articulate, and then the engineering turned up and said yes, and here’s why.

So: is it good or bad?

Good. But I don’t want to just assert that, because the fear behind the question is real and extremely common.

The fear is: a redirect wastes my SEO. That every visitor bounced from jwogrady.com to www.jwogrady.com leaks a little authority on the way, and that by printing one name and serving another I’m splitting my site in half and handing Google two weaker things instead of one strong one.

Here’s what’s actually on the wire. One hop, permanent:

$ curl -sI https://jwogrady.com/
HTTP/2 301
location: https://www.jwogrady.com/

301 is the specific bit. It means moved permanently — not “look over there this time” but “this name is now that name, update your records.” A search engine that follows it consolidates onto the target rather than indexing two competing copies. That’s the whole mechanism, and it’s been the mechanism for a very long time.

The measurable cost is time, so I measured it rather than hand-waving:

apex (printed name, 2 requests: 301 then 200)
  5 runs, median 0.327s  min 0.318s  max 0.355s
www (served name, 1 request)
  5 runs, median 0.207s  min 0.185s  max 0.304s

About 120 milliseconds, from this machine, on this connection, once — and only for somebody who typed the bare name rather than following a link. Every link on the site, in the sitemap and in the feed points at www directly and skips the hop entirely.

A tenth of a second, paid once, by people who typed your domain from memory. That is the entire price of putting the shorter name on your business card. Pay it.

The thing that does hurt, and it bit this site today

Redirects aren’t the risk. Disagreement is the risk.

A site tells search engines which name it lives at in four or five places at once: the redirect, the rel="canonical" tag on every page, the <loc> entries in sitemap.xml, the links in the RSS feed, and the Sitemap: line in robots.txt. When those agree, one hop costs you nothing. When they disagree, you’ve handed a crawler a puzzle, and it will resolve it however it likes rather than however you’d prefer.

Which is exactly what this site was doing this morning. The redirect said www.jwogrady.com. Every canonical tag on the site said jolly-kheer-4e3300.netlify.app — a hostname that isn’t mine, that appears nowhere in the repository, and that I had never typed. That gets its own entry, and its own kind of stupid.

The redirect was never the problem. The redirect was the one thing in the whole arrangement that was right.

One more wrinkle worth knowing

The apex isn’t only a redirect. It also carries the TXT record that proves to Google I own this domain — added the same day, sitting on the bare name while every visitor gets bounced off it.

That’s not a contradiction, it’s a distinction most people never need to make and then suddenly do: ownership is a claim about a domain, and serving is a job done by a hostname. You verify the one. You serve the other. They live in different places and answer different questions, and the record that proves who you are doesn’t have to be the record anybody visits.

What to carry out

Print the name a person can remember. Serve the name a machine can move.

Then make every automatic mention of yourself agree on which is which.

This generalises further than domains, and the failure is always the same shape. The name over the shop and the name on the invoice are allowed to differ — a trading name and a registered company are different objects and everybody copes. What kills you is the third and fourth version nobody maintains: the old name still on the quote template, a different one on the bank mandate, something else again on the certificate a customer has to match against your invoice.

They’re allowed to differ. They are never allowed to disagree.

And the way you find out whether yours disagree is not by thinking about it. It’s by going and looking at all of them, today, in one sitting, the way I should have looked at my own canonical tags before I bragged that the domain was live.