Internal links are the cheapest SEO lever you fully control. They decide how authority flows through your site, which pages search engines consider important, and whether a crawler (or an AI engine) can even find your content. Most sites get them wrong not by breaking rules but by never deciding anything: links accumulate instead of being designed.
Architecture: hubs and clusters
Structure content as topic clusters: a hub page owning a broad topic, spoke pages covering each subtopic, linked both ways. This guide is itself an example — a hub linking 22 topics, every topic linking back and sideways.
Why it works:
- Search engines infer topical authority from tightly interlinked clusters — twenty connected pages about Next.js SEO outrank twenty scattered posts.
- Authority from external links to any one page flows through the cluster.
- AI engines follow the same trails when deciding whether you're a source or a one-off mention.
The practical rule: every important page within 3 clicks of the homepage. Deeper pages get crawled less, ranked lower, and refreshed more rarely.
Anchors carry meaning
Anchor text tells the crawler what the target page is about — it's the closest thing to voting for your own keywords:
- ❌ "Learn more here" — wasted signal.
- ✅ "how ISR revalidation keeps pages fresh" — the target now has a relevance vote for its topic.
Vary anchors naturally; identical exact-match anchors from every page look mechanical. And never nofollow internal links — you'd be telling Google not to trust your own site.
Orphans and dead weight
An orphan page — reachable from nowhere — effectively doesn't exist: no crawl priority, no authority, often no indexing. Orphans accumulate silently: landing pages from old campaigns, posts whose category was removed, pages only reachable from a decommissioned menu.
Audit quarterly: crawl your site (Screaming Frog or a script over your own sitemap), diff the URL set against pages receiving internal links, and either link or retire the orphans. In Next.js, the fix is structural — generate link blocks from the same data that generates pages:
// related topics from the registry — pages can't become orphans,
// because every page is linked from its siblings by construction
const related = topics.filter((t) => t.cluster === current.cluster);
Where links live matters
- In-body contextual links carry the most weight — a link inside a relevant paragraph beats ten footer links.
- Breadcrumbs (UI +
BreadcrumbListschema) give every deep page a crawlable path to its hub. - Related-content blocks at the end of articles keep both crawlers and readers moving; generate them from data, don't curate by hand — hand-curated blocks rot.
- Site-wide footer links are fine for navigation but are heavily discounted as ranking signals; don't stuff keywords there.
Checklist:
- Content organized in hub-and-spoke clusters with two-way links
- Every indexable page reachable within 3 clicks of the homepage
- Descriptive anchors everywhere; no "click here", no nofollow on internal links
- Quarterly orphan audit; related blocks generated from data, not curated
- Breadcrumbs with schema on all deep pages