AI internal linking: a PR-review workflow that scales
AI internal linking breaks first when publishing speeds up. How to add a link-suggestion step, review additions like a PR diff, and audit link equity.
AI internal linking breaks first when publishing speeds up. How to add a link-suggestion step, review additions like a PR diff, and audit link equity.

Internal linking is the first thing to break when you publish faster. A human writer half-remembers what they wrote last quarter and drops in a link out of habit. An AI writer has no such habit. It sees the draft in front of it and nothing else, so AI internal linking either doesn't happen at all or happens badly: generic anchors, no anchor diversity, links to whatever the model half-recalls from its own training data instead of what's actually on your site.
The fix isn't a smarter prompt. It's building link suggestion into your content pipeline as a diffable, reviewable step, the same way you already gate code changes, and then auditing the resulting link graph on a schedule instead of assuming it stays healthy on its own.
Every other SEO task degrades gracefully when you scale AI writing. A weak headline still ranks for something. A thin section still gets indexed. Internal linking doesn't degrade, it goes to zero, because a model drafting a post in isolation has no reason to produce a link unless something forces it to look outward.
Ask an LLM to write a blog post and you get a self-contained document. It does not know what else lives in content/blog/, what clusters you've built, or which posts are currently orphaned and need an inbound link more than others. Unless you explicitly feed it that context, every draft starts from zero internal links and stays there unless a human adds them by hand afterward, which is exactly the manual bottleneck we covered in internal linking automation: holding your entire back catalog in your head gets impossible past a few dozen posts, and an AI writer has even less of that context than a human does by default.
This is the same blind spot that makes raw output from a tool like ChatGPT unpublishable on its own: a single prompt gives you fluent prose with no awareness of what you've already written, so it can't link to it, can't avoid duplicating it, and can't tell you which of your existing posts the new one should reinforce.
The intuition says more posts means more link opportunities, and that's true in theory. In practice, more posts published faster means more posts that never get a first inbound link, because nobody goes back to update older posts once the new one ships. Google is explicit that every page you care about should have a link from at least one other page on your site, both as a relevancy signal and as how crawlers find the page at all. A blog publishing five posts a week without a linking step is manufacturing orphan pages five times a week, not once in a while.
The scale of this problem tracks the scale of AI adoption in content generally. An April 2025 Ahrefs analysis of 900,000 newly created English-language webpages found 74.2% contained at least some AI-generated content, split between 2.5% pure AI and 71.7% a human and AI mix, and a companion survey of 879 marketers found 87% already use AI to create or assist with content. Most of the web is now publishing at a speed that has no equivalent human habit of "go back and link the old stuff."
Yes, but only when the suggestion step is grounded in your actual post graph and constrained by explicit rules, not left to a model's judgment about what feels relevant. Three checks decide whether an AI-suggested link is safe to ship: topical relevance, anchor diversity, and a hard cap on link volume.
The cheap version of link suggestion scans for shared words and links anything that mentions a similar term. That's keyword matching, and it produces exactly the kind of irrelevant links a reviewer has to catch by hand. The right version does semantic matching: does this post genuinely belong in the same cluster or answer a related buyer question, the methodology we cover in semantic SEO automation.
The gap between the two approaches is bigger than most teams assume. A LinkStorm study of 2.5 million contextual internal links across 1,700 websites found only 8% of anchors were strongly topically aligned with their target page (a similarity score above 0.7), while 28% showed no meaningful similarity at all. That's not a niche failure mode, it's the majority pattern: most internal linking in the wild, AI-assisted or not, is closer to keyword adjacency than genuine topical relevance. An AI suggestion step that isn't explicitly built to clear that 0.7 bar will reproduce the same 28% problem at whatever speed you're now publishing.
Which cluster a post belongs to is the input a relevance check should actually read from, since topic cluster strategy is what defines "genuinely related" in the first place. A suggester that only sees flat text similarity, with no concept of your cluster taxonomy, will happily link two posts that share vocabulary but serve unrelated buyer questions.
A single new post rarely creates an anchor concentration problem on its own. The concentration builds up across dozens of posts each contributing one more link to the same popular target, all using a similar phrase because that phrase is the obvious one. Google recommends anchor text be descriptive, reasonably concise, and relevant, and explicitly warns against generic anchors like "click here" and against keyword-stuffed anchors, which its spam policies treat as link spam.
The same LinkStorm dataset found 81% of anchors were keyword-rich and 61% contained just one to three words, the pattern that produces concentration at scale even when no single post is the offender. Checking anchor diversity means checking the target page's existing inbound anchors, not just the anchor the new draft wants to use, which is why the link-suggestion step needs access to the whole graph and not just the new post's text.
One link per target page per new post is the practical rule. If a draft mentions a topic five times, the strongest mention gets the link, not all five. This matters more, not less, once suggestions are automated, because a model with no cap will happily link the same target from every paragraph that mentions it, and John Mueller has warned about exactly that outcome: "if you do dilute the value of your site structure by having so many internal links that we don't see a structure anymore, then that does make it harder for us to understand what you think is important on your website."
A link-suggestion step is a pipeline stage that runs after the draft is written and before it's proposed for merge. It reads two things the draft alone can't provide, your existing post graph and your anchor history, and it outputs something a human can review in seconds rather than something that just appears already inserted.
The single change that fixes most bad AI internal linking is giving the model the list of existing posts, their clusters, their tags, and their current inbound anchors before it drafts a single suggestion. Without that context, a model can only guess. With it, the task changes from "invent plausible-sounding links" to "match this new post against a known, bounded set of candidates," which is a much narrower and more checkable job.
This is the same principle behind why autonomous AI SEO agents that stop at a pull request are structurally different from ones that auto-publish: seeing the whole repo, not just the current task, is what lets an agent link a new post into the existing graph and add inbound links from related posts in the same pass, instead of shipping something that has to be manually cross-referenced afterward.
The output of the suggestion step should be a small, structured list, not links silently inserted into prose. Each row needs three fields: the target URL, the exact anchor text, and the sentence the link would sit in. That shape is what turns a link suggestion from a black box into something reviewable:
target: /blog/topic-cluster-strategy-2026/
anchor: "topic cluster strategy"
sentence: "Which cluster a post belongs to is the input a
relevance check should read from, since topic
cluster strategy is what defines 'genuinely
related' in the first place."A reviewer scanning five of these can approve four and reject the fifth in under a minute. A reviewer scanning a 2,000-word post looking for which sentences quietly got a link inserted cannot do that at all.
Treat link suggestions the way you treat any other code change: as a diff that has to be read before it merges, not a feature you trust and ship. This is the same control-model question that decides whether an AI SEO agent is safe to connect to your CMS at all: does a human decision happen before the change goes live, or does the tool publish first and hope nobody notices a bad link.
When a link-suggestion step is wired into a Git-based blog, its output shows up as part of the same pull request that adds the new post: the new markdown file, plus a small set of line-level edits to older posts adding an inbound link each. A reviewer opens the PR and sees exactly what changed, in the same view they'd use to review any other content edit, target, anchor, and surrounding sentence all visible in the diff itself.
That's a meaningfully different experience from a dashboard that applies link changes directly to a live page, or a spreadsheet-style review where each suggestion sits in its own cell disconnected from the sentence around it. A rendered diff in a pull request is the format editors already know how to review quickly, which is the whole point of putting the step there instead of somewhere else in the pipeline.
Three failure modes show up reliably in an AI-suggested link diff, and all three are easy to catch if the reviewer knows to look:
None of these three require deep editorial judgment to catch, which is exactly why they belong in a review step instead of being left to trust. A reviewer checking a rendered diff against these three patterns takes a fraction of the time a full manual internal-linking pass would, while still keeping a human decision in the loop before anything ships.
Reviewing each PR's link additions catches problems at the point of insertion. It does not catch problems that accumulate slowly across dozens of individually-fine PRs, an anchor phrase that was reasonable the first three times and manipulative by the twentieth, or a post that never received an inbound link because nothing after it happened to mention its topic. That's what a periodic link-graph audit is for, and it's the same discipline you'd apply to any other system you've put on autopilot: check the aggregate output, not just each individual step.
An orphan-page audit is a straightforward query against your own content: for every published post, does at least one other post link to it? Anything with zero inbound links is an orphan, full stop, and Google's own guidance is that every page you care about should have a link from at least one other page on your site. On a blog publishing at AI-assisted speed, this check has to run against the whole archive, not just the newest posts, because the review step described above only catches problems in the PR it runs on; it says nothing about posts published six months ago that never picked up a link from anything written since.
Anchor concentration is the second half of the same audit: for each of your highest-value target pages, pull every inbound anchor across the whole site and check the distribution. If one exact-match phrase accounts for most of the links to your pricing page, that's the pattern Google's spam guidance calls out, even if every individual link was added in good faith by a different PR months apart. Rotating anchor language deliberately, exact-match sometimes, descriptive often, branded occasionally, is what keeps that distribution from drifting toward concentration as more posts accumulate.
Tie the link-graph audit to the same cadence you already use for content refresh, since both are periodic passes over the existing archive rather than one-time fixes. Content refresh strategy recommends a quarterly cycle for an active blog's top pages, and a link audit fits the same rhythm: run it every quarter, and again after any batch of posts that shipped during a period when the review step was skipped or under-resourced. The audit doesn't need to be exhaustive every time. It needs to happen often enough that an orphan page or a concentrated anchor gets caught within a few months of appearing, not a few years.
The volume math is the reason this can't just be an annual chore. A blog adding dozens of AI-assisted posts a quarter changes its link graph faster than a blog adding a handful a year, so the audit interval has to scale down as publishing speed scales up, the same relationship that makes the PR-review step non-optional in the first place.
AI internal linking only works when link suggestions are grounded in your real post graph, reviewed as a diff before they merge, and audited on a schedule as the archive grows. Lyra builds that into the pipeline itself: she sees your whole blog, suggests links with diversified anchors, and opens every addition as a pull request you approve before it ships.
FAQ
Only if it is grounded in your actual post graph, not just the new draft. A model with no visibility into your back catalog will suggest generic or keyword-matched links, or none at all. Feed it the existing posts, clusters, and anchor history, and treat every suggestion as a proposal to review, not an action to auto-apply.
The same way you review a code change: as a diff. Each suggested link should show the target post, the exact anchor text, and the sentence it sits in, so a reviewer can approve, edit, or reject it in seconds without re-reading the whole draft.
It is what happens when a page accumulates too many links using the same exact-match anchor. Google's own spam policies name aggressive, optimized anchor text as a link spam signal, so a target page that always gets linked with the identical phrase reads as manipulation rather than editorial linking, even if every individual link is genuine.
Run a link-graph audit every time you'd otherwise refresh content, roughly quarterly for an active blog, and after any batch of posts that came from a period without review discipline. Check for orphan pages, anchor concentration on your top conversion targets, and links pointing at slugs that no longer exist.
Built by the tool you're reading about
Lyra finds the topics worth ranking for, writes them in your repo's voice, fact-checks every claim, and opens a pull request scored and ready to merge. You review and hit merge. Want to see what she'd write for you? Start free with three posts, no card.
Keep reading

Real programmatic SEO examples show where AI genuinely helps and where it creates thin-content risk, plus the PR review gate that keeps scaled pages safe.

Content pruning for AI-era SEO means deleting or merging thin posts, not refreshing them. A decision framework, an audit, and what Google's 2026 update changed.

Integration page SEO: why 'connect X to Y' pages convert high-intent buyers, and the template that scales from 50 to 500 pages without thin-content penalties.