ai-ops / seo

AI Internal Linking: How to Run a Linking Agent Without Wrecking Your SEO

An AI internal linking agent can crawl your library, find the orphans, and write the anchors. Here is the checklist it runs, the limits a person sets before it runs, and the decisions it has to hand back.

Open Markdown version

Picture a content library with 200 blog posts. Maybe a third of them have internal links pointing in from somewhere on the site. The rest sit there, technically published and practically invisible, because nothing links to them and Google, by its own account, primarily finds pages through links from other pages it already crawled. You know this is a problem, and you also know that hand-reviewing 200 posts to fix it is the kind of task that gets scheduled, rescheduled, and quietly dropped off the bottom of the list.

This is the most awkward kind of work. It is high-value and genuinely dull, the combination humans avoid and machines handle well. The catch is that handing the whole job to a machine is how you end up with link spam that reads like it was written for a crawler. So the useful question is narrower: which half of the job does the agent get, and who sets the limits on that half?

What does an AI internal linking agent actually do?

An AI internal linking agent handles the discovery half of the job. It crawls your content collection, builds a map of what links to what, flags the orphans and the thinly-linked pages, proposes topically related targets for each post, and drafts anchor text that fits the sentence it will sit in. What happens after that is the part worth arguing about.

The two halves fail differently. Scanning 200 posts for missing links is a memory problem, and an agent beats an editor who has read the same library for two years and can no longer see it. Judging whether two posts belong together is editorial, and that is where an unsupervised agent goes wrong.

The discovery half matters because Google’s documentation is blunt: every page you care about should have a link from at least one other page on your site. An orphan page, one with no inbound internal links, fails that outright. The same page says Google uses links “as a signal when determining the relevancy of pages and to find new pages to crawl.” A page nothing points at is found by luck.

JetOctopus, a vendor selling crawl and log analysis, reports one number from its own work on large sites: on a test set of pages, 40 percent were crawled by Googlebot, and a new internal linking scheme took that to 70 percent. No client, sample size, or methodology is named, so it shows a direction and nothing more.

Which half the agent gets is a real decision, and on our own blog it applies its own changes. The judgment lives one level up, where a person decides in advance what the machine may do alone and what it has to hand back. Every AI job in our content operation has that shape, and the wider version is in the shared AI setup behind multi-market content.

An AI internal linking agent should run every candidate through the same checklist a careful editor would, before the link reaches a commit or a queue. None of the six checks below takes more than a second to evaluate, and skipping them is how an automated pass turns into link spam.

Check The question it answers What fails it
Topical relevance Is the target about the same subject as the sentence around it? A keyword string that happens to appear on both pages
Anchor readability Does the sentence still read like prose with the link in it? An exact-match phrase bolted into a sentence that was fine without it
Anchor repetition How often does this phrase already link somewhere on the site? The same phrase pointing at the same target across dozens of posts
Existing coverage Does this page already link to that target? A second link to the same destination two paragraphs down
Cluster direction Should the link run one way, or both ways? Reciprocal links between a pillar and every post that mentions it
Target worth Is this a page we actually want people landing on? A thin tag archive, an old announcement, a near-duplicate post

The first row carries most of the weight. Keyword matching finds a string, and a string is not a subject. Two posts can share the word “migration” and mean different things; two can share almost no vocabulary and belong to one cluster. That judgment is why this goes to something that has read both pages.

Cluster direction quietly saves you. Reciprocal linking between every pair of related posts gives you a page whose closing paragraphs are a link farm of your own content, so the agent proposes a direction with each candidate.

The remaining checks are mechanical, a fit for the same pre-publish tooling that catches broken links and missing alt text, described in content QA pipelines and the boring failures they catch.

Plenty of plugins promise to inject internal links automatically based on keyword matching. We would not run one. It produces over-optimized anchors, the same exact-match phrase linked dozens of times, links between pages that are not actually related, and the general texture of a page built for a crawler.

Google’s posture here is worth reading carefully, because it does not say what SEO folklore says it says. Its guidance on AI-generated content (February 2023) calls its “focus on the quality of content, rather than how content is produced” a useful guide that has served Search for years. Automation is not the trigger. Its spam policies define scaled content abuse as “when many pages are generated for the primary purpose of manipulating search rankings and not helping users,” and name “using generative AI tools or other similar tools to generate many pages without adding value for users” as an example. That policy is about generating pages, and adding links to pages you already published generates none.

So the case against auto-injection stands on quality alone, which is the harder bar anyway. It produces links worse than a person would have placed, on pages whose quality is the thing Google says it is judging. The good version of AI-assisted SEO does not look like SEO, because the output is a set of links a careful editor would have written. (The plumbing underneath is infrastructure and not a ranking trick, which we get into in our practical guide to llms.txt for marketing teams.)

What we do not let the agent do

Our agent commits to our own blog without a per-link sign-off, which means the human judgment has to sit somewhere other than approval. It sits in limits a person set before the run, and in a short list of decisions the agent is required to hand back untouched.

The limits it runs inside:

  1. Scoped commits only. It commits the specific files it changed and never blanket-stages a working tree, so a bad run is a bounded diff somebody can read in a minute.
  2. Every target slug is confirmed to exist on disk before it gets linked. An agent that invents a plausible-looking URL creates a 404 with its own hand.
  3. A passing build gates the push. Nothing leaves the machine until the site compiles with the new links in it.
  4. Pending drafts stay untouched. Work in progress belongs to whoever is writing it.
  5. An independent verification pass after the push confirms only the intended files moved. An agent checking its own work is a different thing from the work being checked.

The decisions it hands back:

  • Anything structural. A new pillar, a moved URL, a change to how the library is organized.
  • Anything touching positioning or pricing. We make those calls, and they do not auto-release.
  • Any merge decision between two posts competing for the same query. Choosing which of two pages should win is strategy wearing an internal-linking costume.

Be careful about generalizing, because the risk profile is ours. That is what we accept on our own property, where a bad link costs us and nobody else. On a client’s site we do not hand the agent the commit: proposals go to a queue and a named person applies them, because whoever carries the brand risk should be the one who signed off. The principle underneath both is the one we apply to any agent with write access: it may do hard things, it may not do unrecoverable ones. The longer version is in what we do not let an AI agent do in a client’s CMS.

How we run this on our own blog

A standing weekly pass audits both our blogs for orphans, under-linked posts, broken links, and canonical-pillar hygiene. As of July 2026 this blog is 45 posts, and the editorial links, the ones written by hand into the body copy, average 4.69 per post with a median of 3 and a spread from 1 to 13.

That label matters. Every post here also carries an automated related-posts block, and the blog index lists all 45, so a crawler sees roughly three times that figure and no post on this site can be an orphan whether or not the weekly pass ever runs. Orphan count is not a scoreboard here. The distribution of links a person chose to write is.

Laid over older work, those numbers get more interesting. In May 2026 we audited the blog for writing quality: 35 posts then, each scored commodity or original. Eighteen came back non-commodity, sixteen mixed, one flat commodity. Measuring the editorial link graph against those scores gives this:

Audit band (May 2026) Posts Mean editorial links Median Range
Non-commodity (71 to 100) 18 6.06 6.5 2 to 10
Mixed (41 to 70) 16 3.88 3 1 to 13
Commodity (0 to 40) 1 2.00 2 2 to 2

The posts we thought hardest about carry roughly 56 percent more editorial links than the ones in the mixed middle, and the medians make it plainer: 6.5 against 3. The template does not disturb the comparison, because these columns count body copy only and exclude it from both bands. Two caveats. The mixed band’s range runs to 13 because of the most-linked post in the library, which about a quarter of the others reference; dropping it takes that mean to 3.27, so the headline understates the gap. The commodity row is one post and proves nothing alone.

The reason is not mysterious. The posts that took the most original thought are the ones we naturally linked to and from while writing them. The thin ones never came to mind.

Here is a live gap from that graph, still open in July 2026. Our post on translation workflows that don’t break your CMS links to both structured content vs structured data and why most multilingual setups fail, and the multilingual post links back. The structured-content post links to neither. Three posts that belong together, three of six possible connections present. That is what the weekly pass exists to surface.

We are not going to quote you a traffic lift, because we never measured one. What we can show is the editorial link distribution, and a measurable gap between the posts we think hardest about and the ones we do not.

Where does this leave you?

You can do the first useful pass this week without buying anything. Crawl your own site, list every page with no inbound internal links, and fix the ten that matter most commercially. That tells you how big the problem really is and how long the manual version takes. Decide whether to systematize once you have that number.

  1. Crawl your site and export every URL with zero inbound internal links. Most crawlers do this on a free tier for a few hundred pages.
  2. Sort it by how much you care about each page. Commercial pages and posts you already put real work into go to the top.
  3. Fix the top ten by hand. For each, find the two or three posts where a link genuinely helps a reader, and write the anchor into the sentence so it reads.
  4. Time yourself, then multiply by the rest of the list. That number is your answer on whether to systematize.

If it says yes, the design question is the one this piece has been circling: what is the agent allowed to do alone, and what must it bring back. Building and running that loop is what our agentic marketing automation service covers, and handing over the whole content operation, audit and editorial review included, sits inside the fractional marketing engineer engagement. The work is dull and it compounds, which is the best argument for putting a system on the dull part and a person on the judgment.

If your website has become a bottleneck, let’s talk.

Start with an Audit Or email me directly