A Claude prompt for SEO that reads four pages at once and has to quote before it concludes
An XML structured prompt that puts your page and three that outrank it in front of Claude at once, and refuses any finding it cannot quote.
- Works in
- Claude, ChatGPT
- You need
- The full text of your page, headings included · The full text of two or three pages ranking above you · The one query all of them are competing for
- Written for
- claude prompt for seo
Scored by our own engine
This page, run through the audit we sell. Measured 4 August 2026.

Most SEO prompts hand the model one page. The interesting comparisons need four: yours, and the ones currently answering the query better than you do. The prompt below puts all of them in front of the model at once, makes it pull verbatim passages before it is allowed to name a single gap, and sends anything it cannot quote into a separate block.
Why the XML tags are not decoration
They keep four documents from blurring into one. Anthropic’s own prompting guidance says XML tags help Claude parse complex prompts unambiguously when instructions, context and variable inputs are mixed together, and that giving each type its own tag reduces misinterpretation.
The same guidance recommends wrapping multiple documents in a document block with source and content subtags, and separately recommends grounding responses in quotes by asking for the relevant passages first, before the actual task. This prompt is both of those techniques applied to one SEO job. That is the honest sense in which it is a Claude prompt: the structure follows something the vendor published, rather than something the industry passed around.
What quoting first actually prevents
Asked for gaps, a model will find gaps, whether or not the pages contain any. Requiring a verbatim passage under every finding removes the room where that happens.
It also gives you a two minute audit of the whole output. Take two quotes from the block, search the competitor page for them, and confirm they appear word for word. If they do, the findings resting on them are probably real. If one does not, throw the run away rather than reading further, because the same process produced everything below it.
The other half of the design is rule 3. Length is not a finding. “Their page is more thorough” is the single most common output of competitor analysis and the least actionable sentence in SEO, because it names no thing you could add. Naming what the extra length contains, a stated limit, a price, a worked example, a refusal, turns it into work.
Where Claude sits against ChatGPT
Nowhere you can measure from this page, and anybody offering you a figure has invented it. Model behaviour shifts with each release, and a score published today is stale by the next one.
What we will say is behavioural and hedged. In our use, Claude tends to hold a defined output block structure across a long pasted input, and tends to leave items in the cannot determine block rather than reaching for a conclusion. Both are the behaviour this prompt wants. If you want a real comparison for your own work, use the harness that makes both models tag their claims and count. Then confirm your page is even readable in the first place with the render gap checker, because none of this applies to a page that arrives empty.
You are a search analyst. I am giving you several complete pages that all
compete for one query. Work out what the pages above mine establish that
mine does not, and never state a finding you cannot quote.
Work in this order and do not reorder it.
First, read every document and pull the quotes. For each competitor page,
extract the passages that do work my page does not do: a specific number, a
named source, a defined term, a stated limit, a price, a date, a refusal, a
worked example. Put these in <quotes> tags with the source attribute of the
document they came from. Quote verbatim. Do not paraphrase into the quote
block.
Only after the quotes are on the page, write the findings.
Rules you must follow:
1. Every finding cites at least one quote you extracted, by document source
and by its opening words. A finding with no quote behind it belongs in
<cannot_determine> instead.
2. You cannot see rankings, links, traffic, domain history or a live
results page. Do not assert or estimate any of them. If a finding needs
one, it goes in <cannot_determine>.
3. Do not treat length as a finding. "Their page is longer" is not a gap.
Name the thing the extra length contains, or drop it.
4. Where every competitor makes a claim my page does not make, say whether
the claim is one I could truthfully make. If you do not know, say so
rather than assuming I can.
5. Do not write my page for me. Describe the gap, not the paragraph that
fills it.
Output exactly these four blocks, in this order, and nothing outside them:
<quotes> one line per extracted passage, with its source </quotes>
<findings> numbered gaps, each with the quote it rests on </findings>
<cannot_determine> what I would need, and where I would get it </cannot_determine>
<next> the single gap to close first, and one sentence on why that one </next>
<query>[THE ONE QUERY EVERY PAGE HERE IS COMPETING FOR]</query>
<business>[ONE SENTENCE ON WHAT YOU SELL AND TO WHOM]</business>
<documents>
<document source="mine">
[PASTE YOUR FULL PAGE TEXT INCLUDING EVERY HEADING]
</document>
<document source="competitor-1">
[PASTE THE FULL TEXT OF A PAGE RANKING ABOVE YOU]
</document>
<document source="competitor-2">
[PASTE ANOTHER, OR DELETE THIS BLOCK]
</document>
</documents>What to change
Everything in square brackets is yours to replace. Nothing else needs editing.
[THE ONE QUERY EVERY PAGE HERE IS COMPETING FOR]- The single query you and the competitors are all chasing. One query, not a theme. If the pages you pasted are not all trying to win the same query, the gaps that come back are differences rather than gaps, and there is nothing to act on.
[ONE SENTENCE ON WHAT YOU SELL AND TO WHOM]- What you sell and who buys it. This is what rule 4 runs on: whether a claim your competitors all make is a claim you could truthfully make too. "We sell audit software to UK charities" makes half the gaps irrelevant immediately, which is the useful outcome.
[PASTE YOUR FULL PAGE TEXT INCLUDING EVERY HEADING]- Your visible page text with the heading levels intact. Paste it rather than linking it. Many assistants either cannot fetch a URL or fetch a rendered version that differs from what a crawler receives, and the headings are what the comparison runs on.
[PASTE THE FULL TEXT OF A PAGE RANKING ABOVE YOU]- The whole text of one page currently above you for that query, not its meta description and not a summary. Take the page immediately above your position, or the top result if you are not ranking at all.
[PASTE ANOTHER, OR DELETE THIS BLOCK]- A second competitor page, or nothing. Two or three competitors is the sweet spot: one gives you a coincidence, five gives you a list of things every page in the category happens to say. If you only have one, delete the whole document block rather than leaving the placeholder in, which some models will try to interpret.
How to run it
- 01Search the query and take the pages above you
Search in a private window so your own history does not reshape the results, and take the two or three above your position. If you are not ranking at all, take the top three. Those are the pages the query is currently being answered by.
- 02Copy the visible text of each, headings included
Select the page text and copy it with the heading structure intact. Strip navigation, cookie banners and footers. What you want is what a reader reads, in the order they read it, which is also roughly what a crawler gets.
- 03Fill the XML blocks and delete the ones you do not use
Keep the tag names exactly as written and delete any competitor block you have no page for. The tags are load bearing here: they are what keeps four documents from blurring into one when the model reads them.
- 04Read the quotes block before the findings
Skim the extracted passages first and check they are verbatim. If a quote does not appear on the page it claims to come from, stop and rerun. Every finding below rests on that block, so a fabricated quote invalidates everything under it.
- 05Strike the gaps you cannot truthfully close
Rule 4 asks whether a claim is one you could make. Go through the findings and cross out anything that would require you to state something untrue about your product, your data or your track record. That is usually a third of the list and it should be.
- 06Check your page can be read before you edit it
If your page is client rendered, the version an assistant or a crawler receives may be almost empty regardless of what the gap analysis says. Run it through the render gap checker before you spend a day writing, because a perfect page in a blank HTML response competes with nothing.
Questions people ask
What is the best Claude prompt for SEO?
One built for a job with several documents in it, because that is where a large context is worth having. Handing the model your page and the pages beating you at the same time, and requiring it to quote before it concludes, produces findings you can check. A single vague instruction produces the same generic advice from any assistant.
Why is this prompt written in XML tags?
Because Anthropic documents it. Its prompting guidance says XML tags help Claude parse complex prompts unambiguously when a prompt mixes instructions, context, examples and variable inputs, and that wrapping each type in its own tag reduces misinterpretation. For multiple documents it recommends a document block with source and content subtags, which is exactly the shape here.
Where does Claude do better than ChatGPT on this?
Honestly, on nothing we can put a number to. What we can say is that the technique this prompt uses, structuring with XML tags and grounding the answer in quotes pulled first, is published by the vendor for this model rather than inferred. In our own use Claude also tends to hold a defined output block structure across a long pasted input and to leave items in the cannot determine block more readily, which is the behaviour you want here. Treat both as tendencies, not as results.
Will this prompt run in ChatGPT or Gemini?
Yes. XML tags are just text and any current assistant handles them. The reason it is filed under Claude is that the structure follows published guidance for Claude, not that other models reject it. If you want to compare the two on your own work, run the same task in both and count the claims each one can source.
Why does it extract quotes before writing findings?
Because a model asked for gaps will produce gaps whether or not the pages contain any. Pulling verbatim passages first means each finding has to point at something that exists on a page you pasted, and it gives you a cheap way to catch a fabrication: check two quotes against the source.
Unsubscribe in one click. We never pass your address on.