All promptsTechnical SEO

An SEO audit example: the input, the scored report, and what it refuses to score

A worked SEO audit end to end. What you paste in, the scored report that comes back, and why the areas with no evidence are excluded from the total.

Works in
ChatGPT, Claude, Gemini
You need
The head HTML of one page · Response headers and robots.txt, if you have them
Written for
seo audit example
98A

Scored by our own engine

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

Score your own page →

Most pages about SEO audits describe one. This one runs one. Below is the input a scored audit actually takes, the shape of the report that comes back, and the rule that stops the number at the bottom from flattering the page. The example site here is made up, not a client.

What you paste in

Three artefacts, about two minutes of work: robots.txt, the response headers from curl -I, and the head element from view source. Six of the nine scored areas come out of the head alone.

A trimmed version of the head from the example page, a product page for a single bicycle:

<title>Bike | Ridgeway Cycles | Ridgeway Cycles Online Store UK</title>
<link rel="canonical" href="https://ridgewaycycles.co.uk/shop/">
<meta name="robots" content="index,follow">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Ridgeway Cycles"}</script>

No meta description, a 71 character title that leads with the brand twice, and a canonical on a product page pointing at the shop index.

What comes back

A scored block, an unscored block, and a total that names its own denominator:

SCORED
Crawler access      8/10   evidence: robots.txt, one Disallow: /cart/
Indexability       10/10   evidence: meta robots "index,follow"
Canonical           1/10   evidence: canonical -> /shop/, not this URL
Title & description 3/10   evidence: title 71 chars, brand twice; no description
Structured data     2/10   evidence: one JSON-LD block, @type WebSite only

NOT SCORED
Speed        needs a response time or a PageSpeed result
Images       needs the body HTML, only the head was pasted
Freshness    needs the body HTML or an Article block

TOTAL  24/50 across 5 scored areas, 3 areas not scored

The canonical is the finding, and it is the one nobody would have spotted by looking at the site. A product page canonicalising to the shop index hands every signal it earns to a listing page, permanently, while the page loads correctly and looks entirely normal to anyone reading it in a browser. The title and the missing description are real too, and both are worth less than that one line.

Notice what the evidence lines do to the tone. “Canonical points to /shop/, not this URL” is checkable in the paste in about five seconds. It is a different kind of statement from “canonical tags should be self referencing”, which is true of every site and tells you nothing about this one.

The line that stops the score lying

Areas with no evidence are excluded from the total rather than scored as passes. That is the whole mechanic, and it is why the denominator is written out.

Score the three unscored areas generously and the same page reports 54/80, which reads considerably better and rests on nothing. Zero means measured and bad. Absent means absent, and the two must never collapse into each other. Start by confirming the audit read your real file with the robots.txt checker, then take the full 36 check audit for the areas a paste can never contain. If the question underneath this one is what an audit is supposed to cover in the first place, what an SEO audit actually checks sets out the areas and what a report has to show you before it is worth paying for.

The prompt 425 words
You are producing a scored SEO audit of one page. I am pasting the evidence I
have. Score only what the evidence supports.

Scoring rules:

1. Score each area out of 10, and under each score write the evidence line:
   the exact value or values from my paste that produced it. A score with no
   evidence line is not allowed.
2. If an area has no evidence in my paste, mark it NOT SCORED, say what
   artefact would let you score it, and exclude it from the total. Never
   score an unmeasured area as a pass, and never score it zero either. Zero
   means measured and bad. Absent means absent.
3. State the total as a fraction of the scored areas only, in the form
   "34/50 across 5 scored areas, 3 areas not scored". The denominator must
   make it obvious how much of the audit you were able to run.
4. Absence of a thing in the markup is evidence, and absence of the markup
   from my paste is not. If I pasted the head and there is no canonical in
   it, that is a finding. If I did not paste response headers, X-Robots-Tag
   is not scored.
5. You cannot crawl, you cannot fetch this page, you cannot see my server
   response beyond what I pasted, and you cannot see Search Console or
   analytics. Anything needing those is NOT SCORED.
6. Do not estimate traffic, rankings, revenue or a percentage improvement,
   and do not predict what the score would be after the fixes.
7. If two pieces of evidence contradict each other, report both and score the
   area as contested rather than choosing.

Output in this order, as plain text, no table:

SCORED
For each area: name, score out of 10, then "evidence:" and the values.

NOT SCORED
For each: area name, and the artefact needed, one line.

TOTAL
The fraction, in the form required by rule 3.

FIRST THREE FIXES
Three items. For each: what to change, exactly, and which score it moves.

