SEO & GEO Audit Template

Free template

A checklist gives you eighty boxes. It does not tell you what to do on Monday.

Fifty checks, already written, half of them GEO. A score weighted by severity rather than a pass count, and a fix list ranked by what it costs to fix. The audit ends in a plan, not a to-do list.

No email. No signup. Rebrand it and use it with your own clients if you like.

Priority = severity × effort
Quick win
Moderate
Heavy
Critical 8
24this week
16this week
8needs a plan
High 5
15this week
10this month
5queue it
Medium 3
9this month
6queue it
3someday
Low 1
3someday
2someday
1someday

Every failed check lands in one of these twelve cells and the file works out which. Read it top left first. A Critical you can fix in an afternoon outranks a Critical that needs a rebuild, and the argument about what to do first is over before it starts.

The problem

Most audits are a list of complaints.

You can download eighty checkboxes from anywhere. The reason they end up in a folder nobody opens is not that the checks are wrong. It is that a checklist produces findings, and a client cannot act on a finding. They can only act on an order of work.

A pass count is the wrong maths

62 of 80 passed sounds like a B. It is meaningless if one of the 18 is a noindex on your money page. Severity has to weight the score, or a site with one fatal problem and a lot of tidy alt text reports as healthy.

Severity alone still does not give you an order

Two Criticals: one is a robots.txt line, one is a replatform. Same severity, wildly different Monday. Effort is the only thing the checklist cannot know and the auditor can, and it is what turns a severity list into a sequence.

And half the audit is missing

Standard checklists were written for a web of ten blue links. They have nothing to say about whether your answers survive without JavaScript, whether a plugin default is quietly blocking GPTBot, or who gets cited when a buyer asks an assistant for a recommendation. Fourteen of the fifty checks here are GEO. Same weight as Technical.
The file

Fifty checks, already written.

This is not a blank grid you fill with your own items. The checks are in it, with a benchmark for each one written before anybody looked at a site, and a severity set in advance so nobody can quietly downgrade a Critical once they see what the fix costs. You fill Result, Evidence, Effort and Fix.

Technical14 checks
The usual suspects, plus the ones that only matter now.
  • T03 Answers exist in the raw HTML, not injected by JavaScript. Google renders JS. Most AI crawlers do not.
  • T01 Money pages are indexable. Check the rendered page, not the CMS setting.
Content11 checks
Cannibalisation, thin pages, internal links, clusters, freshness.
  • C03 No two indexable pages competing for the same query. Check which one Google actually picks.
  • C05 Under 300 words and no unique value means noindex it or merge it. Do not pad it.
Authority6 checks
Profile shape and relevance, not a DR number.
  • A02 Majority of links topically Core or Adjacent. Relevance beats volume.
  • A06 Any earned coverage in the last six months. Zero means the profile is bought or stale.
Local5 checks
Mark the whole area N/A if it does not apply. It reads as n/a, not as a zero.
  • L01 Primary category correct. It does most of the work in the map pack and most are wrong.
GEO14 checksTHE HALF NOBODY RUNS
The reason this file exists rather than being the four hundredth SEO checklist.
  • G01 Baseline recorded: are we named for the top ten buyer prompts, across four engines. Critical, because without a baseline nothing after it is provable.
  • G03 Citation source mix known: own site versus third party. The diagnostic that decides whether the answer is content or digital PR.
  • G08 AI crawler policy in robots.txt is deliberate. GPTBot, PerplexityBot, ClaudeBot, Google-Extended, allowed or blocked on purpose rather than by a plugin default nobody chose.
  • G04 Key pages open with a self-contained 40 to 60 word answer. No answer block, no citation.
The scoring

A score you can argue with.

The maths is four lines long and it is left visible in the file, in columns N to P, rather than hidden behind a chart. A score a client cannot audit is a score they are right not to trust.

Severity is a weight

Critical 8, High 5, Medium 3, Low 1. A Pass earns the full weight, a Partial earns half, a Fail earns zero. The score is earned weight over available weight, so failing one Critical costs you what failing eight Low checks would. That is the correct shape and it is what a pass rate gets wrong.

Not checked costs nothing

