DEV Community

Blueticks
Blueticks

Posted on

I measured whether my 27 published pages linked to each other. Not one did

I spent two weeks publishing technical writing about my own product on three platforms I do not
control. This morning I finally asked a question I should have asked on day one: do any of these
articles link to each other?

I measured it across all twenty seven live pages I had at the time. The answer was zero.

The first measurement said the opposite

My first script reported that all twenty seven pages were cross linked, several of them carrying
twenty or more internal links. I did not believe it, and not because of a control. I believed it
was wrong because I know what I wrote, and I have never put twenty links into an article.

The cause is worth its own paragraph, because it is a mistake anyone can make in a browser console.

I selected the article body like this:

document.querySelector('#article-body, .content, article, main')
Enter fullscreen mode Exit fullscreen mode

That reads like a fallback chain: try the first, fall back to the second, and so on. It is not one.
A selector list returns the first element in document order that matches any of the
selectors. If a <main> wraps the whole page and appears before #article-body in the DOM, main
wins, and you have just selected the entire page including its navigation, its footer, and its
recommended-posts rail.

So I was not counting my links. I was counting the platform's "more from this author" widget.

The fix is a real fallback chain:

['#article-body', '.content', 'article'].reduce((found, sel) => found || document.querySelector(sel), null)
Enter fullscreen mode Exit fullscreen mode

and then a second filter, because the distinction that actually matters is not which container the
link sits in, but whether a human wrote it. Editorial links live inside paragraphs. Suggestion
widgets live in lists and cards. Counting only p a separates them cleanly.

With both fixes: zero.

A zero everywhere is a broken instrument until proven otherwise

I have been caught by this before, so I did not record the zero. I ran a positive control first.

Every one of my articles ends with a disclosure paragraph containing exactly one outbound link. If
my selector could see that link, then it can see links in paragraphs, and a zero for internal links
is a real zero rather than a selector that matches nothing.

It found the disclosure link on every page I tested, plus two extra links inside paragraphs on one
platform. The instrument works. The zero is real.

This costs about ninety seconds and it is the difference between a finding and an embarrassment.

What twenty seven dead ends actually cost

Every article I have published is a terminal page. A reader who finishes one has no route to the
other twenty six except my author profile, which almost nobody visits deliberately.

That is bad, but it is the smaller half of the problem.

The larger half is that I cannot properly fix it where those articles live. If I go back and add a
link from one article to another on the same platform, that link is internal to the platform.
It helps a reader find my second piece. It does very little for me, because the domain accruing the
signal is not mine.

I have been treating three third party platforms as my publishing infrastructure. They are not
infrastructure. They are distribution, and distribution you do not own has terms that change.

The terms did change, in three different ways, in one week

I can be specific, because I measure this weekly.

One platform removed an article of mine and explained, when I appealed, that it fell outside their
developer focused scope and included promotional context for the tool I build. That is a fair call
and I accepted it. It also means the range of what I am allowed to write there narrowed overnight,
without any action on my part.

On a second platform, I checked what my outbound link actually is. It carries rel="noopener ugc
nofollow"
and is wrapped in a redirect through their own domain. Whatever else that link does, it
passes nothing. That is true of every article I have there.

On a third, I ran the same exact-title indexation test twice, three days apart, on the same cohort.
Pages that had been returning on their own titles stopped returning. Indexation is not a ratchet.

None of these three things are scandals. They are all reasonable platform behaviour. The point is
that all three moved in one week and none of them moved because of anything I did.

What I am actually going to do

Not a link-insertion campaign across twenty seven published pages. That is hours of work,
visible, and it reads exactly like the link stuffing it would technically be. Internal linking is
something you do while writing, when the pointer genuinely helps the reader, not retroactively in
bulk.

Three things instead.

Cross reference at writing time, and only when it is honest. The next piece I publish cites two
earlier ones, because it is the third in a sequence and the reader benefits from the first two. That
is the standard, not "does this article contain a link".

Publish corrections where the claim was made. I got an indexation claim wrong in public. The
correction goes out on the same platform, and the original gets a pointer to it rather than a silent
edit. That is one internal link that has earned its place.

Own the surface. The uncomfortable conclusion of this measurement is that the fix belongs on a
domain I control, where an internal link works for me instead of for a platform. That is a bigger
piece of work than anything above, and this measurement is what moved it from a nice idea to the
obvious next thing.

The part I would tell my past self

Ask the boring structural question early. "Do my pages link to each other" takes twenty minutes to
answer and I did not ask it for two weeks, during which every one of my twenty seven live
article pages inherited the same defect.

And when a measurement flatters you, distrust it in exactly the way you would distrust one that
does not. My broken script told me my content was fully cross linked. If that number had been
plausible, I would have written it down and moved on.

What happened after I measured it

I am adding this before publishing, because the number moved while this post sat in my drafts.

Three days after the measurement, three of twenty nine pages carry an in-prose link to another of
mine. Not from a retroactive campaign. From the three things listed above, done as they came up: a
correction published on the same platform as the claim it corrects, with a pointer added to the
original, and one new post that cites two earlier ones because it is genuinely the third in a
sequence.

Three out of twenty nine is not a triumph. It is the rate you get when you stop treating internal
links as a task and start treating them as something you do while writing. I am reporting it
because a post that measures a zero and then quietly leaves it at zero would be worth very little,
and because the honest version of the fix is unglamorous and slow.

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 there is a
free tier. Everything above comes from measuring my own distribution work while doing it, including
the parts where the measurement was wrong first. You can find it at blueticks.io.

Top comments (0)