I Crawled 50 Ranking Websites. Internal Linking Wasn’t the Pattern I Expected
When I finished auditing 50 real websites for technical SEO, one question was still sitting there.
If speed, schema and clean markup weren’t enough to explain why those pages ranked, could the answer be hiding in the links between them?
Not backlinks. Internal links.
The ordinary links from a homepage to a service, from an article to a useful guide, or from a location page to the thing somebody actually wants to buy.
Google says it uses the links between pages to understand site structure and relative importance. It also recommends linking important pages from other relevant pages and using concise, relevant anchor text. That makes internal linking sound measurable. Crawl the sites, count the links, score the structures and see what the winners have in common.
So that’s what I tried to do.
I went back to the same 50 websites from my technical SEO study. I crawled up to 100 pages on each domain and collected 536,365 internal-link records.
I expected to finish with a neat league table.
I didn’t.
The most useful finding wasn’t which site scored highest. It was how quickly an internal-link score becomes nonsense when you ignore how much of each website you actually managed to see.
That limitation turned out to be the story.
What I measured
I wasn’t interested in producing another list of orphan pages from a crawler and calling it strategy.
I wanted to know whether each site’s structure did five useful things:
- made important pages easy to discover;
- spread links across the site instead of concentrating them on a handful of URLs;
- supported pages with links from relevant content;
- used anchors that explained where the link went;
- avoided broken, redirected, noncanonical and
nofollowinternal targets.
Those became the five parts of the automated score:
| Category | Weight | What it measured |
|---|---|---|
| Discoverability | 25 | Click depth, near-orphans and whether the original ranking URL was reachable |
| Distribution | 20 | How widely incoming links were spread and whether a few destinations dominated |
| Content support | 20 | Contextual links into pages and useful links out of content |
| Anchor quality | 15 | Descriptive anchors and whether the same wording pointed to conflicting destinations |
| Link hygiene | 10 | Known broken, redirected, noncanonical and nofollow targets |
That produced an automated score out of 90. The final ten points were reserved for a manual relevance review, because a crawler can tell me that a link exists but not whether it genuinely helps the reader.
That distinction matters. Counting links is easy. Judging whether they belong there is the actual work.
How I crawled the sites
All 50 domains were given the same bounded crawl:
- start at the homepage;
- follow links breadth-first;
- record no more than 100 pages per domain;
- stop at a maximum depth of six;
- obey
robots.txtand any slower crawl delay it declared; - remove query strings so tracking parameters didn’t inflate the graph;
- inventory up to five sitemap files and 5,000 sitemap URLs per domain;
- keep the original ranking URL as a measurement, without artificially injecting it into the crawl.
The final run produced:
| Result | Count |
|---|---|
| Websites attempted | 50 |
| Successful on-domain HTML pages | 3,490 |
| Internal-link records | 536,365 |
| Template links | 417,380 |
| Contextual links | 99,722 |
| Content-module links | 16,317 |
| Other internal links | 2,946 |
| Original ranking URLs discovered naturally | 26 |
The crawler completed every domain without a runner failure.
But “completed” does not mean “saw the whole website”. That difference changed everything.
The first finding: a crawl limit can create fake confidence
One hundred pages sounds like a respectable sample until you apply it to Duolingo, Reddit, HSBC, YouTube, a national retailer and a local plumber as though they are comparable objects.
They aren’t.
On a small local website, 100 pages may cover most of the useful structure. On a platform with millions of URLs, it is barely a glance through the front door.
If I gave both sites a score anyway, the decimal places would create an illusion of precision. A site might appear to have no orphan pages simply because the crawl never reached the section where they lived. Another might look beautifully shallow because I only saw the pages linked closest to the homepage.
So I added a coverage gate.
| Coverage | Sites | Treatment |
|---|---|---|
| A | 0 | Crawl queue exhausted before the page cap; eligible |
| B | 2 | At least 70% of the observed sitemap inventory covered and ranking URL represented; eligible |
| C | 3 | 40–69% covered and ranking URL represented; eligible with an explicit limitation |
| D | 28 | Low or indeterminate coverage; diagnostics retained, score excluded |
| Unscored | 17 | Too few successful pages or too low a successful-response rate |
Only five of the 50 websites met the rules for a publishable automated score.
At first, that felt like a failed experiment.
It wasn’t. It exposed a problem I now see in a lot of site-audit reporting: the score gets treated as the truth, while the visibility of the crawler is buried in the settings.
Before believing any internal-link audit, ask one question:
How much of the website did the tool actually see?
If the answer is unclear, the score is unclear too.
The second finding: most internal links were not contextual
Of the 536,365 link records, 417,380 came from repeated template areas such as navigation, footers and other site-wide components.
That is roughly 78% of every link observed.
Contextual links inside the main content accounted for about 19%. Repeated content modules added another 3%.
This doesn’t mean template links are bad. Navigation is what makes a site usable, and Google explicitly recommends a logical, crawlable hierarchy. A homepage should link to categories. Categories should lead to the pages beneath them. Important destinations should not depend on somebody using a search box.
But raw link totals are a terrible proxy for internal-link quality.
A footer repeated across 500 pages can create 500 links to a destination without adding 500 meaningful recommendations. A single well-placed contextual link from the right guide may tell a user—and a crawler—far more about why the destination matters.
This is why the scoring separated template links from body links. Otherwise, the biggest navigation would usually win.
The five sites I could score
The eligible results were:
| Rank | Website | Coverage | Automated score /90 |
|---|---|---|---|
| 1 | plumblondon.com | C | 85.24 |
| 2 | london-plumber.co.uk | B | 72.92 |
| 3 | wefix.london | C | 72.25 |
| 4 | spanishhackers.com | B | 65.53 |
| 5 | spanishobsessed.com | C | 49.57 |
These are not final SEO scores, and they are not evidence that the first site ranks because of internal linking.
They are structural scores for the portion of each site that met the coverage rules. The C-grade sites still carry a clear sampling limitation, and the manual relevance component remains separate.
Even with those caveats, the differences between them are useful.
Plum London: the strongest all-round structure
Plum London scored 85.24 out of 90.
Every scored page was within three clicks. There were no observed near-orphans. Every page received links from at least three internal sources, and the top 10% of destinations accounted for only 26% of the observed link relationships.
It also performed well where navigation alone cannot save you:
- 82% weighted content-support rate;
- 91% of content pages included at least two useful body or content-module links;
- 87% descriptive body anchors;
- no known broken or redirected internal targets in the scored crawl.
The interesting part is not that it had lots of links. It is that those links were spread through the structure and reinforced by content.
The limitation is coverage C. This is strong evidence about the observed sample, not a claim that every URL on the domain behaves the same way.
London Plumber: strong architecture, weak hygiene
London Plumber reached 72.92 with Coverage B.
Its distribution was excellent. Nearly 94% of scored pages received links from at least three internal sources, 95% of content pages contained useful outgoing links, and only 2.5% of pages were near-orphans.
Then link hygiene dragged the score down.
Of the fetched linked targets used in that part of the calculation, 7.8% were broken and 14.4% redirected. The site was doing the difficult strategic work—connecting pages—but losing points on maintenance.
That is a useful reminder: adding internal links is not a one-off SEO task. Redirect chains, removed pages and changed URLs slowly turn a good structure into an inefficient one.
Wefix London: easy to reach, less supported by content
Wefix London scored 72.25 with Coverage C.
Its discoverability was perfect in the observed crawl. Every scored page was within three clicks, none were near-orphans, and every page had at least three incoming internal sources. Its anchors were also exceptionally clear, with 100% descriptive coverage and almost no destination ambiguity.
The weakness was content support.
Only 34% of content pages had at least two useful outgoing body or module links. In other words, the architecture made pages reachable, but the content itself did less of the work connecting related ideas and services.
Navigation can expose a page. Context helps explain why it matters.
Spanish Hackers and Spanish Obsessed: similar topic, different graphs
Spanish Hackers scored 65.53 with Coverage B. Spanish Obsessed scored 49.57 with Coverage C.
Both kept their scored pages within three clicks. The difference appeared deeper in the graph.
Spanish Hackers spread links more evenly and gave more pages meaningful content support. Its top 10% of destinations attracted roughly 37% of link relationships, compared with about 60% on Spanish Obsessed. It also had a much lower near-orphan rate: 17% versus 37%.
Spanish Obsessed used highly descriptive anchors, but the same or similar wording often pointed to different destinations, and a large share of fetched linked targets redirected.
Good anchor text helps. It cannot compensate for an uneven structure by itself.
What the results do—and don’t—say about rankings
This is the point where it would be tempting to write: “Plum London proves internal linking drives rankings.”
The data does not prove that.
The original 50 pages were selected because they ranked in the earlier study. There is no matched control group of non-ranking sites here, and only five domains achieved enough coverage for comparative scoring. Brand, backlinks, content quality, intent, age and wider authority were not held constant.
So this is not a correlation study between internal-link scores and Google positions.
What it does show is narrower and more useful:
- a ranking page can exist inside a structure that is only partially visible to a bounded crawler;
- template links dominate raw counts, so placement matters;
- shallow click depth does not automatically mean links are well distributed;
- descriptive anchors do not automatically mean the surrounding link graph is healthy;
- maintenance problems can undermine an otherwise deliberate structure;
- crawl coverage must be part of the score, not a footnote beneath it.
Google’s own documentation says links help it discover pages and understand their relevance, while internal linkages can signal the relative importance of pages within a site. That supports the mechanism. It does not turn one metric into a guaranteed ranking lever.
Internal linking is infrastructure, not a cheat code.
What I would check on a real website
This study changed the order in which I would now review internal linking.
1. Prove the crawl coverage first
Check how many indexable pages exist, how many the crawler fetched successfully, whether important sitemap URLs appeared, and whether blocked sections or external redirects distorted the sample.
Do not diagnose the graph until you know which part of it you are looking at.
2. Find pages that are technically reachable but practically unsupported
A page being three clicks from the homepage is not enough.
Look for pages that receive links only from navigation, taxonomy or a sitemap. Then ask where a genuine reader would benefit from discovering that page inside related content.
3. Separate template links from contextual links
Do not celebrate 20,000 internal links until you know where they came from.
Menus explain the hierarchy. Contextual links explain relationships. Both matter, but they do different jobs.
4. Measure distribution, not just volume
Look at the percentage of pages receiving links from several unique sources and how much of the graph is concentrated on the most-linked destinations.
A healthy structure should make priority pages obvious without leaving the rest of the useful site invisible.
5. Review the words and the destination together
Google recommends concise, relevant anchor text. I would add one more test: does the wording consistently mean the same thing?
An anchor can look descriptive in isolation while becoming ambiguous across the site.
6. Maintain what you build
Fix internal links that hit broken pages, redirects and noncanonical URLs. Update the source link rather than relying on the destination to clean things up forever.
The best internal-link strategy still decays if nobody maintains it.
The uncomfortable conclusion
I started this study expecting to rank 50 websites.
The honest result was that I could responsibly rank five.
That sounds less impressive than a giant comparison table. It is also more useful.
The crawl showed that internal linking is not one number. It is a combination of discovery, distribution, context, language and maintenance. More importantly, every one of those measurements depends on coverage.
An audit tool can give you a beautifully precise score for an incomplete graph. The number may be mathematically correct and strategically wrong.
That is the lesson I am taking from the data:
Don’t trust an internal-link score until you trust the crawl behind it.
Internal linking still matters. Google uses links to discover pages, interpret relationships and understand which pages a site treats as important. Users rely on those same pathways to move from a question to an answer, and from an answer to a decision.
But the job is not to add more links until a plugin turns green.
The job is to build clear routes through the site, support important pages from relevant content, use language that sets the right expectation, and keep those routes working.
That is less tidy than a checklist.
It is also much closer to how real websites work.
Download the findings
I’ve published the full workbook, including the site scores, crawl summaries, manual-review sample and scoring method:
Open the 50-site internal-linking findings in Google Sheets
The D and Unscored sites are included for transparency, but their automated diagnostics should not be treated as comparable site-wide scores. The five A–C results are provisional scores out of 90 until the manual relevance review is complete.
What you should read next
Brad Holmes
Web developer, designer and digital strategist.
Brad Holmes is a full-stack developer and designer based in the UK with over 20 years’ experience building websites and web apps. He’s worked with agencies, product teams, and clients directly to deliver everything from brand sites to complex systems—always with a focus on UX that makes sense, architecture that scales, and content strategies that actually convert.