Internal Linking SEO: How Structure and Anchors Drive Discovery
A technical guide to internal linking for SEO: crawlable links, descriptive anchors, flat architecture, and how to find orphan pages, broken links, and wasted redirect hops.
Internal linking is how Google discovers, crawls, and understands the relationships between your pages. Google follows exactly one kind of link: an <a> element with an href that resolves to a real address. Everything else is invisible. A single missing link can leave a page orphaned and stuck in "Discovered - currently not indexed."
What Google actually counts as a link
Googlebot crawls a link only when it is an <a> element with an href attribute pointing to a resolvable URL. Nothing else qualifies. The following patterns look like links to a human but are dead to the crawler:
<a routerLink="/products">— nohref, so nothing to follow.<span href="/products">— wrong element.<a onclick="goto('/products')">— JavaScript handler, not a URL.<a href="javascript:goTo('products')">— a script call, not an address.<a href="#">— resolves to nowhere useful.
If your framework generates any of these, the target pages depend entirely on being linked elsewhere. Client-side routers are the usual culprit: they wire navigation through click handlers and skip the href. The fix is to render real URLs with the History API and let the router intercept clicks on top of them. This is the same failure that breaks JavaScript rendering — see JavaScript SEO and rendering for the full picture.
Architecture: keep important pages shallow
Aim for a flat, logical hierarchy. Every page that matters should sit within a few clicks of the home page, and every important page needs at least one crawlable internal link pointing to it. Depth is a discovery tax: the deeper a page is buried, the later Googlebot reaches it and the more crawl effort it costs.
Breadcrumbs reinforce this hierarchy. They give both users and Google a consistent, machine-readable path back up the tree, and they add contextual internal links on every page for free.
Pages with zero internal links pointing to them are orphan pages. Because Google discovers content by following <a href> links, orphans are hard to find, tend to stall in "Discovered - currently not indexed," and quietly waste crawl efficiency. That efficiency angle connects directly to your crawl budget — every crawl attempt spent rediscovering or failing on links is a crawl attempt not spent on pages that matter.
Anchor text carries meaning
Anchor text tells Google what the linked page is about. Make it descriptive and natural. Avoid the two failure modes:
- Generic anchors like "click here" or "read more" say nothing about the destination.
- Keyword-stuffed anchors are a spam violation, not an optimization.
A few more rules that matter in practice. Don't chain adjacent links together with no separating text — it blurs where one anchor ends and the next begins. For image-only links, the alt attribute is what carries the context, so write it as if it were the anchor text.
This matters beyond whole-page relevance. Google's passage ranking evaluates individual sections of a page, and descriptive internal anchors help it understand how those sections and pages relate to one another.
Links as a ranking and trust signal
Google names links explicitly as a trust signal: in its own overview, "the number of quality pages that link to a page" is a canonical trust factor. Link analysis, including PageRank, is an active ranking system. No single signal decides rankings, but internal links are a lever you fully control, so spend that equity deliberately.
That means being careful where links point:
- Broken internal links waste crawl attempts, dead-end users, and leak link equity into nothing. Crawlinx flags these as broken internal links and the underlying 4xx status.
- Redirect targets cost an extra hop. If an internal link points at a URL that 301s, link directly to the final 200 URL instead. Crawlinx surfaces this as a redirect target, with redirect chains as the compounding case.
- Links to noindexed pages still send users through, but the target will not be indexed. Be deliberate: Crawlinx reports links to noindexed pages so you can confirm each is intentional.
rel attributes: qualify links you don't endorse
Use rel to describe links you can't fully vouch for. nofollow means you don't endorse the target. sponsored marks paid, advertising, or affiliate links. ugc marks user-generated content. Combine them when both apply, for example rel="ugc nofollow". Paid links are only acceptable when qualified this way.
How Crawlinx helps
Crawlinx renders your pages and inspects the resolved DOM, so it catches link problems a source-only tool misses:
- orphan pages — pages with no crawlable internal link pointing to them.
- broken internal links and 4xx status — links pointing at pages that no longer resolve.
- redirect target and redirect chains — internal links routed through a 301 instead of the final URL.
- links to noindexed pages — equity spent on pages that can't be indexed.
- links that only exist after JS render and JS-dependent rendering — navigation that appears only after JavaScript runs, or
href-less router links Googlebot never sees.
Takeaway
Give every important page at least one crawlable <a href> link, keep it a few clicks from the home page, and describe the destination with honest anchor text. Then hunt down orphans, broken links, and wasted redirect hops — they cost you discovery, crawl budget, and equity you already paid for.
Audit your own site — free
77 checks, internal PageRank, render-diff. No signup, results in ~30s.