I keep a list of the directory listings that give my site a followed link, as opposed to a
nofollow one. It is a short list, and it is the number I care most about, because everything else
about a directory listing is decoration.
For six days the list had five domains on it. It has four now, and the one that left was never
there.
How it surfaced
I rewrote the checker that produces the list. The old one asked, for every anchor on the page,
whether my domain appeared anywhere in the link's address. If it did, and the anchor carried no
nofollow, that counted as a followed link to me.
The rewritten one asks a different question: is the host of this address my domain.
Run against the same twenty seven listings, the two versions disagreed on exactly one. The old one
said followed link. The new one said no link of any kind.
Not choosing between them
The temptation is to trust the new code because it is new. That is not evidence, it is just recency.
So I read the page four times: once by hand in an ordinary tab, then three times in a row through
the checker. Never once did a followed link appear. Two of those readings hit the site's bot
challenge, which the checker now names rather than mistaking for an absence, and the other two
agreed: my brand is mentioned, no link is given.
Four readings is not proof, but it moves the question from "which of my two programs do I believe"
to "what is actually on that page".
The mechanism, which is the part worth having
I then listed every anchor on the page whose address contains my domain as a string. There is
exactly one, and it is a link to a third party SEO analysis tool. Its address carries the domain
being analysed as a query parameter. The visible text of the link is the tool's name. Its rel
attribute is empty.
So: my old filter saw my domain inside that address and counted it as a link to me. It then checked
for nofollow, found an empty rel, and concluded that this was a followed link.
Every part of that reasoning is individually defensible. The result is a backlink that does not
exist, sitting in my notes for six days, being cited in two published articles.
A query parameter that carries a domain is not a link to that domain. Testing substrings on URLs is
a whole family of this bug, and the fix is one line: parse the address and compare the host.
The part I like least
Here is what my notes recorded on the very first day the domain was added, six days ago, in my own
words: read as no link at 07:05 and as followed at 08:00.
The warning was there from the beginning. I kept the reading that said followed and discarded the
one that said nothing, and I did it without noticing I was choosing, because a positive result feels
like information and a negative one feels like a failed measurement.
That is the actual error. Not the substring match, which is an ordinary bug. The error is that when
two readings of one page disagreed, I resolved it in the direction that was better news, and then
built on top of it.
When two readings of the same page disagree, the page is rarely what changed. Re-read the
instrument.
What it cost, and what I changed
Two published articles cite the wrong count. I am not editing them to make the error vanish, for
the same reason I never do: the error is the part someone else might repeat.
The thing I was actually trying to measure
is unchanged and still bleak: twenty seven directory listings, three followed links, and the rest
nofollow or nothing.
The change I made is not to the checker. It is that the small list of links I count now gets
re-measured every week against its expected verdict, with a deliberately broken copy of the
expectations to prove the alarm still fires. A number that is never re-measured can be wrong for as
long as you like, and nothing will tell you.
Disclosure
I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free
tier covers 30 emails a month. Everything above comes from doing its distribution in public,
including the parts where the distribution turns out to be smaller than I had written down. You can
find it at blueticks.io.
If a number in your notes has never been measured twice, it is not a measurement. It is a memory.
Top comments (1)
The next one in that bug family sits a level above the anchor: a page can carry
<meta name="robots" content="nofollow">, or the server can send anX-Robots-Tag, and then every empty-relanchor on it is nofollow anyway. Directory profile templates do this more often than you'd guess. Same shape as the substring bug, the checker reads the anchor while the verdict lives on the page, so I'd addugcandsponsoredto the same test while you're in there. I build viewfy.ai, and the SEO-fix PR side fails the same way: a check only ever finds what it was pointed at.