Internal Linking: We Mapped All 34,655 Internal Links on Our Own Site

Svg
  • Reading time 14 min
  • Summarize with AI
  • Sep. 29, 2026

Internal links tell search engines which of your pages exist and which matter. On 29 September 2026 we crawled all 263 published URLs on voctos.com as a logged-out visitor and counted 34,655 internal links between them.

Of those, 83% came from the header, footer and other blocks that repeat on every page. That share is exactly why most internal link audits miss the real problem.

A page can sit in the menu of every URL on your site while no editor ever links to it from a sentence. We found twelve market pages nothing else linked to, pillar guides that skipped their own service page, and eighteen links to unpublished posts.

83.0%
of internal links came from templates
VOCTOS crawl, 29 Sept 2026
7.3%
sat in body copy placed by an editor
VOCTOS crawl, 29 Sept 2026
12
market pages no path from the homepage reached
VOCTOS crawl, 29 Sept 2026
18
body links to posts that were not published
VOCTOS crawl, 29 Sept 2026

Key takeaways

  • Google uses internal links to find pages and read them through anchor text, and asks that every page you care about get at least one internal link.
  • Crawlers report one total. Split it by position into template, automatic, module and body links, because only 7.3% of our internal links sat in body copy.
  • Our twelve Gulf market pages could not be reached from the homepage by following any link. They existed in the XML sitemap and nowhere else.
  • Of 2,481 body links in our blog posts, 72.6% pointed at other blog posts, and four pillar guides never linked to their matching service page.
  • Eighteen body links used the ?p= address of an unpublished post, which returns a 404 to logged-out visitors and crawlers.

What does internal linking actually do?

Internal linking means pointing one page of your site at another page on the same site. Google uses those links to discover URLs it has not crawled yet, and reads their anchor text, the visible words, to understand the destination.

Google’s link best practices are short and specific. A link needs to be an <a> element with an href before Google can extract it reliably, and its anchor text should describe the destination in a few words.

An image link takes its anchor text from the image’s alt attribute. Links chained side by side lose the words around them, and those words carry context too.

The same page is honest about volume: “There’s no magical ideal number of links a given page should contain.” What it asks for is coverage, so that every page you care about has at least one link from another page on your site.

AI search raises the stakes. Several AI crawlers read raw HTML without running JavaScript, so a link that only appears after a script runs may not exist for them. We covered that in how JavaScript links hide MENA sites from ChatGPT and Claude.

Which internal links count, and which only look like they do?

Every crawlable link counts for discovery. To judge importance, split links by position, because a template link repeats on every URL while a body link was placed by someone who decided the reader needed it.

That split is our own classification, built from where each link sits in the HTML. Google does not publish how it weighs each position, so use it as a diagnostic lens rather than a ranking formula.

Here is how our 34,655 internal links divided.

Link positionWhat it coversLinks on voctos.comShare
TemplateHeader, footer, breadcrumbs, author box, sitewide calls to action28,76183.0%
AutomaticRelated-post carousel, previous and next, category lists1,8745.4%
ModuleLinks inside designed sections of service pages1,4894.3%
BodyLinks an editor placed in the running text2,5317.3%
Where our 34,655 internal links sitWhere our 34,655 internal links sitEvery internal link on the site, grouped by its position on the page.Template28,761 · 83.0%Body copy2,531 · 7.3%Automatic1,874 · 5.4%Module1,489 · 4.3%Source: VOCTOS crawl of all 263 published voctos.com URLs, fetched logged out, 29 September 2026.

The average page carried 131.8 internal links, and 109.4 of them were template links. When your crawler reports 131 links per page, it is mostly counting the menu.

That total says almost nothing about whether a page is supported by the pages that discuss its topic. You only see that when you look at body and module links on their own.

Count body and module links separately, or the menu will hide every gap you have.

What did the audit find on our own site?

We built the URL list from the WordPress REST API and the XML sitemap: 152 posts, 87 pages, 13 case studies, 8 team profiles and 3 research pages. All 263 returned HTTP 200.

Each URL was fetched logged out and without running JavaScript, and every <a href> was recorded with its anchor text and position. Then we walked outward from the homepage one click at a time.

Last, we checked all 301 distinct internal link targets as a logged-out visitor. Some returned server errors because our own requests were hitting the site too fast, so we rechecked those one at a time and counted only results that held.

The healthy part first. Every one of the 152 posts carried at least 5 body links, with a median of 13, and no blog post was an editorial orphan.

Of the 250 pages reachable from the homepage, 243 sat within two clicks of it, counting the homepage itself. That is 97.2%, and none of the gaps below showed up in totals like it.

Twelve market pages formed an island

Our Gulf market hubs for the UAE, Saudi Arabia and Kuwait could not be reached from the homepage by any link, and neither could the nine service pages under them.

Each hub linked down to its own service pages, and all twelve were listed in the XML sitemap, so Google could still find the URLs. No page on the rest of the site vouched for them.

