Most internal link audit guides assume you're on WordPress (install a plugin) or that you'll happily learn Screaming Frog (it's great, but the UI looks like it was designed in 2008 and the desktop install is a 10-minute setup). If you're on Webflow, Next.js, a headless CMS, or anything else, neither path is great. This guide walks through a 30-minute internal link audit on any website using only your browser, a spreadsheet, and a free crawler you can run from the command line.
By the end you'll have a prioritized list of: orphan pages (pages with zero internal links pointing at them), pages with too few inbound internal links given their importance, pages with too many outbound internal links (link equity dilution), and broken internal links. That's 90% of what a paid audit gives you.
Why bother auditing internal links
Internal links do three jobs Google cares about: they help crawlers find pages, they distribute link equity (PageRank) across your site, and they tell Google how pages relate to each other through anchor text. When internal linking is broken, the symptoms are familiar: new pages take weeks to get indexed, your best content stays stuck on page 2, and you can't figure out why.
An audit catches all three failure modes in one pass. On a typical small business site, fixing internal linking issues moves rankings within 4 to 8 weeks without writing any new content. That's the highest leverage SEO work most teams aren't doing.
What an internal link audit should actually find
Tooling differs, but a useful audit gives you four artifacts. If you're running an audit and not getting these, the audit is cosmetic.
- Orphan pages.Pages on the site that are not linked to from any other page. Google can still discover them via sitemap, but they'll rarely rank well and rarely get recrawled. Common offenders: paginated archives, old landing pages, programmatic SEO pages.
- Inbound link counts per URL.How many other pages link to each URL. The pages you most want to rank should have the most inbound links. A surprising number of sites have this inverted: their pillar pages have 3 inbound links and a random “About” subpage has 47.
- Outbound link counts per URL.How many internal links each page is sending out. There's no magic number, but 100+ outbound internal links on a single page is usually a navigation bloat problem; that page is leaking link equity everywhere instead of concentrating it where it matters.
- Broken internal links. 404s within your own site, redirect chains, and pages that have moved without their inbound links updated. Easy to find, easy to fix, surprisingly common.
Step 1: Crawl your site (without Screaming Frog)
You need a list of every internal link on every page. Screaming Frog does this well; so does Sitebulb. If you'd rather not install either, here are three lightweight options that work on any stack:
- Your sitemap.xml plus a simple Node script. Most modern sites generate a sitemap automatically. Fetch the sitemap, get the URL list, then fetch each URL and parse the links. About 40 lines of code with
cheerioor any HTML parser. - A free hosted crawler. Sites like Sitechecker, Seobility, and SE Ranking offer limited free crawls (typically 100 to 500 URLs). Good for a one-shot audit on smaller sites.
- Google Search Console's Pages report. Not a full crawl, but it tells you which pages Google has indexed and how it found each one. For sites under ~200 pages this is often enough.
Whichever option you pick, the output should be a CSV with two columns at minimum: source URL (where the link is) and target URL(where it points). That's the raw material for everything below.
Step 2: Find orphan pages
From your crawl CSV, run a join: every URL on your site that does NOT appear in the target URL column is an orphan. In Excel or Google Sheets:
- Get your full URL list (from sitemap.xml or your crawler).
- Get the unique values from the target URL column of your crawl.
- The set difference (URLs in your list but not in target column) is your orphan list.
For most sites, 5 to 15% of pages are orphans. The fix is rarely “link to them from everywhere”; it's deciding whether each orphan should be linked, redirected to a similar page, or noindexed because it doesn't deserve to rank.
Step 3: Count inbound links per page
Group your crawl CSV by target URL, count rows. That gives you inbound internal link counts per page. Sort descending. Now compare against your priority pages (your homepage, top blog posts, product pages, pillar content).
A healthy distribution looks roughly like: homepage has the most inbound links, pillar pages have 20 to 80, important blog posts have 5 to 20, and tag/archive pages cluster at the bottom. If your distribution is flat (every page has roughly the same count) or inverted (low-priority pages have more links than high-priority ones), you have an internal linking architecture problem.
The most common fix is adding 3 to 5 contextual links from related blog posts to your priority pages. Not a navigation link in the footer (Google heavily discounts boilerplate footer links). A real sentence in the body of an article that links to the target page.
Step 4: Find pages with too many outbound links
Group by source URL, count rows. Pages with 100+ internal outbound links are usually one of three things:
- Archive/tag/category pages.Fine, but most don't need to rank organically. Consider noindexing them or pruning the link count.
- Mega-menu navigation.If your navbar lists 80 links, every page on your site has 80 outbound internal links just from the nav. That's link equity scattered across every page. Worth simplifying.
- Programmatic SEO pages with related-content blocks listing 30+ links. Pick the most relevant 5 to 10 instead.
Step 5: Find broken internal links
Take your target URL column. Fetch each unique URL and check the HTTP status. Anything returning 404 is a broken internal link. Anything returning 301 or 302 is a redirect chain (not necessarily broken, but a redirect chain costs a small amount of link equity and slows crawlers; worth fixing).
For redirect chains, the cleanest fix is to update the source link to point directly at the final destination instead of the intermediate URL. For 404s, either restore the page, redirect it to the closest still-existing page, or remove the broken link.
Step 6: Prioritize what to fix first
A typical audit on a 500-page site surfaces 50 to 200 issues. You don't need to fix all of them. Prioritize in this order:
- Broken internal links on high-traffic pages. Quick fix, immediate impact.
- Orphan pages that should rank.Add 3 to 5 contextual links from related content. If they shouldn't rank, noindex or redirect them.
- Priority pages with too few inbound links. The highest-leverage SEO change most sites can make in an hour.
- Outbound link bloat on important pages. Trim navigation and related-content blocks on the pages you actually want to rank.
- Everything else. Archive/tag pages, low-traffic 404s, minor redirect chains. Address if you have time.
How often should you audit?
For most sites: full audit every 6 months, broken-link check monthly. The exception is sites publishing 10+ pages per week. Internal linking issues accumulate fast at that rate; bump to quarterly full audits and weekly broken-link checks.
The other trigger for an off-cycle audit is a site migration. Any time you move CMSes, change URL structures, or merge two sites, assume you have new orphans and broken internal links. Audit within two weeks of the migration completing.
Run all six steps with one click
Doing this manually for a 500-page site is a half-day job, mostly cleaning up CSVs. The fix work itself is fast. InterlinkTool does all six steps automatically: crawls your site (any stack, no install), surfaces orphans, ranks inbound and outbound link distributions, finds broken links and redirect chains, and prioritizes the fix list by SEO impact. Free to try, no credit card required, no WordPress plugin to install.
Frequently asked questions
How long does an internal link audit take?
Manually, 2 to 6 hours for a site under 500 pages, mostly spent cleaning crawl CSVs. With dedicated tooling, the analysis runs in minutes. Implementation of the fixes typically takes 1 to 3 hours depending on your CMS.
Do I need Screaming Frog to audit internal links?
No. Screaming Frog is excellent for crawling, but a small Node script, a free hosted crawler, or Search Console's Pages report can give you the same raw data for most sites. The audit is more about the analysis than the crawler.
What's an orphan page in SEO?
An orphan page is a page on your site that has zero internal links pointing at it from anywhere else on the site. Google can still find orphan pages via your sitemap, but it generally treats them as less important, recrawls them less often, and ranks them lower for relevant queries.
How many internal links per page is too many?
There's no hard cap; Google's John Mueller has explicitly said there is no fixed limit. Practically though, pages with more than 100 internal outbound links usually have a navigation or related-content bloat problem. The link equity passed by each outbound link is divided across all of them, so fewer focused links is better than many scattered ones.
How often does Google recrawl internal links?
High-traffic pages get recrawled within hours to days. Most pages on a typical site get recrawled every 1 to 4 weeks. After an internal linking change, expect 4 to 8 weeks before the full ranking impact is visible.