Internal Link Opportunity Audits: Finding the Links You Forgot to Add
Daniel Kim
Senior SEO & Content Systems Analyst
Most sites do not have an internal linking strategy. They have a navigation menu, a few related-post widgets, and whatever links the author remembered to add. The result is a link graph where money pages are orphaned or three clicks deeper than they should be, and where anchor text is dominated by "read more". An internal link audit replaces that with a repeatable process: measure the graph, find the gaps, and add links with intent.
Measure the graph before adding anything
Crawl the site and build two tables: outlinks per URL and inlinks per URL. From those, calculate three signals that predict most internal linking problems.
Depth. The number of clicks from the homepage. Anything important beyond three clicks gets crawled less often and accumulates less internal PageRank.
Inlink count and diversity. A page with 200 inlinks from one template block is not well linked; it is boilerplate. Count unique source pages and unique anchor texts.
Anchor distribution. For each target page, list the anchors pointing to it. If 80% are the exact-match commercial term, the profile looks manipulated; if 80% are "click here", the page is getting no topical signal.
Store all of this in a spreadsheet or a small database with a crawl date, so changes are measurable.
Find the opportunities systematically
Four queries surface most missing links.
Similar pages that do not link. Embed each page's title and first 200 words, compute cosine similarity, and rank pairs above a threshold that have no link between them. This finds the topical clusters that exist in content but not in the link graph.
Keyword mentions without links. Scan body text for a target page's primary keyword and check whether the mention is already linked. Unlinked mentions are the highest-conversion opportunities because the anchor is natural and the context is relevant.
Orphan pages. Pages with zero internal inlinks, found by diffing the sitemap against crawl data. Orphans exist because they were published without being added anywhere; link them from a hub or remove them.
Deep pages with traffic. Pages ranking well but sitting at depth four or five. Promote them into category or hub pages to consolidate authority.
Add links with a rule, not by feel
A workable rule set: two to four new internal links per article, one link to a commercial page and the rest to informational pages in the same cluster. Anchor text should describe the destination, vary naturally, and appear in a sentence that would make sense without the link.
Avoid sitewide footer dumps. They inflate inlink counts without passing meaningful context, and Google discounts template links. Prefer contextual links inside the body, placed where a reader would actually click.
Prioritize by expected impact
Score each opportunity on three axes: similarity to the target, current authority of the source page (inlinks plus organic traffic), and commercial value of the target. Multiply and sort. A link from a high-traffic guide to a money page beats ten links from thin tag archives.
Cap the work per release. Adding 500 links at once makes it impossible to attribute changes and looks unnatural. Ship in batches of 20–50 with a date stamp, and monitor crawl stats and rankings for the affected cluster.
Governance so the graph stays healthy
Internal linking decays as new content ships. Two habits prevent the regression: a publish checklist that requires at least two outbound internal links and two inbound links to the new URL, and a quarterly re-run of the audit with a diff against the previous crawl.
Track orphan count, median depth, and the share of pages with fewer than three inlinks. Those three numbers describe graph health better than any single SEO score, and they are cheap to recompute.
Building the graph, and scoring similarity cheaply
CMS link reports show what editors entered; a crawl shows what renders. Components that inject related posts, navigation, or breadcrumbs create links the CMS never records, and those template links dominate inlink counts. Crawl the rendered HTML, extract anchors with their text, and record whether a link sits in main or in nav/footer.
Store edges as (source, target, anchor, region, follow). That schema supports every later question: which pages link here, with what anchor, from the body or a template, and whether the link passes equity.
Embeddings are the easy route, but a keyword-overlap score on titles plus the first 200 words catches most topical pairs on a focused site. Normalize with stopword removal and TF-IDF, compute cosine similarity, and keep pairs above a threshold.
Run the whole job monthly and store the output with a crawl date. Compare against the previous run: pairs that remain unlinked across three crawls are stable opportunities, while pairs that disappear were probably fixed or the pages merged.
Anchor opportunities need context
An unlinked keyword mention is only useful if the surrounding sentence would still make sense with a link. Extract a window of 15 words around the mention and have an editor approve each insertion. Automated linking of every mention produces sentences with three links to the same page, which reads as spam and dilutes the value of each link.
Prefer mentions in explanatory paragraphs over lists. A link inside an enumeration is easy to add and easy to ignore.
The priority score in practice, and what to leave alone
Multiply similarity by source authority by target value, then divide by edit effort. Authority should be measured from the crawl (inlinks, depth) plus organic sessions, not from domain metrics. Target value comes from the business, not the SEO tool.
Review the top 50, ship 20, and record the date. Six weeks later, compare the target pages' impressions for the cluster. If a batch produced no movement, the bottleneck is content quality, not linking, and adding more links will not fix it.
Do not add links to pages that are already the top result for the target query. Do not link from a page that is itself unindexed; the link passes nothing. Do not build a second navigation in the footer to simulate authority; template links are discounted and make the graph harder to read.
Related Guides & Reviews
Title Rewrites That Survive the SERP: Testing Variants Before You Ship Them
How to generate title variants, test them for truncation and snippet fit, and measure rewrites with Search Console instead of trusting a model's opinion.
SERP Intent Classification With AI: Building a Repeatable Query-to-Page Map
A practical method for classifying search intent from live SERP features and top results, and turning that classification into a page-type decision instead of a guess.