Unfinished rows are excluded from both sides of the fraction rather than counted as failures. A half-finished audit reports an honest partial score instead of a fake bad one, and the scorecard tells you how many rows are still open.

N/A is a decision, not a zero

Mark the Local rows N/A for a single-location business and the area reads n/a on the scorecard. It has not failed local. It does not have one. Small thing, and it is the difference between a report that is defensible and one that quietly overstates the problem to make the pitch easier.
The method

How to run it yourself.

The whole thing is on this page. If you want to do it yourself, this is everything you need.

1

Decide what is out of scope before you start

Mark whole areas N/A up front. Not multi-location? The Local rows are N/A, not fails. Doing this first stops the score being dragged by things you were never going to fix, and it stops you doing it later to make the number look better, which is a different thing entirely.
2

Work top to bottom and write evidence as you go

A URL, a number, a screenshot reference. Not “titles need work”. An audit without evidence is an opinion, and the Evidence column is what makes a Fail defensible three months later when a developer disputes it.
Use Partial honestly. It earns half weight and it exists because most findings are not binary. A site with titles on 60 percent of pages has not passed and has not failed.
PassPartialFailN/ANot checked
3

Run the GEO rows manually, in a clean session

No chat history, no personalisation, no account you have been using all year, or you are auditing your own account rather than the model. There is no tool that does this properly yet, and it takes about a minute per prompt.
G14 asks you to write down the prompt set while you are here. Do it. It means the next audit is a comparison rather than a fresh start, and it is the input to the GEO visibility tracker if you want the ongoing version.
4

Set effort last, once you know what the fix is

Effort is the only column the checklist cannot pre-fill and you can. Quick win, Moderate, Heavy. Guessing it before you have written the fix is how a replatform gets logged as Moderate.
Then write the fix. If you cannot write that line, you have found a symptom, not a finding. Vague fixes are how audits become shelfware.
5

Sort by Priority and hand over the top ten

That is the deliverable. Not fifty rows, ten. The scorecard gives you the cover number, the critical failures, the quick wins available, and the total open priority points.
Then re-run the same file next quarter rather than starting a new one. Watching the score climb and the priority points fall is the only thing here that proves work happened. Whatever it says about content, the content plan is where it turns into a schedule.
Calibration

Three ways people get this wrong.

Downgrading a severity once the fix looks expensive

Severity is pre-set for exactly this reason. It describes how bad the problem is, not how inconvenient it is to raise. If a Critical is genuinely a Medium for this client’s context, change it and say why in Evidence. If you are changing it because a developer sighed, do not.

Handing over all fifty rows

It feels thorough and it reads as noise. Nobody has ever actioned a fifty-row audit. The Priority column exists so you can hand over ten and keep the other forty for the record.

Starting a fresh file every quarter

Then you have four audits and no trend. Re-run the same one. The score moving is the deliverable. A new spreadsheet is just more evidence you were busy.
Questions

FAQ

Is the audit template really free?
Yes, and there is no email form. Download it, edit it, rebrand it, use it with your own clients. It is the scaffold we run prospect audits on, published as it is.
How is the score calculated?
Severity is a weight: Critical 8, High 5, Medium 3, Low 1. A Pass earns the full weight, a Partial earns half, a Fail earns zero. The score is earned weight divided by available weight. N/A and Not checked are excluded from both sides. The maths is visible in columns N to P of the file.
Why is Priority severity times effort?
Because severity alone does not give you an order. Two Critical failures where one is a robots.txt line and one is a replatform are not the same Monday. Multiplying by effort surfaces the high-severity cheap fixes first, which is what you want in week one of an engagement.
How long does it take to run?
Half a day for a small site if you have Search Console and a crawler open, longer if the GEO rows are new to you, because those are manual. The prompt checks are about a minute each and they are the part most people underestimate.
Can I use it in Google Sheets?
Yes. Use the Make a copy link at the top of this page. The dropdowns, colour coding and the live scorecard all carry across.
Can I add my own checks?
Yes. Add rows under the last item and give them an ID, an area and a severity. The formulas and dropdowns run to row 80, so there is room for thirty of your own. Past that you have to extend both.
Or we can just run it

The audit is the easy part.

Finding fifty problems takes a day. Fixing the ten that matter, in the right order, while the site keeps earning, is the year. That is the engagement.