The UAE hub had no inbound link at all. Not one of the 263 pages pointed to it, including pages in its own cluster, and a support page for WordPress sites was in the same state.

The pages had been built as a batch, published, and picked up by the sitemap automatically. Nobody added them to navigation or mentioned them in a sentence anywhere.

A page can sit in the menu of every URL on your site while no editor ever links to it from a sentence.

Our blog linked to our blog

Our posts linked generously, just rarely to the pages we sell from. Of 2,481 body links inside blog posts, 1,800 pointed at other posts and only 396 pointed at service or market pages, 72.6% against 16.0%.

Where the 2,481 body links in our blog posts pointWhere the 2,481 body links in our blog posts pointLinks placed in the running text of 152 blog posts, by destination.Other blog posts1,800 · 72.6%Service and market pages396 · 16.0%Home, contact, research216 · 8.7%Case studies51 · 2.1%Unpublished posts18 · 0.7%Source: VOCTOS crawl of all 263 published voctos.com URLs, fetched logged out, 29 September 2026.

The pattern was sharpest on pillar guides. Our local SEO guide never linked to the local SEO service, and the technical SEO guide never linked to technical SEO.

The conversion guide skipped the CRO page. The healthcare guide pointed at an unpublished post instead of the healthcare service page.

Six service pages received no body link from any blog post. The two newest, healthcare and SaaS SEO, had one editorial link each, both from the main SEO page, while our guide to Google AI Overviews had 55.

Eighteen links pointed at posts that did not exist yet

Until a post is published, WordPress reports its address as /?p= followed by the post ID, which you can see in the REST API’s link field for any scheduled post.

Copy that address into another article and the link works for anyone logged in, which is why nobody notices. Everyone else, crawlers included, gets a 404.

The audit found 18 body links on 18 posts pointing at seven such IDs. Four belonged to scheduled posts and three to drafts that are not scheduled at all.

Three more links used the final address of a post scheduled for 5 October, so they return a 404 until that morning.

Even after publication, a ?p= link costs a redirect on every click. The links that eventually work are still links you want to replace.

Redirects, dead sections and empty anchors

Forty-nine body and module links pointed at old addresses that now redirect. Twenty-six of them went to our SEO guide and technical SEO guide, which moved under /blog/ after those links were written.

Four service pages linked to a /locations/ section that returns a 404, and one post linked to the address of a draft that was never published.

The sitewide “Submit a request” button pointed at /contacts/, which redirects to /contact/. It sits on 155 pages, so a single template change removes 155 redirect hops.

Another 184 editorial links had no anchor text at all. Almost all of them sat in card blocks where an invisible overlay link covers the card while the visible title sits outside it, so the link itself says nothing.

Why does this happen on almost every WordPress site?

Internal link debt builds up on your site the way it did on ours, because every publishing decision is local. A writer links to what they read last week, and a batch of landing pages goes live without a menu entry.

A plugin then adds related-post links that make every page look connected. Nobody owns the link graph as a whole, so nobody sees it drift.

The CMS makes it worse. WordPress hands out ?p= addresses for unpublished posts, redirects keep old links working, and our carousel adds eight links to every article whether they help or not.

None of it is visible from the front end. The link works when you click it, because you are logged in or a redirect catches you. You only see the pattern when you count links by position and test every target as a stranger would.

My read: the menu hides the problem

Most internal linking advice stops at “add more links” and “avoid orphan pages”. By that standard our site passed, because nothing was orphaned the way crawlers usually report it and every post had plenty of body links.

The real question was never how many. It was whether the pages that pay for the site were linked from the pages that earn its traffic, in a sentence that tells the reader why.

On that question the gaps sat exactly where it matters commercially: new service pages, market pages, and the service page behind each pillar guide.

So I would change the publishing checklist before chasing a link count. Every post should name the service page it supports and link to it from the body, and every service page needs a parent page linking from its copy.

The real question was never how many. It was whether the pages that pay for the site were linked from the pages that earn its traffic, in a sentence that tells the reader why.

How do you run this audit on your own site?

You can reproduce the whole audit with a crawler that records link position, or with a short script. The order matters more than the tool.

  1. Build the URL list from your sitemap and your CMS, not from the crawl, because a crawl that starts at the homepage cannot find an island.
  2. Fetch every URL logged out and without JavaScript, the way a crawler first sees it, and run a rendered pass too if your site depends on scripts.
  3. Record every link with its anchor text and position. Screaming Frog exports link position for every inlink.
  4. Count inbound links per page from body and module positions only, lowest first. Pages with zero or one are your list.
  5. Check every target as a logged-out visitor and flag 404s, redirects, ?p= addresses and links into noindexed pages.
  6. Compare contextual links into your service pages with those into your most-linked blog posts.
  7. Walk outward from the homepage one click at a time to find pages no path reaches.

Search Console’s Links report shows your top internally linked pages, which makes a quick sanity check. It does not show position, so it cannot tell a menu link from an editorial one.

If you would rather have this done, our technical SEO work starts with exactly this map.

How many internal links should a page have?

There is no correct number, and Google says so. Our posts carried a median of 13 body links and ranged from 5 to 69, which tells you far less than coverage does.

What you want to know is whether each page you care about gets links from the pages that discuss its topic. A page with four well-placed links is in better shape than one buried under forty.

Anchor text deserves more care than volume. Google asks for anchors that describe the destination briefly, and it lists keyword stuffing as a spam policy violation.

On our site, 38 of the 46 body links into our SEO audit page used the exact words “SEO audit”. That is descriptive but monotonous, so vary it wherever the sentence allows.

Card layouts need a different fix. When an invisible overlay covers a card, Google falls back to image alt text or a title attribute, so put the title inside the link or label the overlay.

For how links, redirects and crawl paths fit together, our technical SEO guide indexes every related article.

What we changed after the audit

What we foundLinksWhat we changedStatus
?p= links to scheduled posts8Swapped for each post’s final address, which works from its publish date with no redirectDone
Links to drafts that are not scheduled11Pointed at the closest published guide or service page, or removed where the list already carried itDone
Body and module links through redirects38Updated to the final address, or removed where the page already linked thereDone
Pillar guides without their service page4Added a body link from each guide to the matching service pageDone
Market pages with no path from the homepage12 pagesLinked the three hubs from a Gulf article and the Saudi hub from our Arabic SEO and Arabic GEO pagesDone
Links to the missing /locations/ section4Repointed to the Saudi market hub and our markets pageDone
Sitewide button through a redirect155 pagesTheme template changeNext
Card links with no anchor text184Theme template changeNext

The eleven remaining redirect links point at the final addresses of two posts scheduled for October, so we left them in place. The scheduled-post links still return a 404 until each post goes live, which we accepted over deleting them and relying on someone to add them back.

Questions we get about internal linking

Our service page is in the main menu. Isn't that enough?

It gets the page crawled. It does not tell anyone why the page matters, because the same link sits on every URL, whereas a link from a guide on the same topic does both jobs.

Our crawler says we have no orphan pages.

Most crawlers start at the homepage and follow links, so they only find what is already connected. Feed the crawl your sitemap and your analytics URL list, then compare, or islands like our market pages will never show up.

Will fixing internal links move our rankings?

Nobody can promise that, and we will not. Fixing broken links, redirects and missing context removes obstacles, but whether positions change depends on what else holds the page back, so measure before and after.

Do internal links matter for AI search?

They decide what an AI crawler can reach. Pages linked only through scripts, or not linked at all, are easy to miss, and once a page is reached the engine still judges the content on its own merits.

The better question to ask

The useful question is not whether you have enough internal links. It is whether every page you sell from is linked, in a sentence, from the pages that already bring you readers.

If you can export your URL list and run a crawler that records link position, the seven steps above give you the same map we built in a day.

If you would rather see your own numbers first, request an SEO audit. We will run the same crawl on your site, including the parts that are uncomfortable to read.

Don't miss the chance to
make your website more visible!

Initial consultation and
audit of the current situation

For free
Submit a request
Previous article
Did you like the article?
Share:

Read also

  • Svg
    Article

    Which Sources Do AI Engines Actually Trust? The Citation Hierarchy

  • Svg
    Article

    Amanleek SEO Case Study: From an Unreadable Angular Site to #1 for “Best Insurance Company” in Egypt

  • Svg
    Article

    AI Search Citations Just Shifted: What It Means for MENA Brands

  • Article

    Dofollow vs Nofollow: We Audited Our Own 274 Outbound Links and Found Eight Leaks

  • Svg
    Article

    Tag Clouds in SEO: What They Are and How to Use Them

  • Svg
    Article

    What Are Duplicate Pages and Why Are They Dangerous

  • Svg
    Article

    Why AI Still Describes Your Old Brand: Knowledge Cutoffs Explained

  • Svg
    Article

    Behavioral Factors in SEO: What They Are and How to Improve Them

Real Results

More Wins
Delta Logo

SEO & GEO for Delta Medical Labs

Svg GEO
SEO & GEO for Delta Medical Labs

1M+ monthly organic visits, 159,200 ranked keywords, 5,570 pages cited by AI engines, and 1,186 #1 rankings in KSA.

VPNLY LOGO

Arabic SEO, GEO & guest posting for VPNly

Svg SEO
Arabic SEO, GEO & guest posting for VPNly

65K peak monthly organic visits, 55 guest posts, and 149 pages cited by AI engines.

Ogaei Logo

SEO & GEO for Ogaei Virtual Care

Svg GEO
SEO & GEO for Ogaei Virtual Care

From 3 to 7,931 monthly organic clicks in 7 months, 2.9M+ impressions, and 40+ keywords in Google’s Top 10.

eduverse logo

SEO for Eduverse

Svg SEO
SEO for Eduverse

12× search traffic in 10 months, 45% of target keywords in the top 5, and 55% in the top 10.

Trusted by

Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg
Svg

Tell us about your project

* Required fields

File size must not exceed 2MB. File extensions: docx, doc, pdf, xlsx, xls