All promptsOn page

Turn a sitemap export into internal links you can place this afternoon

Turns a sitemap export and your page text into named link placements: the anchor text written out, the sentence to put it after, and a reason for each one.

Works in
ChatGPT, Claude, Gemini
You need
Your sitemap URLs with a one line topic for each · The full text of the pages you want to add links to · The pages that make you money
Written for
chatgpt prompt for internal linking
98A

Scored by our own engine

This page, run through the audit we sell. Measured 4 August 2026.

Score your own page →

Most internal linking advice ends at “link related pages together”, which is true and unusable. The prompt below takes your sitemap export and the text of the pages you want to improve, and returns the destination, the exact anchor text, the sentence to place it after and one reason per link. The output is a list of edits, not a strategy.

A sitemap is a list of URLs, not a list of topics

A sitemap export tells a model which pages exist. It does not say what any of them contains, and a slug is a guess: /blog/schema-guide could be an introduction, a validation walkthrough or a rant.

That is why the prompt refuses to work from URLs alone. Writing one line of topic per URL is the whole preparation step, and it is the input that decides whether you get placements or paragraphs about site architecture. It is also, unavoidably, forty minutes of your own reading.

Anchor text is the only description the destination gets

Anchor text should make sense with the surrounding sentence deleted, because that is roughly how a crawler weighs it. “Read more” describes nothing. The same anchor pointing at two different pages tells a search engine those pages are interchangeable.

It is the same job as a title tag, done by whoever is linking rather than by the page itself, which is why the constraints that make a good title and description pair also make good anchors: front load the distinguishing words, and never spend them twice.

Three of them. A link to a page that does not exist, because a model asked for internal links will happily invent a plausible URL. A reciprocal link for every pair, which turns the middle of an article into a footer. And a link between two pages that compete for the same query.

That last one is the rule worth keeping. Two of your own pages aimed at one query is a content problem, and joining them with a link makes the site look better organised while changing nothing. When the closing list names a competing pair, stop linking and go and fix the page: the optimise an existing page prompt works on one of them at a time, and a page that finally wins its query still needs a snippet worth clicking once it ranks.

Before any of it, confirm the export you are working from is the one crawlers actually read. The XML sitemap checker reports whether your sitemap resolves and whether robots.txt declares it, and a stale sitemap produces a linking plan for pages that no longer exist.

The prompt 578 words
You are placing internal links on a site I already own. I will give you every
URL with a one line topic, and the full text of the pages I want links added
to. Return specific placements. Do not return advice about internal linking.

Rules you must follow:

1. Only link between URLs that appear in my list. Never construct a URL,
   never guess a path, never link to a page you think should exist. If a link
   would obviously help and I have no page for it, put it in the "pages you
   do not have" list at the end instead.
2. Every placement must name the sentence it goes after, quoted from the
   source text I pasted, copied word for word. If you cannot quote a sentence
   from what I pasted, you may not propose that placement.
3. Anchor text must describe the destination well enough to be understood
   with the surrounding sentence removed. Never "click here", "this article",
   "read more", "learn more", or the bare brand name. Never use the same
   anchor text for two different destinations, and say so if you were tempted.
4. If the anchor phrase does not already exist in the source text, do not
   force the link into an unrelated sentence. Write the one new sentence that
   earns it and mark the placement as "new sentence" so I can see which
   changes are edits and which are writing.
5. Do not propose a link a page already has. Check the text I pasted for the
   destination URL and for the anchor phrase before proposing anything.
6. Do not propose the reverse of a link you have already proposed unless a
   reader genuinely needs to travel in both directions. Reciprocal links
   between every pair are how a site ends up with a footer in the middle of
   its articles.
7. If two of my pages cover the same topic, do not link them to each other to
   smooth it over. Say plainly that they compete, name which one should be
   the destination, and say what the other should become.
8. Do not estimate link equity, PageRank, traffic, rankings or any number.
   Every "why" must be a sentence about what the reader wants next, not a
   claim about what a search engine will do.
9. If I have given you URLs with no topic line, refuse to place links and ask
   me for the topics. A URL slug is a guess about what a page says.

Group the output by source page, in this shape, and nothing else:

  ### <source page URL>
  - Link to: <destination URL>
    Anchor text: "<the exact words to link>"
    Place it: after the sentence beginning "<first six words, quoted from my text>"
    Existing sentence | New sentence
    Why: <one line on what the reader wants next at that point>

Then two closing lists:
- Pages you do not have: the destination each source page kept reaching for
  that does not exist in my list.
- Competing pages: any two URLs whose topics overlap enough to fight, with
  which one should be the destination.

