Internal links are the cheapest SEO you are not doing
$387.11 bought three external links in July. One of the three no longer exists.
That same month, a crawl of my own properties turned up pages with nothing linking to them. Not from a related post, not from a hub, not from one sentence in one article. The fix costs nothing and takes an afternoon, and I had spent the money on outreach instead of spending the afternoon.
Nobody sells internal links
There is a whole economy behind external links. Marketplaces, brokers, agencies, outreach tooling, Telegram groups where placements change hands daily. Money moves, so attention follows.
Internal linking has no seller. No invoice arrives, no dashboard reports on it, nobody emails you about a limited slot on a high authority domain. The nearest thing to a product is a plugin checkbox called related posts, which is where I went wrong personally, and I will get to that.
So it ends up in the same drawer as the outbound audit I ran last month: 15,321 dofollow links pointing out of our own site against 16 pointing in. That crawl also produced the internal link graph. I ignored that half of the export for about a week, because I was busy being appalled at the outbound number.
The internal half was worse, mainly because there was nobody else to blame for it.
Every part of an external link belongs to somebody else
You ask, or you pay. They choose the page. They usually choose the anchor, or negotiate down the one you wanted. They decide whether it survives the next redesign, the next owner, the next renewal invoice nobody remembers to pay.
Internal links belong to you completely: the page they sit on, the anchor, the position in the body, the decision to leave them there. Nothing expires. You can change all of it this afternoon and change it back tomorrow.
Complete control at zero cost should make this the first job on the list. It is reliably the last.
Orphans are the default state of a site that publishes
An orphan is a page with no internal link pointing at it. Reachable from the sitemap or by typing the URL, and otherwise invisible from inside your own site.
The mechanism is dull, which is why it goes unnoticed. You write a new article and link back to two older ones, because you are writing and you remember what you already published. Then you do it again next time.
Links only ever travel backwards in time. The older piece never gets edited to point forwards, because in your head it is finished.
Publish once a day for a year and you have 365 pages, most of them with nothing pointing at them except a paginated archive. Page 14 of a category listing is not read by people and not linked by anything. It stops the page being technically orphaned, which is a different claim from saying you linked to it.
Several sites I run look exactly like this. Steady publishing for years, and a large share of the pages have nothing pointing at them except the archive that generated them.
Sort ascending
Crawl your own site, extract every internal link with its source and destination, group by destination, count.
Then sort ascending, which no SEO tool you own does by default. Everything in this industry is built to show you the top of a list. The answer here is at the bottom.
Four groups come out of it:
- pages with zero inbound internal links, which is the list you work from
- pages with exactly one, where that one is an archive page
- pages linked only from a nav or footer template, which I will argue below barely counts
- internal links pointing at URLs that now return 404
The last group produced the worst finding on our side. A sibling property had lost 334 articles at some point. All 404, all still linked from the site’s own pages. A site linking internally to its own missing articles is a clearer neglect signal than any outbound count, and it is entirely self inflicted.
The average lied to me
I put a related posts block on one of these sites years ago. Six links at the foot of every article, generated automatically. I looked at it once, decided internal linking was handled, and stopped thinking about it.
When I finally counted, the block was pulling from the same small pool of recent posts on nearly every page. A handful of URLs were collecting thousands of internal links each. Everything else collected zero.
Average internal links per page looked healthy. That is what hid it for years. A template link inflates the average uniformly and says nothing about distribution, so the metric was reassuring and useless.
The median would have exposed it instantly. So does sorting ascending.
I had a widget and I called it a strategy. It was a footer with extra steps.
Furniture versus a decision
A link on every page distinguishes nothing. If 4,000 pages all point at the same destination, that link tells you nothing about which page found it relevant. Navigation, footers and sidebars are furniture. So is an automatic related posts block.
A link inside the body of one article, surrounded by prose on the same subject, was chosen. Somebody picked that destination, from that context, in that sentence.
Practical consequence: you cannot fix an orphan by adding it to the footer. You will create 4,000 links, change nothing about how the page is understood, and make your own link counts look busier while the real problem sits there.
Go back and edit the old page
A few of your pages are stronger than the rest. The ones with real external links pointing at them and a few years of age. On every site I have looked at, that is five or six pages out of hundreds.
Those are your distribution. Use them that way.
When you publish something that genuinely relates to one of them, open the old page and put a link in the body, in the paragraph where it belongs. A see also list bolted onto the bottom is not the same thing.
Two minutes of work that nearly everybody skips. The only version of this habit that survives is the one attached to publishing: every time you publish, edit two older pages. Quarterly initiatives die in week three.
Say what the page is about
External anchor text deserves caution. A hundred exact match anchors pointing at you from sites you paid for is a pattern, and it is a pattern precisely because a hundred independent editors did not choose it.
Internally, you wrote both ends. Google knows you control your own body copy. Anchor variation fools nobody here, so stop performing it.
Use the words the destination is about. If it covers crawl budget, the anchor says crawl budget. Click here wastes the link. Read more wastes it. So does pasting the bare URL.
One caution, and it is about clarity rather than penalties. Do not point the same anchor at two different destinations. If half your pages say keyword research aimed at one guide and half aim it at another, you have created an ambiguity nothing resolves on your behalf.
What this is worth in money
We sell placements. A dofollow link on an article on one of these properties goes for $250.
If that article has nothing internal pointing at it, the buyer is paying for position on a page my own site behaves as though it never published.
Internal linking is the only way I know to raise the value of inventory I already own without spending anything. One afternoon across the pages we sell from, and every placement on them is worth more than it was that morning. That work should have come before the $387.11.
It cannot manufacture anything
Internal linking redistributes authority the site already has. If the site has none, you are dividing zero into smaller portions.
I tested this on a thin page on purpose, pointing a stack of body links at it from better pages. I have no ranking story to report from that experiment, which is the honest account of what happened.
A genuinely useful page that nothing links to is where an internal pass earns its afternoon. A thin page stays thin with more links pointing at it.
The one number
Count the pages with zero inbound internal links. That is the metric.
Check it after any large publishing run, and once a quarter otherwise. It trends towards zero without ever arriving, because you keep publishing.
If it jumps, something structural changed. A template edit, a plugin update, a category restructure that quietly stopped linking to half the archive.
The crawl and the queries I used to build the zero list are here.