Internal linking in AI content is what the tool gets most wrong

Tom McSherry
21 July 2026 · 8 min read
The short version: a tool writing page 40 of your website has no idea pages 1 to 39 exist. Not a vague idea, no idea. It cannot link to them, it cannot avoid duplicating them, and it cannot tell which of them is the main page on the topic it is writing about. Every internal linking failure in an AI buildout comes out of that one blind spot.
Which means the fix is not a better prompt for each page. It is giving the model the map of your site as context every time it writes, so each new page is produced knowing where it sits. That is the whole argument here, and the rest of this post is what the map contains, how to feed it in, and what changes in the output when you do.
This is for you if you own the business and have been using ChatGPT to write pages for your own site. Not for an agency. The wider version is in using AI for your website content without wrecking it, where linking is one of four structural gaps. This is that gap in detail, because it gets checked least.
What an internal link actually does
An internal link goes from one page of your site to another, and the anchor text is the words you can click. The first job it does is tell Google which of your pages is the important one for a subject. If eleven pages link to one page using the words 'emergency electrician', you have voted eleven times for that page to own that phrase. Google does not have to agree, and it decides which of your pages ranks whatever you do, but this is one of the few places you get a direct say.
The second job is telling Google what a page is about. A page reachable only from your navigation, under the word 'Services', is described to Google by that one word. A page linked from three related pages using phrases that describe what it covers has a much clearer identity.
Internal linking is one of the very few ranking signals you completely control. Which makes it a strange thing to hand to something that cannot see your website.
The blind spot: every page is written as if it were your first
When you ask a model to write a page, it writes that page. It is not looking at your site. It does not know your URLs, which of your pages is strongest, or that you decided last month one particular page should own 'physio Ballarat'. Each generation happens in isolation, with no memory of the last.
So when a page needs an internal link, the model has to guess. Nothing else is available to it. Every failure below is a version of that guess.
What the blind spot looks like on the page
It links to nothing, so the page is an orphan
The most common outcome and the most invisible. The page reads well, you paste it in, you publish, and it contains no links to anything else on your site beyond whatever your template puts in the menu and the footer.
That page is an orphan. Google can find it, but nothing on your site says what it is for or that it matters. Do it twenty times and you have twenty pages that all look equally unimportant, which is a problem, because they are not equally important to you. It is a good part of why publishing more pages so often changes nothing, the argument in more pages usually means worse rankings.
It links to everything, so nothing is a priority
You get this the moment you tell the model to add internal links without saying which ones. Give it your URL list and ask it to link generously and it will. Fourteen links in a nine hundred word page, most to whatever seemed vaguely related, several repeating one destination with three different phrases.
The problem is not that Google punishes you. It is that you have stopped saying anything. A page pointing at everything has expressed no priority, so the vote spreads thin enough to stop working as a signal.
It invents links to pages that do not exist
This is the one that surprises people. The model will confidently link to yoursite.co.nz/services/emergency-callouts, because a business like yours would obviously have that page. You do not. It has never existed.
Invented URLs are the plausible ones, which is why they slip through. They follow your naming pattern and describe a service you really offer, so nobody clicks them during the copy check. Then a customer follows one, hits a dead end, and quietly decides your website is neglected.
Why anchor text chosen by a tool is a red flag
Anchor text is not decoration. It is a description of the destination, written by you, that Google reads as an instruction. The words inside a link are a decision about what a page should rank for, which is a strategic call rather than a writing one.
A model does not treat it that way, because it cannot. Blind to the rest of the site, it picks the phrase that flows best in the sentence in front of it. Sometimes that is 'click here', which describes nothing. Sometimes it repeats one identical keyword across forty pages, which is about the only way an owner builds a manipulation pattern by accident.
It is also why I do not trust the tools that offer to handle linking across your whole site automatically, on a schedule. I have made that case at length in why giving up control of your anchor text and internal links is a red flag. They automate a judgement that belongs to whoever knows which pages earn money, at a volume nobody is reviewing. I would be happy to be proven wrong. I have not been yet.
The fix: give the AI the map of your site
Everything above is the same problem wearing different clothes, so there is really only one fix. Stop asking the model to write a page. Ask it to write a page into a site it can see.
That means keeping one document, in a spreadsheet or a plain text file, that describes every page you have. Four columns is enough:
- The full URL, exactly as it is live.
- The one search term that page is meant to own.
- Hub or spoke - is this a main money page, or a supporting page underneath one?
- If it is a spoke, which hub it belongs to.
That is the document I ask for in plan the site first, generate second, with two columns added. If you already keep a keyword map you are most of the way there, and if you have twenty-odd pages, building it from scratch is an afternoon you only spend once.
How to feed the map in, with three standing rules
Paste the whole map at the top of every session, before the brief for the page. Not a summary of it, the actual list. Then give it three standing rules with it:
- You may only link to URLs that appear in this list. If the page you want does not exist, say so instead of inventing a URL.
- This new page is a spoke under this hub. Link up to that hub, using the term the hub owns.
- Do not write anything that overlaps with the term another page already owns. Tell me if the brief overlaps.
The third rule does double duty, because the same blindness that breaks linking causes the cannibalisation trap. A model that can see the map can flag the collision before you publish rather than after.
What changes in the output
Three things, immediately. The invented URLs stop, because there is a closed list to choose from and refusing is now an allowed answer. The links point at pages that actually matter, because the map says which ones are hubs. And the anchor text starts matching what each destination is trying to rank for, because you wrote that down in a column instead of leaving it to be guessed.
What does not change is that you still check it. The map narrows the guessing dramatically, it does not remove it. It also has to be true, so when you publish a page or change a URL, update the row that day. A stale map produces confident links to pages you retired six months ago.
The shape the map should describe: hubs and spokes
The structure that works for almost every service business is simple. Hubs are your main money pages, one per service or per location. Spokes are the narrower pages covering one question, problem or sub-service. For a local business those hubs are your service pages, your location pages and your Google Business Profile, which is the picture set out in the complete local SEO guide.
Every spoke links up to its hub, using the phrase that hub is meant to own. Every hub links down to its own spokes. Spokes on the same subject can link across where it genuinely helps a reader. Spokes do not link sideways to unrelated hubs because a phrase happened to appear in the text.
That concentrates the signal on the pages that take bookings and gives every supporting page a clear parent. It also means that when a hub is stuck at position three or four, you have somewhere real to look. Usually that is an authority problem rather than a content one, which I have covered in what to do when a page is stuck at number 3, but thin linking is free to rule out first.
Before you publish: click every internal link
Five minutes per page, and it catches whatever the map did not. The last one is the step everyone skips, because adding links out of a new page is easy and adding links in means reopening pages you thought were finished:
- Click every internal link on the page. Every one, including the ones that look obviously fine.
- Confirm each lands on a real page, not a 404 or a search results page.
- Confirm the anchor text describes the page you actually landed on, and is not 'click here' or 'read more'.
- Count the links. If a nine hundred word page has more than about five or six, cut the weakest.
- Add the link in to the new page from an existing page, and add the new page's row to the map.
If you have already published a pile of pages
Most people asking me about this have twenty or thirty pages up already. Do not delete anything. Work in this order.
- Find every internal link that returns a 404 and fix or remove it. Those cost you with Google and with customers.
- Build the map from what is actually live, marking hubs and spokes as you go. If you cannot tell which is which, that is the real finding.
- Add a link up to the hub from every spoke that has none, with a descriptive anchor.
- Cut pages with a wall of links back to the ones a reader would want.
- Then use the map for everything you generate from here, so the next twenty pages do not repeat the first twenty.
Internal linking in AI content is fixed by one document: the map
Internal linking is not a technical specialism. It is a set of decisions about which of your pages matter and what each one is for, and you know those answers better than any tool will. The reason AI gets it so wrong is not that it writes badly. It is that nobody told it what else is on the site.
So write the map down, paste it in every time, and make the closed list of URLs a rule rather than a suggestion. You still click every link before you publish. But you have moved the model from guessing at a site it cannot see to writing into one it can, and that single change fixes more than any amount of prompt tinkering ever will.