Internal Linking Strategy for Blogs That Actually Compounds
The one ranking lever you control 100% — and the ten-minute habit almost every blog skips
Most blogs treat internal links as an afterthought. Write the post, hit publish, move on. Then the same teams spend months chasing backlinks they can't control, while ignoring the one ranking lever they own outright.
TL;DR: Internal links are the highest-ROI SEO activity most blogs ignore. They pass authority, signal topic relationships to Google, and keep readers on your site. The hub-and-spoke model — one pillar page linked to by all supporting posts — is the structure that compounds over time.
Here's the uncomfortable math: a backlink campaign might land you five decent links a quarter, after outreach, follow-ups, and a few bruised egos. Your own blog archive can produce fifty internal links this afternoon, each one placed exactly where you want it, with exactly the anchor text you choose. No gatekeepers. No pitch emails. No waiting.
This post lays out an internal linking strategy that compounds — meaning every post you publish makes the previous posts stronger, and every old post helps the new ones rank faster. It's the difference between a pile of articles and a site that behaves like a connected body of work.
Why internal links are the most underused SEO lever
Three things make internal links unusual among ranking factors:
You control them completely. Backlinks depend on other people. Core Web Vitals depend partly on your hosting and framework. Internal links depend on nobody but you. There is no other signal where you decide the source, the target, the anchor text, and the placement — all of it.
They pass authority. When an external site links to your pillar post, that authority doesn't have to stop there. Internal links let it flow onward to every post the pillar links to. A blog with strong internal linking gets more out of every backlink it earns, because the value spreads instead of pooling on one URL.
They define your site structure for crawlers. Google doesn't see your sitemap the way you see your nav menu. It builds its understanding of your site by following links. The pages you link to most, from the most prominent positions, are the pages Google treats as your most important. If your best commercial page has two inbound internal links and a throwaway announcement post has forty, you've told Google the announcement matters more. You probably didn't mean to.
Most blogs still link internally at random — whatever the writer happened to remember while drafting. That's not a strategy; it's an accident with a publish button.
How Google actually uses your internal links
Internal links do three jobs in Google's pipeline, and each one rewards deliberate linking.
Discovery
Googlebot finds new pages by following links from pages it already knows. A new post linked from your homepage and three older articles gets crawled fast. A new post sitting alone at the end of a paginated archive can wait days or weeks. An XML sitemap helps — UnfoldCMS generates one automatically, as any CMS worth using should — but a sitemap is a hint, not a command. Links are the stronger discovery signal.
PageRank flow
PageRank never died. Google retired the public toolbar score, not the concept. Authority still flows through links, internal ones included. Every page on your site has some amount of equity — earned from backlinks or inherited from other internal pages — and your internal links decide where it goes next.
This is why "link from your strongest pages" isn't a folksy tip. It's plumbing. Your homepage and your most-linked posts are reservoirs. Internal links are the pipes. Pages with no pipes running to them stay dry no matter how much authority the rest of the site holds.
Anchor text as a relevance signal
The clickable text of a link tells Google what the destination page is about. When five of your posts link to the same article with anchors like "internal linking strategy," "how to structure internal links," and "linking older posts to new ones," you've described that page to Google five times in five slightly different ways. That's a relevance signal you wrote yourself.
External anchor text is mostly outside your control — people link with your brand name or a bare URL. Internal anchor text is 100% yours. Wasting it on "click here" and "read more" is throwing away free relevance.
The hub-and-spoke model: structure that compounds
The strategy that actually works at the site level is hub-and-spoke, also called topic clusters. It's simple:
The hub (pillar page) is one substantial page covering a broad topic — the page you want ranking for the big head term. "CMS SEO" or "headless CMS" level queries.
The spokes (cluster posts) are narrower posts that each cover one subtopic in depth — long-tail queries the pillar can't address fully without becoming a 15,000-word monster.
The linking rule is strict: every spoke links up to the hub, and the hub links down to every spoke. Spokes can also link sideways to each other when relevant.
Why this compounds:
- Authority concentrates on the hub. Every spoke you publish adds another internal link pointing at the pillar, pushing it up for the competitive term.
- The hub redistributes authority. As the pillar earns backlinks (broad pages usually earn the most), it passes that equity down to every spoke.
- Google sees topical depth. A tight cluster of interlinked pages on one subject signals that your site covers the topic properly, not in one drive-by post.
Your category pages can serve as lightweight hubs too. In UnfoldCMS, categories are real pages with their own URLs, so a well-maintained category functions as an automatic hub: every post in it gets a link from the category page, and the category accumulates inbound links from your nav and footer. That's structure you get without writing a word, though a hand-built pillar always outperforms a bare archive.
For a worked example of cluster thinking, look at how a CMS SEO checklist post functions as a hub: it names ten subtopics, and each subtopic is a spoke waiting to be written and linked back.
Practical rules that hold up
Here's what to actually do, post by post.
3–5 contextual links per post
Every post should link to three to five other posts on your site, from within the body text, where the link genuinely helps the reader. Not twenty links per paragraph — that dilutes each one and reads like spam. Not zero, which is how orphan archives are born. Three to five, where a reader would plausibly click.
If you can't find three posts worth linking to, your archive is thin on this topic — worth knowing before you publish.
Descriptive anchors, not "click here"
The anchor should describe the destination. "Read our guide on flat-file vs database CMS architecture" beats "we compared them — click here" on every count. The reader knows what they're getting, and Google gets a relevance signal for the target page.
A quick test: if you stripped everything but the anchor text, could someone guess the destination page's topic? "Click here" fails. "Internal linking strategy" passes.
Link from old high-authority posts to new posts — the step everyone skips
This is the single highest-value habit in this entire post, and almost nobody does it.
When you publish something new, the new post links out to old posts — fine, that's natural while drafting. But the new post itself has zero inbound internal links. It's an orphan from birth unless you go back and edit older posts to point at it.
Your older posts are exactly where the authority lives. They've had months or years to collect backlinks, and they're already indexed and trusted. A link from your highest-traffic 2024 post to your brand-new article passes real equity and gets the new URL crawled within hours instead of days.
So make it mechanical: every time you publish, open two or three older, relevant, high-performing posts and add a contextual link to the new one. This takes ten minutes. In a markdown-based editor — UnfoldCMS stores post bodies as markdown, so adding a link is typing [anchor](/blog/slug/) into the right sentence — it takes five.
Nobody skips this step because it's hard. They skip it because publishing feels like the finish line. It isn't.
The "related posts" footer pattern
A short related-posts block at the end of each article is the cheapest structural win available. Three links, hand-picked, pointing at sibling posts in the same cluster or adjacent clusters.
Two rules make it work:
- Hand-pick the links. Auto-generated "recent posts" widgets link to whatever was published last, which has nothing to do with relevance. Choose three posts a reader of this post would actually want next.
- Keep it in the content, not the chrome. A simple italic line — Related: post A, post B, post C — inside the post body is treated as content. A sitewide sidebar widget is treated as boilerplate.
Footer links carry less weight than mid-body contextual links (more on that below), but they guarantee a floor: no post in your archive ever ships with zero outbound internal links.
Orphan pages: the posts Google quietly ignores
An orphan page is a post with zero inbound internal links. It exists, it's in your sitemap, it might even be indexed — but no other page on your site points to it.
Orphans rank worse, get crawled less often, and pass nothing to anyone. Most blogs over two years old have dozens and don't know it.
Finding them is straightforward:
- Crawl your site with Screaming Frog (free up to 500 URLs). Crawl, then compare the URL list against your sitemap. Anything in the sitemap but not reached by the crawl is an orphan.
- Query your CMS database directly if you self-host. With a self-hosted Laravel CMS like UnfoldCMS, your posts live in a database you own — one SQL query pulls every published slug, and a
LIKEsearch across post bodies shows which slugs never appear inside any other post's content. No subscription tool needed.
Once found, every orphan gets the same treatment: find two or three relevant older posts, add a contextual link in each. If no post could plausibly link to it, ask whether it deserves to exist at all — sometimes the right fix is a redirect, not a rescue.
Anchor text variation: describe, don't repeat
One caution on anchors: don't use the identical phrase every time. If forty internal links all say "internal linking strategy," verbatim, the pattern looks mechanical — and you're wasting the chance to tell Google about the page's secondary topics.
Vary anchors the way a human would naturally describe the page in different sentences:
- Exact: "internal linking strategy"
- Partial: "a linking strategy for blog archives"
- Descriptive: "how to link old posts to new ones"
- Question-style: "how many internal links per post"
All four point at the same URL and together paint a fuller picture than one phrase stamped forty times. Lead with exact-match from your two or three most relevant pages, then go descriptive everywhere else.
Contextual links vs navigation links
Not all internal links count equally. Google's "reasonable surfer" model weights links by how likely a user is to click them — and a link inside a paragraph the reader is actively reading beats a link buried in a footer with eighty siblings.
| Link type | Where it lives | Weight | Anchor value |
|---|---|---|---|
| Contextual body link | Mid-paragraph, in content | High | High — descriptive, surrounded by relevant text |
| Related-posts footer | End of article | Medium | Medium — relevant but templated |
| Navigation / menu | Header, sitewide | Low–medium | Low — repeated on every page |
| Footer boilerplate | Sitewide footer | Low | Near zero |
The implication: your nav menu is not an internal linking strategy. It links the same ten pages from everywhere and says nothing about the other two hundred. The real work happens in body text, one contextual link at a time. This is also why a wall of links in a sidebar does little, while one well-placed sentence — like noting that llms.txt is becoming the AI-crawler equivalent of a sitemap — does a lot: it sits in content, carries a descriptive anchor, and is surrounded by relevant words.
Auditing: see the graph you actually built
You can't fix a structure you can't see. Two ways to audit, depending on your stack:
Screaming Frog (or any crawler). Crawl your site, then sort by "Unique Inlinks." The report shows, for every URL, how many internal links point at it. Look for two patterns: important pages with embarrassingly few inlinks, and trivial pages hogging dozens. Cross-reference against your sitemap to catch orphans the crawl never reached.
Query your own database. If your CMS gives you database access, you don't need a crawler at all. Pull every published post's body, extract the /blog/... URLs with a regex, and you have your complete internal link graph as rows you can count and sort. This is one of the quieter arguments for owning your stack — the kind of thing that pushes teams toward self-hosted platforms when they outgrow hosted ones (a pattern that shows up constantly in why teams leave hosted headless platforms).
One audit item people forget: renamed posts. Change a slug and every internal link pointing at the old URL breaks — or 301s at best, leaking a little equity at every hop. Either update every inbound link when you rename, or use a CMS that handles it. UnfoldCMS keeps a slug history and auto-redirects old URLs to the new one, so a rename doesn't quietly snap a dozen internal links.
Run the audit quarterly. The graph drifts: posts get renamed, deleted, deprioritized, and the links pointing at them rot in slow motion.
The maintenance workflow: 3 out, 2 in
Everything above reduces to one repeatable routine. Run it on every publish and your link graph maintains itself:
On publish — every new post:
- Links out to 3+ older posts with descriptive, varied anchors, placed in body text where a reader would click.
- Links up to its pillar page or category hub, if it belongs to a cluster.
- Ends with a hand-picked related block — three sibling posts, chosen for relevance, not recency.
Within a day of publish — the part everyone skips: 4. Open 2+ older, high-performing posts on related topics and add a contextual link to the new post. 5. Confirm the new post appears on its category page and in the XML sitemap.
Quarterly: 6. Crawl or query for orphans — fix or redirect every post with zero inbound internal links. 7. Spot-check anchors on your top pages: enough variation, no "click here," no broken targets from renamed slugs.
That's the entire system — no tooling budget, maybe fifteen minutes per post. The payoff compounds: post #50 launches with inbound links from posts #12 and #31, ranks faster because of them, and six months later it's the old high-authority post lending equity to post #80. Each article stops being a one-off bet and starts being infrastructure.
Backlinks are rented attention. Internal links are owned land. Build on the land first.
Related: The CMS SEO checklist: 10 features that matter · What is llms.txt and does your CMS need it? · Flat-file CMS vs database CMS
Frequently Asked Questions
How many internal links should a blog post have? 2–5 contextual links per 1,000 words is a reasonable baseline. More than that and readers start ignoring them; fewer and you are leaving authority flow on the table. The exact number matters less than whether each link makes sense in context.
Does internal linking actually help SEO? Yes. Internal links pass PageRank between pages, signal topic relationships to Google, and help crawlers discover new content faster. The effect is well-documented and entirely within your control — unlike backlinks.
What anchor text should I use for internal links? Descriptive phrases that tell the reader what the linked page is about. Vary the phrasing across multiple links to the same page. Avoid "click here", "read more", or repeating the exact keyword every time.
What is an orphan page and why does it matter? An orphan page has no internal links pointing to it. Google may eventually crawl it via the sitemap, but it will rank poorly because no authority flows to it from the rest of your site. Run a crawl audit quarterly to find and fix orphans.
How do I audit my internal link structure?
Screaming Frog (free up to 500 URLs) or Sitebulb will show inlinks per page, orphan pages, and redirect chains. For a quick check, site:yourdomain.com "anchor text" in Google also shows where you have linked specific terms.
Free & Open Source
Own your CMS. No subscriptions.
Unfold CMS is free to download and self-host. Built on Laravel + React, full source code included.
Share this post: