// blog / wordpress setup

How I run an internal link audit on WordPress

An internal link audit maps every link between your own pages, then shows which pages collect too many, which get too few and which get none at all. I run mine from a Screaming Frog crawl plus Search Console data, and I read the whole map before I change a single link.

By Muhammad Younus Published 7 min read WordPress setup

WordPress SEO setup: illustration for "Running an internal link audit"
// 01 - the point

What is an internal link audit, and why bother?

An internal link audit is a count of every link between your own pages, read against what you want those pages to do. Internal links are how Google discovers your URLs and one of the strongest hints it gets about which pages you consider important, so the audit is the measuring half of any internal linking service: it tells you where the site's own authority is going before anyone decides where it should go.

The reason it's worth doing on WordPress specifically is that WordPress creates links for you. Menus, footers, tag archives, category widgets, related post plugins and date archives all mint links nobody planned. On most sites I audit, the most linked URLs aren't the pages that earn money; they're the blog index, a tag archive and the privacy policy. The audit makes that visible, and visible is fixable.

I run one on any site I've just taken on, after a redesign or migration, and whenever a page that should rank sits stuck while weaker pages on the same site do fine. It's diagnosis, not decoration: nothing in this post changes a single link until the counting's done.

// 02 - step one

How I set up the crawl and the exports

Three sources, because each one sees links the others miss. The crawler sees what's in the HTML today, Search Console sees what Google has kept, and the sitemap names the pages you meant to have.

  1. Step 01

    Crawl the site with rendering on

    I run Screaming Frog with JavaScript rendering enabled, the same way I set it up in my Screaming Frog crawl walkthrough. Builder sites and mega menus print links with JavaScript, and a plain HTML crawl undercounts them.

  2. Step 02

    Export the inlinks data

    The crawler's link report gives me, per URL: how many unique pages link to it, from where, and with what anchor text. That's the raw material for everything that follows.

  3. Step 03

    Pull Search Console's Links report

    Under Links, the internal links table shows Google's own count of links per target URL. When Google's count and my crawl disagree badly, something's blocking or hiding links, and I want to know what before I judge anything.

  4. Step 04

    Compare against the sitemap

    Every URL in the XML sitemap that never appeared in the crawl is an orphan candidate: a page you've published that nothing links to. Crawlers can only find orphans by comparing lists, which is why this step can't be skipped.

  5. Step 05

    Freeze the numbers

    Everything goes into one sheet dated today. The audit's value doubles the second time you run it, because then every number has a direction.

// 03 - the numbers

Which numbers do I pull for every page?

Five columns decide nearly everything. None of them needs a paid tool beyond the crawler.

  1. i.

    Unique inlinks

    How many different pages link here. A page in the menu gets hundreds of sitewide links, so I care most about links from inside content, where an editor chose to place them.

  2. ii.

    Crawl depth

    How many clicks from the homepage. Google's documentation treats links as its primary way of finding pages, and in practice pages four or five clicks deep get crawled less and rank worse. Money pages belong within two clicks.

  3. iii.

    Anchor texts

    The words carrying each link. Google reads anchors as context about the target, so ten links that all say 'click here' waste ten hints. I list every anchor per target, not just the count.

  4. iv.

    Orphan flag

    In the sitemap but not in the crawl means no internal path leads there. Orphans still get indexed sometimes, but they rank on scraps, and visitors can't find them at all.

  5. v.

    Broken and redirected links

    Internal links that hit 404s throw authority away; links into 301 chains leak it slowly. Both come free in the same crawl, so they go in the same sheet.

Rather have me do this? One person, whole job.

Book a call on Upwork
// 04 - reading it

How I read the results before changing anything

First I sort by unique inlinks and read the top twenty. If tag archives and the blog index outrank your service pages in that list, you've found the site's real priority order, and it isn't yours. Then I sort the pages that earn enquiries by crawl depth and see how many sit three or more clicks out.

Then the anchors. Two problems show up over and over. The first is one target with twenty different anchors, none of them saying what the page is about. The second is one anchor phrase pointing at two different pages, which invites Google to swap them in results. When the Performance report shows two URLs trading places for one query, that's a job for my keyword cannibalization service, and you can see whether it's happening with the free cannibalization checker before deciding anything. Split anchors are one common reason a page collects impressions without clicks.

Last, I mark what I call false riches: pages with big inlink counts where every link comes from a menu or footer. Sitewide links aren't worthless, but a page nobody links from inside an article is a page no editor thought was worth citing, and Google can tell the difference in placement too.

// 05 - the fixes

How I fix what the audit finds

The fixes are boring on purpose, one finding at a time, biggest pages first.

  1. Step 01

    Link every orphan or retire it

    Each orphan gets two or three links from relevant, already ranking pages, or it gets merged and redirected if it shouldn't exist. No page stays published and unreachable.

  2. Step 02

    Cut depth on the pages that earn

    A link from the homepage or a hub page pulls a deep page up instantly. I'd rather add three links from strong pages than thirty from weak ones.

  3. Step 03

    Rewrite the worst anchors

    Descriptive, not stuffed: the anchor should say what the target page is about in words a reader would use. I vary phrasing across sources and keep exact-match anchors to a minority share.

  4. Step 04

    Fix broken links and flatten chains

    404 targets get corrected or removed; links into redirects get pointed at the final URL. Tedious, measurable, worth it.

  5. Step 05

    Prune the automatic links

    Tag archives nothing needs, footer link lists to every page, related post widgets pointing at 2019: the audit usually ends with fewer links than it started with, aimed better.

// 06 - the record

What goes in my internal link audit template?

People ask for the template more than the method, so here it is: one row per URL, eight columns, and it fits in any spreadsheet.

  1. i.

    URL, role and target query

    What the page is for and the search it should own. A page with no answer in this column is already a finding.

  2. ii.

    Unique inlinks, content inlinks and depth

    The counts from the crawl, with sitewide links separated from in-content links so false riches can't hide.

  3. iii.

    Anchors in use

    Every distinct anchor pointing at the URL, so duplicates across targets and vague phrasing jump out.

  4. iv.

    Status, verdict and date

    Orphan, buried, fine, or overlinked, plus what I did about it and when, so the next audit reads as a comparison instead of a fresh start.

Is this your site? Send me the URL.

Book a call on Upwork
// questions - wordpress setup

What else do people ask about this?

What is an example of an internal link?

Any link from one page on your domain to another page on the same domain. A sentence in a blog post linking to your service page is an internal link; so is a menu item. A link to a different website is an external link, and it plays by different rules.

What are the two main types of internal links?

Navigational and contextual. Navigational links live in menus, footers and sidebars and repeat sitewide. Contextual links sit inside the content itself, chosen for that page, and they're the ones that carry the most meaning about the target.

How many internal links should a page have?

There's no magic number, and I don't chase one. Google's guidance is simply to link where it helps the reader. What hurts is imbalance: hundreds of links to archives while the pages that earn money get two.

How do I track internal links over time?

Rerun the same crawl monthly or after publishing batches of content, and keep the exports. Search Console's Links report gives a second opinion on the biggest targets. Comparing two dated sheets takes minutes and shows whether the changes stuck.

// sources - checked

Where do these rules come from?

Platform and Google documentation, opened and read on the day this was written. Everything else is how I work.

  1. Google Search Central: SEO link best practices
  2. Screaming Frog: Internal linking audit with the SEO Spider
  3. Google Search Console help: Links report
Muhammad Younus, WordPress technical SEO consultant
// who wrote this

One consultant, writing down his own method

I'm Muhammad Younus, a WordPress technical SEO consultant with 8+ years of experience and 100+ client sites fixed. Top Rated Plus on Upwork with a 100% Job Success Score. Every post here is the way I actually do the job, written in the first person because it's one person doing it, remotely, with no team behind the name.

Nothing in these posts is a client I can't name or a number I can't show. Where a figure comes from a client's Search Console, it's from a published case study, and where a rule comes from Google or a platform, the source is linked at the bottom of the post.

// the service behind this post
Muhammad Younus, WordPress technical SEO consultant, smiling warmly at the camera
// next step

Want this done on your own site?

Book a call on Upwork, send the URL and read-only Search Console access, and you'll get a written scope for the search side before any work starts. One person does the whole job, remotely.

Book a call on Upwork