Maximum links to add per source page: [HOW MANY LINKS PER PAGE, OR WRITE "5"]
The pages that make me money: [THE URLS THAT EARN, OR WRITE "none"]
Every URL with its topic: [PASTE YOUR SITEMAP URLS, ONE PER LINE, EACH WITH A ONE LINE TOPIC]
The pages to add links to: [PASTE THE FULL TEXT OF THE PAGES YOU WANT LINKS PLACED ON]

What to change

Everything in square brackets is yours to replace. Nothing else needs editing.

[HOW MANY LINKS PER PAGE, OR WRITE "5"]
A cap, because an uncapped model pads. Five internal links inside an article is comfortable for a reader and small enough that each one has to justify itself. Removing the cap produces twelve links per page and a reading experience nobody wants.
[THE URLS THAT EARN, OR WRITE "none"]
Your service, pricing or product pages. Without this the model links topic to topic and your articles quietly form a closed loop that never sends anybody anywhere useful. With it, the reason column starts naming the point at which a reader is ready to go there.
[PASTE YOUR SITEMAP URLS, ONE PER LINE, EACH WITH A ONE LINE TOPIC]
The export plus the thing an export does not contain. "/blog/hreflang-mistakes: the four reasons a hreflang set gets ignored, mostly missing return links" is a usable line; the URL on its own is a slug the model will interpret optimistically. Rule 9 makes the missing topics visible instead of silently guessed.
[PASTE THE FULL TEXT OF THE PAGES YOU WANT LINKS PLACED ON]
The source pages only, not the whole site. Five to ten at a time, pasted as text with headings intact, because rule 2 anchors every placement to a sentence in here. Give it a URL instead and what comes back is placements for a page it imagined.

How to run it

  1. 01
    Export the sitemap and cut it down

    Open your sitemap.xml and copy the URLs, or export them from your CMS. Drop pagination, tag archives, author pages and anything noindexed. What is left is the set of pages worth pointing at, and it is usually a third of what the file contained.

  2. 02
    Add one line of topic per URL

    This is the work, and it is the reason the prompt produces placements rather than platitudes. One line per page saying what it actually covers. A slug like /blog/schema-guide tells a model nothing about whether that page answers a question your other page raises.

  3. 03
    Name the pages that earn

    List your service, product or pricing URLs separately. Internal linking done purely by topic builds a tidy web of articles that link to each other and never to anything you sell, which looks correct in a diagram and does nothing for the business.

  4. 04
    Paste the full text of five to ten source pages

    Give the model the pages you want to add links to as text, headings included. Every placement it returns is anchored to a sentence in what you pasted, so the pages you leave out simply get no suggestions, which is the correct behaviour.

  5. 05
    Verify every quoted sentence before you touch the site

    Search each source page for the sentence in the "place it" line. Anything you cannot find word for word was reconstructed rather than read, and the whole placement goes, not just the quote. This one check catches most of what goes wrong with prompts that reference your own content.

  6. 06
    Add the links, then read the paragraph out loud

    Place the links and read the surrounding paragraph as a person rather than as an editor. If the sentence now exists to hold a link, cut it. A link a reader would not have wanted is a link that makes the page slightly worse in exchange for nothing you can measure.

Questions people ask

What is a good ChatGPT prompt for internal linking?

One that outputs placements rather than principles. Ask a model about internal linking and it explains internal linking. Give it your URL list with a topic per page, your page text, a cap on links per page, and a rule that every placement must quote the sentence it goes after, and what comes back is a list of edits somebody can apply without thinking.

Can ChatGPT read my sitemap if I give it the URL?

Do not rely on it. Assistants that fetch a URL may get a cached copy, a partial file or nothing, and a sitemap tells them only which URLs exist rather than what any page says. Paste the URLs as text and add a line of topic to each one, which is the input that makes the difference between real placements and guesses.

How many internal links should a page have?

As many as a reader genuinely needs next, which is usually a small number. The prompt takes a cap rather than a target because an uncapped model pads until the page reads like a directory. Five inside an article is comfortable. The test is whether you can give a one line reason for each link that mentions the reader.

What makes good anchor text?

Words that describe the destination when read on their own, with the sentence around them removed. That rules out "click here" and "read more", and it also rules out using the same phrase for two different destinations, which teaches a search engine that two of your pages are the same thing. Think of it as a title tag written by whoever is linking.

Will internal linking fix a page that will not rank?

Sometimes, and often the problem is elsewhere. If two of your own pages target the same query, links between them do not resolve the conflict, they entrench it. The prompt flags competing pages for that reason, and the fix is deciding which page owns the query rather than adding another link.

A new prompt, most days One working prompt for a real SEO or AI visibility job, what to change in it, and a worked example. No sequences, no offers dressed as newsletters.

Unsubscribe in one click. We never pass your address on.

Run your first audit
in about a minute

Free account, no card. Paste your URL and get a real, scored report of your AI and search visibility.

Measuring rankings in