I print jwogrady.com and serve www.jwogrady.com
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.