Constraints:
- Use only these areas, so two runs are comparable: crawler access,
  indexability, canonical, title and description, headings, structured data,
  images, speed, freshness.
- Do not invent an area, and do not merge two of them.
- Do not carry a score over from anything you have seen before. This page is
  scored on this paste only.

The page and what it is for: [ONE SENTENCE]
robots.txt: [PASTE IT, OR WRITE "not fetched"]
Response headers: [PASTE THEM, OR WRITE "not captured"]
The head HTML: [PASTE EVERYTHING BETWEEN <head> AND </head>]

What to change

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

[ONE SENTENCE]
What the page is and what it is meant to do, for example "product page for a single bike, meant to sell it". This decides how the same evidence is scored: no Product markup on a product page is a serious structured data failure, and no Product markup on an about page is correct.
[PASTE IT, OR WRITE "not fetched"]
The plain text of yourdomain.com/robots.txt. Usually under thirty lines. If you write "not fetched", crawler access comes back as NOT SCORED, which is the correct outcome and is visibly different from coming back clean.
[PASTE THEM, OR WRITE "not captured"]
Output of curl -I on the URL, or the response headers from the network tab. This is the only place X-Robots-Tag, Cache-Control and the security headers appear. A page carrying a noindex in a header looks perfect in the HTML, which is why this variable exists separately.
[PASTE EVERYTHING BETWEEN <head> AND </head>]
View source, copy the head element whole. Title, meta description, canonical, meta robots, Open Graph, hreflang and most JSON-LD are all in there, which is why the head alone is enough to score six of the nine areas. Add any JSON-LD from the body if your platform puts it there.

How to run it

  1. 01
    Collect the three artefacts before you start

    Fetch robots.txt in a browser tab, run curl -I on the page for its headers, and copy the head element from view source. Together they take about two minutes. Every one you skip converts an area from scored to not scored, which is visible in the total rather than hidden inside it.

  2. 02
    Fill the variables honestly, including the absences

    Write "not fetched" and "not captured" where that is the truth rather than leaving the field blank. A blank field invites the model to proceed as though the area were fine, and the whole value of the report is that a missing measurement looks different from a passing one.

  3. 03
    Read the NOT SCORED block before the total

    The total is only as meaningful as the denominator next to it. A 41/50 across five scored areas with four not scored is a much weaker result than a 41/70 across seven, and the two look similar at a glance. Read what was excluded first, then decide whether the number is worth quoting to anyone.

  4. 04
    Check one evidence line against the paste

    Pick a score and find the values it cites in what you sent. They should be there exactly. This is the fastest way to catch a model that has drifted into scoring on general impression, and it usually shows up first on the areas that are easiest to describe in the abstract, such as headings.

  5. 05
    Fix the crawler access finding first, whatever it scored

    Crawler access sits above everything else on the list because nothing below it matters if the page cannot be fetched. Run the domain through the robots.txt checker, which parses your live file with the same grouping rules a crawler applies, and confirm the audit read the same file you did.

  6. 06
    Rerun with the same nine areas after the work

    The area list is fixed in the prompt so two runs can be compared. Rerun with fresh artefacts once the fixes ship and put the two totals side by side, including the not scored counts. A total that went up because you supplied more evidence is a different result from one that went up because the page improved.

Questions people ask

What does a real SEO audit example look like?

A list of areas, a score for each, the evidence that produced the score, and an explicit list of what could not be assessed. The last part is what separates an audit from a report. Without it, an area that was never examined reads exactly like an area that was examined and found fine.

Why does the prompt refuse to score areas with no evidence?

Because scoring them is the most common way an audit misleads. If speed is scored as a pass when nobody measured it, the total is inflated by an area nobody looked at, and the page ships with a number attached to it that no measurement supports. Excluding it makes the gap visible in the denominator.

Is a score out of 100 meaningful?

Only alongside what it covers. Two tools can score the same page 62 and 88 because they weight different things and check different numbers of them, which is why the total here is written as a fraction of the areas actually scored. Compare a page against its own earlier run, not against someone else's scale.

Can I use this on a competitor's page?

Yes, and you will get less of it. You can view source and fetch their robots.txt, so the areas that come from the head are all scorable. You cannot get their response headers reliably or anything from their Search Console, so those come back not scored, and the comparison is honest about being partial.

How is this different from an audit tool?

A tool measures and this reads. The prompt scores whatever evidence you hand it, so its ceiling is the quality of your paste. Our own engine fetches the page itself and runs 36 checks, including things no paste contains, such as the actual server response time and the word count of the raw HTML.

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