Skip to content
SEOWofSEOWof
Browse the standard
Site architecture11 min read

Internal linking for revenue: the only ranking input you fully control

You cannot control who links to you. You have complete control over how you link to yourself — and on most sites that control is exercised entirely by a CMS default.

Published Updated

Every other significant ranking input requires somebody else’s cooperation. Backlinks require other sites. Content performance requires readers. Brand demand requires years.

Internal linking requires nothing but a decision. It is the only major lever you control completely, it costs nothing but attention, and on the majority of sites it is delegated entirely to whatever a CMS does by default.

The result is a predictable and expensive mismatch: your most-linked page is usually your newest blog post, and your least-linked page is usually the one that pays for everything.

Why the default distribution is always wrong

A typical CMS links a new post from the homepage, the blog index, the category archive, the tag archive, an author archive, a “recent posts” widget in the sidebar of every page, and a “related posts” block on several others. Eight-plus internal links, generated automatically, for a post published this morning that has earned nothing.

Meanwhile your highest-margin service page is linked from exactly one place: the navigation dropdown.

Three months later the post drops out of the recent widget and its internal links quietly disappear. The service page still has one.

Nobody decided this. It is what happens when link distribution is a side effect of a theme rather than a decision.

Step 1: build the mismatch table

Do this before changing anything. It takes an hour and it usually produces a surprise.

Two columns, one row per page:

  1. Commercial value. Revenue, leads, or a defensible proxy. Anything consistent.
  2. Contextual inbound internal links. Links from body content on other pages — explicitly excluding navigation, footer and sidebar, which appear everywhere and therefore differentiate nothing.

Sort by commercial value descending. Read the second column.

Step 2: find the unlinked mentions

This is the highest-yield technique in internal linking and it requires no new content whatsoever.

For each priority page, search your own site for body-content mentions of its topic that do not currently link to it.

site:yourdomain.com "commercial roofing" -inurl:commercial-roofing

Or, more reliably, run it against your own crawl data: extract body text from every page, search for the target phrases, and exclude pages that already link to the target.

Every result is a link you should probably already have. The context is written, the relevance is genuine, and the work is inserting an anchor.

A mid-sized site typically surfaces between 100 and 300 of these. Adding even the best 50 is an afternoon that materially changes how your own site describes its own priorities.

Step 3: fix the depth problem

Click depth — the shortest crawlable path from the homepage — is a strong proxy for perceived importance. Pages beyond three clicks are crawled less often and inherit less equity.

The usual culprit is pagination. A product on page fourteen of a listing might be twenty clicks deep on a site with only 800 products, because the only path to it is next, next, next.

Remedies, in order of effectiveness:

  • Curated hub pages. A “commercial roofing systems” hub linking to twenty relevant products creates direct paths and is genuinely useful to readers.
  • Faceted entry points for high-demand combinations — but only the ones you have deliberately chosen to make indexable.
  • Related-item modules based on genuine relationships rather than random selection.
  • Alphabetical or category indexes for large catalogues.

Step 4: write anchors that mean something

Anchor text is the strongest contextual signal you attach to a link, and it is routinely wasted.

Rules that hold up in practice:

  • Describe the destination, not the action. “Click here” and “read more” describe a mouse movement.
  • Vary the phrasing naturally. Identical exact-match anchors on 200 internal links reads as manipulation and helps less than the variation would.
  • Keep it inside a sentence that a human would write anyway. If the link only makes sense as an SEO artefact, remove it.
  • Never link an image without alt text as the only path to a page — the alt text is the anchor for that link.

Step 5: reclaim what you already earned

This is the single highest return-per-hour item in SEO and it belongs in this discussion because it is the same fix applied to external links.

Find every URL with inbound external links that now returns 404. Somebody did the hard part — they linked to you — and a migration threw it away.

# Given a list of URLs that have inbound links, find the dead ones
while read -r url; do
  code=$(curl -s -o /dev/null -w "%{http_code}" -L --max-time 10 "$url")
  [ "$code" != "200" ] && echo "$code  $url"
done < linked-urls.txt

301 each dead URL to its genuine equivalent. Not the homepage — a redirect to the homepage is treated as a soft 404 and the equity is discarded anyway.

Fifteen minutes of work per URL, and the equity returns on the next crawl. Every site more than a few years old has some of these, and most owners have no idea.

A publishing rule that prevents recurrence

All of the above is remedial. To stop the problem regenerating, adopt one rule:

Every new page links to at least two existing pages, and is linked from at least two existing pages, using contextual body links with descriptive anchors.

The second half is the one that gets skipped, and it is the one that matters. Publishing a page without linking to it from anywhere is how orphans are created — and orphans are the terminal case of this entire problem.

Measuring whether it worked

Internal linking changes are slow to show effect and easy to misattribute. Sensible measurement:

  • Crawl frequency on the target pages, from server logs. This moves first, often within weeks.
  • Impressions on the target page’s primary queries. Movement here precedes position change.
  • Average position for the specific queries the page targets, not sitewide.
  • Click depth re-measured after the change — a direct confirmation the structural work landed.

Do not expect a step change. Internal linking is a compounding structural improvement, not an intervention with a before-and-after screenshot.

The summary

Internal linking is unglamorous, requires no external cooperation, costs nothing beyond attention, and is left to a theme default on most websites. Build the mismatch table, add the unlinked mentions, shorten the paths to the pages that matter, reclaim your dead inbound links, and adopt a publishing rule.

It is the closest thing to free ranking improvement that exists, and it is sitting unclaimed on nearly every site we inspect.