Internal Linking and Site Architecture: The SEO Work Most Sites Skip

Internal links decide which of your pages Google treats as important. Here is how to structure them, find orphan pages, and automate the whole thing in code.

Short answer: Internal links tell search engines which of your pages matter and what they are about. Most sites publish content that nothing links to, so it never accumulates authority and sometimes never gets crawled. Fixing internal linking costs nothing in new content and is usually the highest-return technical SEO work available.

Key Takeaways

  • A page with no internal links pointing at it is invisible to crawlers that arrive any way other than your sitemap.
  • Link depth matters: pages more than three clicks from the homepage get crawled less often.
  • Descriptive anchor text tells Google what the target page is about. "Click here" tells it nothing.
  • Hub-and-spoke beats a flat structure once you have more than about twenty pages.
  • If linking is manual, it rots. Generating links from your data model keeps it correct permanently.

What Internal Links Actually Do

They do three separate jobs, and conflating them is why advice on this topic is often vague.

First, discovery. Crawlers follow links. A page reachable only from your sitemap is relying on a weaker signal than a page linked from your navigation and from three related articles.

Second, authority distribution. Whatever ranking strength your site has accumulated flows along internal links. Pages you link to often from strong pages inherit more of it. This is the part most sites leave entirely to chance.

Third, context. The anchor text and the surrounding sentence tell search engines what the destination page covers. Ten links reading "our SEO service" describe a page far more clearly than ten reading "read more".

Three Structures, and When Each Breaks

Most sites drift into one of these without choosing it deliberately.

StructureHow it worksWhere it breaks
FlatEverything linked from the main navigation.Past about 20 pages the nav becomes unusable and nothing signals topical grouping.
SiloStrict sections that do not link across to each other.Genuinely related pages in different silos never connect, which wastes real relevance.
Hub and spokeA pillar page per topic, with supporting articles linking up to it and to each other.Needs discipline about which page is the hub, or two pages compete for the same queries.

Hub and spoke is the right default for a business site. Your service page is the hub. Every article about that topic links to it, and the hub links back to the strongest few.

Find Your Orphan Pages First

An orphan page has no internal links pointing to it. These are usually the posts published in a hurry, or old landing pages that fell out of the navigation during a redesign.

To find them, crawl your own site with a tool such as Screaming Frog or Sitebulb, then compare the crawled URL list against your sitemap. Anything in the sitemap that the crawl never reached by following links is an orphan. On most sites that have been running a few years, this list is longer than expected.

The fix is not complicated. Link to the page from somewhere relevant that already gets crawled regularly.

Anchor Text Without Over-Optimising

Use language that describes the destination, and vary it. If every link to one page uses the identical phrase, the pattern looks engineered, because it is.

  • Good: "how we handle technical SEO in the codebase", "our SEO service", "fixing Core Web Vitals"
  • Weak: "click here", "this page", "learn more"
  • Risky: the same exact-match keyword, every time, from fifty pages

A Worked Example: How This Site Links Itself

We rebuilt the internal linking on this site so that it cannot fall out of date, because the manual version had already drifted.

The old setup maintained the same relationships in three places: blog categories as free text on each post, a category-to-service map in one component, and a service-to-category map in another. They had quietly disagreed with each other, and the result was that three service pages were displaying articles from the wrong category.

The fix was to make one file the single source of truth. Every category is declared once, paired with the service page it belongs to. Everything else reads from that: the blog filter, the related-service block on each post, and the related-articles block on each service page. Adding a category is now one line, and the links generate themselves.

Two things we learned doing it are worth passing on. The first is that a related-articles block needs a rule for what to show when a topic is new and has only one article, or it renders half empty. The second is that if a page can be linked from two different rules at once, you will eventually render the same link twice, so deduplicate before rendering rather than assuming it cannot happen. We shipped that bug and caught it in review.

The broader point: internal linking driven by your data model stays correct as the site grows. Internal linking maintained by hand is correct on the day you do it.

An Afternoon's Audit

  1. Crawl the site and export every URL with its click depth from the homepage.
  2. Flag anything deeper than three clicks that you actually care about ranking.
  3. Compare the crawl against your sitemap to find orphans.
  4. List your money pages, then count how many internal links point at each. Compare that to how important the page is to the business.
  5. Fix the largest mismatch first. Usually a service page that earns revenue has fewer internal links than a blog post nobody reads.

Where This Fits

Internal linking is part of the technical foundation that everything else depends on, including being quoted by AI assistants, which we cover in our guide to SEO, AEO and GEO. If your pages are slow as well as poorly linked, our Core Web Vitals case study walks through fixing that in production code.

We build business websites from $500 and larger web applications from $1,500, with timelines on our pricing overview, and final cost depends on scope. If you would rather have the structure fixed than documented, our SEO service is delivered as code changes in your repository.

Frequently Asked Questions

Frequently Asked Questions

How many internal links should a page have?

There is no correct number, and chasing one leads to padding. A useful test is whether each link helps the reader get to something relevant. A 1,500 word article naturally carries three to eight useful internal links. If you are struggling to place them, the real problem is usually that supporting content on that topic does not exist yet.

Do internal links from the footer carry the same weight as in-content links?

In practice, less. A link inside the body of a relevant article carries topical context that a sitewide footer link does not, because the surrounding content tells search engines what the destination is about. Footer links are useful for navigation and crawl discovery, but they are not a substitute for contextual links.

Can internal linking fix a page that is not indexed?

Often, yes, when the status is "Discovered, currently not indexed". That status usually means Google has not judged the page worth spending crawl budget on. Links from pages that already get crawled regularly are a direct signal that the page matters, and it is one of the few levers you control immediately.

Should every blog post link to a service page?

Where it is genuinely relevant, yes, because that is how informational traffic reaches something commercial. Where it is not relevant, forcing it reads like advertising and weakens the article. A post that cannot naturally reach any service is a sign the topic was chosen for traffic rather than for the audience you want.

What is the fastest internal linking win on an existing site?

Find your most important commercial page, then count how many internal links point at it compared with your most-linked blog post. On most sites the blog post wins by a wide margin. Adding contextual links to the commercial page from your strongest existing articles takes an afternoon and needs no new content.