What is an AEO audit and what should it include
An AEO audit is a dated work packet: query panel, crawler map, entity sheet, citation log, and ranked fixes — not a dashboard score or a blog rewrite.
William Spurlock Founder — Spurlock Studios 31 MIN
An AEO audit is a dated diagnostic that records what answer engines already say about you, whether those products can fetch you, whether your facts agree across the web, and which tickets to ship first. The work product is five artifacts: a frozen query panel, a crawler map, an entity sheet, a citation log, and a prioritized fix list. If the vendor hands you a dashboard score and a blog calendar instead of those files, you bought a costume.
This spoke sits under the Answer Engine Optimization playbook. The sequence you run is the AEO audit checklist. This page is the object you walk out holding. I have been SEO certified since 2021. The scoreboard changed. The need for a written baseline did not.
The short answer
- An AEO audit answers four questions: what do models say, can they fetch you, do your facts agree, and what should ship first.
- The packet is five files, not a grade: query panel, crawler map, entity sheet, citation log, ranked fixes.
- SEO crawl hygiene still matters. It is the floor. Citation, mention, accuracy, and share of voice are the scoreboard.
- Do not edit the CMS until the citation log exists. A “win” with no baseline is a story.
- Buy the packet when you cannot name current state. Wait when crawl, NAP, or the legal name is on fire — see when AEO is worth it.
What is an AEO audit?
An AEO audit is a time-boxed read of how ChatGPT search, Perplexity, Claude with web tools, and Google AI Overviews / AI Mode treat your brand on a frozen set of buyer prompts. It is not a Lighthouse score with “AI” in the title. It is not a rewrite. It is the evidence pack that makes later rewrites accountable.
Google’s own site-owner docs still set a boring floor: to appear as a supporting link in AI Overviews or AI Mode, a page must be indexed and snippet-eligible in ordinary Search. There is no extra AEO markup track (Google Search Central: AI features; Google’s generative-AI optimization guide, May 2026). Eligibility is not inclusion. The audit exists because eligibility and inclusion are different jobs.
| Question the audit answers | Artifact that holds the answer | Done looks like |
|---|---|---|
| What do we even measure? | Query panel | 25–40 frozen prompts, 3–6 competitors, written success definition |
| Can the products fetch us? | Crawler map | Training vs search vs user-fetch bots decided on purpose |
| Which facts about us conflict? | Entity sheet | One chosen string per field, conflicts listed with URLs |
| What do models actually say? | Citation log | Dated mention / citation / accuracy rows, not Slack screenshots |
| What ships first? | Prioritized fixes | Ranked tickets with owners, non-goals, and a 30-day slice |
Four questions, five files. If a fifth file is missing, the fourth question is a vibe.
Operator definition I will stand behind:
- Scope is frozen. Prompts and competitors do not move mid-engagement.
- Answers are logged before HTML changes. Date, product, mention, citation, accuracy.
- Conflicts are listed as tickets. Not as adjectives.
- The readout names what you will not do yet. A dump of forty ideas is not a plan.
If those four are missing, call it research. Do not call it an audit.
What is an AEO audit not?
It is not an SEO audit with a new acronym. It is not a tool login. It is not a promise that ChatGPT will cite you by a calendar date. Citation rate is non-deterministic. One screenshot is an anecdote. A panel you re-run is a scoreboard.
| Someone sold this as “the AEO audit” | What you actually got | What to do |
|---|---|---|
| A vendor “AEO score” | A black-box grade on a sample you did not freeze | Keep the tool if it logs prompts. Demand the five files anyway |
| A 40-page PDF, no tickets | A diary | Convert findings into line IDs or throw it out |
| A blog calendar | Content volume | Rank pages after the packet, not before |
| A robots.txt “block all AI” gist | A training-and-search opt-out mashed together | Split the bots. Write the policy |
| Schema stuffed into a tag manager | Markup that may not match visible HTML | Put facts in the page, then mark them up |
| “We checked ChatGPT once” | A demo | Freeze the panel and log it |
Pew Research Center’s July 2025 analysis of March 2025 browsing found Google users clicked a traditional result on 8% of visits when an AI summary appeared, versus 15% when it did not. Clicks on links inside the summary happened on 1% of those visits. About 18% of the Google searches in the study produced an AI summary (Pew Research Center). Read that as a consideration-set problem. An audit that only reports “organic sessions” will miss the loss.
Google also claims clicks from pages with AI Overviews tend to be higher quality. Pew and Google are measuring different things. The audit should record both: Search Console where you have it, and the chat/Overview panel Google does not give you as a ranking report.
- The SOW names the five artifacts by filename, not “insights”
- Success is defined as movement on the frozen panel, not “more AI traffic”
- No citation-date SLA appears in the proposal
- Tool seats are listed as measurement, not as the deliverable
- CMS edits are out of scope until the baseline ships
A grade without a panel is a mood. Do not pay for a mood.
How is an AEO audit different from an SEO audit?
An SEO audit asks whether you can rank and get clicked. An AEO audit asks whether a generated answer will name you, cite you, and get the facts right. You still need crawlable pages. You also need passages that survive compression and a chorus of other domains that do not contradict you.
Shared floor: indexable HTML, sane canonicals, robots that do not block the URLs you want cited, Organization facts that match the visible page. Different scoreboard: mention, citation, accuracy, share of voice on a frozen prompt set.
| Job | SEO audit owns | AEO audit owns |
|---|---|---|
| Crawl / index | Coverage, noindex, sitemap, status codes | Same floor, plus snippet eligibility on the URLs the panel cares about |
| Rank / CTR | Keywords, links, SERP features | Not the primary KPI. Inclusion inside the answer is |
| Entities | Sometimes a Knowledge Graph footnote | The fact sheet, sameAs, collisions, founder titles |
| Content | Thin pages, cannibalization, intent | 60-word lift test, tables, dated method pages |
| Off-site | Backlink toxicity and referring domains | Who AI already cites on your prompts |
| Measurement | Rank trackers, Search Console, GA | Prompt panel + Search Console generative-AI report if present |
| Technical AI policy | Rarely | Training bot vs search bot vs user-fetch, WAF 403s |
Semrush splits the three numbers I want on the sheet: a mention is the brand string inside the answer, a citation is a linked reference to a URL, and share of voice is your slice versus a frozen competitor set (Semrush: AI share of voice; Semrush: AI visibility metrics). One blended “visibility %” hides a mention-only win that never produces a click path.
Google’s AI-optimization guide points site owners at the Generative AI performance report in Search Console for Overviews and AI Mode (Google: generative AI features). That report does not replace ChatGPT or Perplexity. It is one product. The audit should say which products you logged, not “we checked AI.”
- SEO crawl issues that block snippet eligibility are in the AEO packet, not parked in another PDF
- Rank is recorded only as context, never as the pass/fail
- Mention and citation are separate columns
- Accuracy fails are tickets, even when you are cited
If the only chart is “keywords we still rank for,” you audited 2021. The buyer already asked a chat product.
What should the work packet include?
Five artifacts. Name them in the SOW. If a vendor cannot point at files, they are selling a workshop.
The AEO audit checklist is the order of operations — freeze, baseline, score, then roadmap. This page is the object those steps produce. Do not clone the ten-step sheet here. Demand the files.
| # | Artifact | What it is | Minimum columns / contents | Fail |
|---|---|---|---|---|
| 1 | Query panel | Frozen prompt set + competitor set + success definition | prompt_id, job, revenue tag, owner | “We will add queries as we go” |
| 2 | Crawler map | Which bots may fetch which URLs, plus WAF reality | Bot, purpose, robots.txt, live fetch, decision | One Disallow: / for “all AI” |
| 3 | Entity sheet | Canonical facts and every public conflict | Field, site, schema, LinkedIn, directory, decision | Three founding years, no owner |
| 4 | Citation log | Dated answers on the panel | Mention, citation URL, competitors, accuracy, archive | Screenshots in Slack |
| 5 | Prioritized fixes | Ranked tickets with non-goals | Risk, revenue prompt, effort, owner, 30-day slice | A 40-ticket dump |
Optional attachments I will take. They do not replace the five:
llms.txtfetch capture (status, first heading, whether it is a briefing or a sitemap dump — llmstxt.org)- Organization JSON-LD extract vs About (schema.org/Organization; Google Organization structured data)
- NAP matrix if you have a service area or Google Business Profile
- URL leaderboard of domains the products already cite
Packet completeness check:
- Open the folder. Count five named files (or five named tabs with dates).
- Confirm the citation log’s prompt IDs match the panel. If they drifted, the log is fiction.
- Confirm the fix list’s line IDs point at a log row, a crawler row, or an entity conflict.
- Confirm a non-goals list exists. If everything is priority one, nothing is.
I will not invent a Spurlock audit price on this page. Price the labor against the packet, not against a competitor’s slide. If you cannot describe current state, you are still in audit territory. If the ranked list already exists and nobody ships, you have an operating problem, not a missing PDF.
What belongs in the query panel?
The query panel is the contract with reality. Everything else in the audit is a comment on this list. If the list moves every time someone has a feeling, share of voice is theater.
I use 25–40 prompts. Twelve is a sample. Two hundred is a stall. Semrush’s prompt-tracking guidance is the same idea with a vendor UI: load a set, then watch citation rate on that set (Semrush: which AI search prompts to track). Freeze first. Tool second.
| Prompt job | Buyer is asking | Example shape | Why it belongs |
|---|---|---|---|
| Recommendation | Who should I hire / buy | “best [category] for [ICP]” | Revenue. This is the panel that funds the work |
| Comparison | How do these differ | “[you] vs [competitor]” | Surfaces fact conflicts and missing criteria pages |
| How-to / method | How is this done | “how to [job] without [failure]” | Tests whether method pages are extractable |
| Brand | Who are you | “[brand] founding year” / “what does [brand] do” | Accuracy. Wrong here is a risk, not a vanity miss |
| Local (if applicable) | Who is near me | “[service] near [city]” | NAP / GBP / LocalBusiness alignment |
Tag every prompt. Untagged prompts become vanity.
| Field | Required | Legal values |
|---|---|---|
prompt_id | yes | stable string (rec-04, brand-02) |
job | yes | recommendation / comparison / method / brand / local |
revenue | yes | yes / no |
language / market | if you sell in more than one | ISO-ish label you will keep |
competitor_set_id | yes | the freeze for this window |
success | on the sheet header | citation rate, accuracy, or both — written in a sentence |
Scope freeze procedure:
- Write the ICP in one paragraph. If you cannot, you cannot write recommendation prompts.
- Freeze 3–6 competitors for this window. Adding a seventh mid-audit resets share of voice.
- Draft 25–40 prompts across the five jobs. Park exec one-offs in a parking lot, not in the panel.
- Mark 8–15 as the weekly subset. The full panel is monthly. A ritual that takes a day will die.
- Write the success definition in one sentence. Example: “citation rate on recommendation prompts, plus zero accuracy fails on brand prompts.” Not “more AI traffic.”
- ICP paragraph exists
- Competitor set frozen and dated
- 25–40 prompts with IDs
- Revenue tags exist
- Weekly subset marked
- Vanity brand queries do not outnumber recommendation queries
- Local prompts included only when a service area or GBP exists
A panel of “what is [our slogan]” is not an audit. It is a mirror.
What does the crawler map cover?
Answer engines do not share one bot. A crawler map is the table that stops you from treating “block AI” as a strategy. Training opt-out, search indexing, and user-triggered fetches are different decisions. Mash them and you can disappear from ChatGPT search while congratulating yourself for a privacy win.
OpenAI documents the split: GPTBot for foundation-model training, OAI-SearchBot for ChatGPT search answers, ChatGPT-User for user-initiated fetches that may not honor robots.txt (OpenAI crawler docs). OpenAI also says you can allow OAI-SearchBot and disallow GPTBot; search robots.txt changes can take about 24 hours. Anthropic documents ClaudeBot (training), Claude-SearchBot (search quality), and Claude-User (fetch on a question; Anthropic says it honors robots.txt) (Anthropic Help Center). Google’s Google-Extended product token does not change Search inclusion or ranking (Google common crawlers). Googlebot plus ordinary Search controls still feed AI features in Search (Google: AI features).
| Vendor | Training / model-use | Search / citation crawl | User-triggered fetch |
|---|---|---|---|
| OpenAI | GPTBot | OAI-SearchBot — disallow and you are not shown in ChatGPT search answers | ChatGPT-User — robots.txt may not apply |
| Anthropic | ClaudeBot | Claude-SearchBot | Claude-User |
| Google Search | Googlebot + noindex / nosnippet | Same crawl feeds AI features | N/A as a ranking lever |
| Gemini apps / Vertex grounding | Google-Extended | Separate from Googlebot Search | N/A as a Search ranking lever |
A robots.txt file is a crawl-traffic control, not a hide-from-Search switch. A disallowed URL can still be indexed without a snippet if other pages link to it (Google robots.txt intro). nosnippet can keep you out of Overviews and also out of ordinary snippets. That is a product decision. Put it on the map. Do not discover it in a traffic autopsy.
Map columns I actually fill:
| Column | What you write |
|---|---|
| Bot / token | Exact user-agent or product token |
| Job | training / search index / user fetch / ads safety |
| robots.txt | allow / disallow / not listed |
| Live fetch | 200 / 403 / 404 / JS shell on a key URL |
| CDN / WAF | default allow, or a rule that 403s “GPT” strings |
| Decision | allow for citations, disallow for training, or accept the trade |
| Owner | named person, not “engineering” |
Fetch procedure:
- Pull
/robots.txt. List every AI-related token. Mark tokens that are absent — absence is a decision too. curl -Ithe homepage, About, the money URL, and/llms.txtwith a normal UA and, where you can, the documented bot UAs.- Check HTML, not only headers: answers must exist in the fetched document, not only after a client widget.
- Record
noindex,nosnippet, and canonical on those URLs. - Write the policy in one paragraph: what you allow for search citations vs what you opt out of for training.
-
OAI-SearchBotallowed if ChatGPT search citations are a goal -
Claude-SearchBotandClaude-Userallowed if Claude citations are a goal -
GPTBot/ClaudeBot/Google-Extendeddecided on purpose - WAF is not silently 403ing those user-agents
- About and offer URLs are snippet-eligible
-
/llms.txtis mapped even if you later decide not to ship one
A crawler map that only says “we allow Googlebot” is an SEO leftover. Put the chat products on the sheet.
What goes on the entity sheet?
Models name things. If your brand is not a clear Organization — plus Person and Place where they matter — the model hedges or substitutes a better-defined competitor. The entity sheet is the conflict table. It is not a brand workshop.
sameAs is a schema.org property: a URL that unambiguously indicates the item’s identity — Wikipedia, Wikidata, or the official site (schema.org/sameAs). Google’s Organization docs put sameAs on the homepage or About page to help disambiguate (Google Search Central: Organization). Google expanded Organization support in November 2023 and said it can feed knowledge panels and attribution (Google Search Central Blog). There are no required properties. Add what is true. A wrong LinkedIn or a similarly named company’s Crunchbase row is worse than a short list.
| Field | Site | Schema | Directory / Wikidata | Decision | |
|---|---|---|---|---|---|
| Legal name | pick one string | ||||
| Public / trade name | pick one string | ||||
| Founded | pick one year | ||||
| HQ / service area | pick one posture | ||||
| Primary offer sentence | pick one sentence | ||||
| Founder name + title | pick one title | ||||
| Canonical URL | pick one host | ||||
sameAs list | only URLs that are you |
Minimum proof, common miss:
| Entity | Minimum proof | Common miss |
|---|---|---|
| Organization | Legal name, trade name, canonical URL, logo | Hero slogan instead of a name |
| Person | Founder name, title, one profile URL | “Team” carousel with no names |
| Place | City or service area you will defend | Three cities in the footer, one in schema |
| Offer | Extractable package or posture | “We do it all” as the only sentence |
| Product rename | Old name → redirect or explainer | Ghost SKU still cited from a 2023 roundup |
Sheet procedure:
- Extract facts from About, footer, and Organization JSON-LD. Do not trust the sales deck.
- Diff against LinkedIn, GBP, Crunchbase, Wikidata, and the two directories that already appear in the citation log.
- Run a name-collision check: other companies, people, and products with the same string.
- Inventory
sameAscandidates. Delete URLs you no longer own. - Write the decision column. Unresolved conflicts become tickets on the fix list, not “phase 2 ideas.”
Sample finding language I actually use:
Brand prompt in Perplexity (dated) stated founding year 2014; About and schema state 2017; Crunchbase states 2014. Reconcile to the year you will defend, then update the three directory URLs in the appendix before any content sprint.
Avoid: “Your entity architecture needs work.” That sentence funds nothing.
- One fact sheet, one date
- Conflicts listed with source URLs
- Name collisions documented even if you lose some prompts to a bigger entity
-
sameAscontains only identity URLs - Offer sentence matches the money page and the homepage
- Local NAP is in the sheet if GBP exists
Wrong year plus a citation is worse than no citation. The sheet exists to stop you from teaching two brands.
What belongs in the citation log?
The citation log is the only proof later work moved anything. Run the panel before anyone edits a heading. ChatGPT answers that used search can show inline citations; if they do not, the Sources control under the response lists the links (OpenAI Help: ChatGPT Search). Log both. A mention without a source and a source without a name are different tickets.
Perplexity’s product story is live web search, then a summary with numbered citations you can open (Perplexity Help Center). Google Overviews often do not trigger. Absence of an Overview on a keyword is not a citation failure. Absence of your name when an Overview or chat answer does fire on a buyer prompt is.
| Column | What you write | Legal values |
|---|---|---|
prompt_id | Matches the panel | string |
product | Where you ran it | ChatGPT / Perplexity / AI Overviews / AI Mode / Claude |
date | ISO date | YYYY-MM-DD |
grounding | Search / web on? | yes / no / n/a |
mentioned | Brand string in the answer | yes / no |
cited | Your URL or clear source credit | yes / no + URL |
competitors_named | Who else appeared | list |
cited_domains | Footnotes / Sources | list of hosts |
accuracy | Facts about you | pass / fail / n/a |
failure_note | One line | free text |
archive | Screenshot or export | URL |
Logging procedure:
- Run recommendation and comparison prompts in ChatGPT with search on, in a buyer-relevant mode.
- Run the same IDs in Perplexity.
- Sample Overviews and AI Mode on the priority subset. Record “no Overview” as a state, not as a fail.
- Spot-check Claude with web tools if that is a buyer surface for you.
- Archive the load-bearing failures. Memory is not an archive.
| Outcome | What it means | Ticket type |
|---|---|---|
| Cited + accurate | Keep. Do not “refresh” into mush | Hygiene only |
| Mentioned, not cited | Name without a click path | Citeable passage + corroboration |
| Cited, inaccurate | You taught a wrong fact | Entity / truth-layer first |
| Absent, competitors cited | They have extractable pages or a chorus | Content vs off-site, decided from the leaderboard |
| Cited a zombie URL | Old host, campaign URL, or PDF | Redirect / canonical |
| Wrong entity | Name collision | Disambiguation, not more blog posts |
Build a URL leaderboard from the log, not from a wished-for PR list. Who the products already trust is the corroboration target list. A gap is “this prompt cites three domains and none of them is us, and those pages are extractable tables.” A wish is “we should be in TechCrunch.” Write gaps.
- Log exists before CMS edits
- Mention and citation are separate
- Accuracy fails have a one-line note
- Archives exist for the revenue fails
- Leaderboard is derived from this log
- Product names are specific. “AI” is not a product
If the log lives in chat, it will die. Put it in a sheet with IDs.
How should prioritized fixes be ranked?
The audit is finished when someone can start work on Monday without a second workshop. Rank tickets by accuracy risk, revenue prompt coverage, and effort. Ship truth-layer conflicts before a cluster. Eligibility before a rewrite. A noindex About page is not a copy problem.
Google’s generative-AI guidance repeats the technical floor: indexed, snippet-eligible, people-first pages — no special AI schema (Google: optimizing for generative AI features). FAQPage remains a valid schema.org type for visible Q&A (schema.org/FAQPage). Google’s FAQ rich-result feature no longer appears in Search as of 7 May 2026 (Google Search Central changelog, FAQ rich result). Honest HTML Q&A still belongs. Stuffed FAQ JSON-LD that the visitor cannot see does not.
| Rank | Class | Example | Why it beats a blog post |
|---|---|---|---|
| 0 | Fetch / eligibility | noindex on About, WAF 403 on OAI-SearchBot, nosnippet on the lead | You are not in the candidate pool |
| 1 | Accuracy / identity | Founding year, NAP, offer sentence, sameAs collision | Cited-but-wrong is a liability |
| 2 | Extractability on money URLs | Homepage, one service URL, About fail the 60-word lift | Models invent your offer if you leave it blank |
| 3 | Corroboration gaps | Leaderboard domains that already get cited, and omit you | On-site truth loses to a chorus |
| 4 | Cluster / net-new pages | Definition, comparison, method pages the panel lacks | Volume after the floor is honest |
| 5 | Nice-to-have | llms.txt theater, AI-only markup, extra cities | Do not fund these to avoid rank 0–2 |
Ticket shape I will accept:
- Line ID that points at a log row, crawler row, or entity conflict.
- URL (or “off-site: {host}”).
- Change in one sentence a developer or editor can ship.
- Done means a test: re-fetch, re-prompt, or schema matches About.
- Owner and a week, not a quarter.
| 30-day slice | In | Out |
|---|---|---|
| Eligibility | Index, snippet, robots, WAF | Redesign, new CMS |
| Entity | One fact sheet, directory conflicts you can actually edit | A Wikipedia campaign you do not control |
| Money URLs | Homepage, one offer, About, one FAQ or proof page | Five new service templates |
| Measurement | Named owner, weekly subset, monthly full panel | A 20-slide “AI SEO” deck |
- Top 5 risks named (accuracy, collisions, legal, fetch blocks)
- Top 5 opportunities ranked by revenue × winnability
- Non-goals written
- Each ticket has a line ID back to an artifact
- 30-day slice fits a real calendar, not a hope
-
llms.txtis optional and never the first ticket if About is mush
A 90-day list without a 30-day slice is a brochure. Cut it until it fits a month.
What does a fake AEO audit look like?
The failure mode is not “they missed a heading.” It is a readout that cannot be re-run, or a rewrite that destroys the baseline. I have shipped hundreds of production sites and 500+ automations. The pattern that fails is the same: change the system, then claim the new screenshot as proof.
| Fake | What breaks | Cost | Do this instead |
|---|---|---|---|
| Edit the CMS during “discovery” | You cannot prove movement | You will re-argue the ROI in 30 days | Baseline first. Tickets second |
| Dashboard-only | Sample drift, no accuracy column | You optimize a vendor’s blend | Keep the tool; keep the sheet |
| PDF, no line IDs | Findings cannot become tickets | The file dies in Drive | Every finding becomes a row |
| “Block all AI bots” as the recommendation | Search citations vanish with training opt-out | You paid to disappear from ChatGPT search | Split the crawler map |
| Schema in a tag, copy unchanged | Markup vs HTML conflict | Models get two stories | Fix the sentence, then mark it up |
| Blog calendar as the audit | Volume without extractable leads | You scale the wrong template | Five money URLs, then cluster |
| Unsourced conversion multiplier as ROI | You will not be able to defend the number | Budget later collapses | Judge mention, citation, accuracy, pipeline notes |
Concrete failure I see on audits:
A mid-market site ranks for category keywords. ChatGPT with search recommends three competitors because those competitors have a clear About, a Wikidata row, and a comparison table. The “AEO audit” they already bought was a content calendar and a llms.txt that is a second sitemap. Nobody logged prompts. Two months later they cannot say whether anything moved. That is not slow AEO. That is no audit.
Local version: an HVAC company owns the map pack and still loses “best heat pump near me” prompts because directories and city pages never state services, certifications, and service area in plain sentences. GBP is a Maps problem and an AEO problem. The fake audit ignored NAP because “that is SEO.”
- The proposal forbids CMS edits before the log ships
- Training vs search bots are separate line items
- No invented conversion multiplier appears as a goal
- Local NAP is in scope if GBP exists
- The readout can be re-run by someone who was not in the workshop
If the vendor cannot show you a blank log template on day one, they do not have a method. They have a deck.
How do you know the audit is finished?
Done is not a meeting. Done is a folder you can re-open in 30 days and run again. Acceptance is boring on purpose.
| Gate | Pass | Fail |
|---|---|---|
| Panel freeze | IDs stable; competitor set dated | New prompts added “because the CEO asked” mid-week |
| Crawler map | Decisions written; live fetches recorded | robots.txt copied from a gist, never fetched |
| Entity sheet | Decision column filled | Conflicts listed as “TBD” |
| Citation log | All panel IDs run on at least two products | “We sampled a few” |
| Fix list | Line IDs, owners, 30-day slice, non-goals | Ideas ranked by how exciting they sounded |
| Re-run plan | Named owner, weekly subset, monthly full | “Marketing will check ChatGPT” |
Acceptance procedure:
- Diff the citation log against the panel. Every
prompt_idmust exist. Missing IDs fail the audit. - Pick five revenue fails. Confirm each has a ticket with a URL and a done-means test.
- Pick one crawler decision (example:
OAI-SearchBotallow). Confirm a live fetch, not a comment. - Read the non-goals. If
llms.txtis in week one and About still fails a 60-word lift, reject the ranking. - Schedule the first re-run on the calendar before you close the engagement.
60-word lift test, for the pages the tickets touch: copy the first answer block. Read it to someone who cannot see the H1. If they cannot tell what the page claims, the page is not citeable. That test belongs in “done means.” It does not belong as a substitute for the log.
Search Console: confirm the money URLs are indexed and snippet-eligible. Use the generative-AI impressions report if the property has it. Do not treat a vendor AEO grade as the scoreboard.
- Five artifacts dated
- Line IDs join log → tickets
- Re-run date on a calendar
- Owner named, backup named
- You can explain current state in five minutes without the vendor in the room
If you still need the vendor to interpret the folder, the audit did not transfer. Ask for the files, not another workshop.
When should you wait instead of commissioning one?
An audit is the right buy when you cannot name current state and someone will operate the log afterward. It is the wrong buy when the site cannot be a source, the legal name is mid-rebrand, or nobody will re-run the panel. Size is the wrong filter. Demand surface and staffing are the right ones. The spend gate lives in when AEO is worth it. This section is only the audit-shaped version.
| Condition | Commission the audit | Wait |
|---|---|---|
| Buyers already ask ChatGPT / Perplexity / Overviews before they shortlist | Yes | Relationship-only sales, no online research |
| You cannot name mention vs citation on 10 revenue prompts | Yes | You already have a dated log and ranked tickets |
Sitewide noindex, login wall, or unverified Search Console | After a two-day eligibility patch, or fold that patch into day one | Do not pay for a prompt panel on a private brochure |
| Legal name / merge / rebrand this month | Wait until the name freezes | You will teach two entities |
| Maps / NAP on fire | Include NAP in the packet if you still need the baseline | If GBP is the whole business and it is broken, fix Maps first |
| No owner for the weekly subset | Do not buy | The folder will die |
Week-only constraint — if that is all the calendar you have, do not pretend it is a full audit:
- Freeze 15 prompts, not 40. Tag revenue.
- Run ChatGPT search + Perplexity. Sample Overviews on the revenue subset.
- Map robots.txt and fetch About, homepage, money URL.
- Fill the entity sheet for name, year, offer, city. Ignore Wikidata campaigns.
- Write ten tickets max. Rank 0–2 only. Park the cluster.
Skip in a one-week window: new blog calendar, llms.txt as theater, AI-only schema, Wikipedia, a 90-day content blast, and any invented citation SLA.
I will not put a dollar figure on the audit here. If a vendor quotes a number, ask which of the five files are in the fee. If the answer is “the dashboard,” you are buying a seat.
FAQ
What is an AEO audit and what should it include?
An AEO audit is a dated diagnostic that produces five artifacts: a frozen query panel, a crawler map, an entity sheet, a citation log, and prioritized fixes. It records what ChatGPT, Perplexity, Claude, and Google AI surfaces already say, whether they can fetch you, and which tickets to ship first. A dashboard grade or a blog calendar is not the packet.
How do I measure whether an AEO audit is working?
Re-run the same frozen prompt IDs and compare mention, citation, accuracy, and share of voice against the baseline log. Confirm money URLs stay indexed and snippet-eligible in Search Console, and use the generative-AI report if your property has it. The audit worked if tickets have owners and the next panel is on a calendar — not if a vendor grade went up.
What usually fails first when teams try this?
They change the site before the citation log exists, so every later “win” is unprovable. The next failure is mashing training-bot opt-outs with search crawlers, or shipping a PDF with no line IDs. Freeze the panel, fetch the bots, then write tickets that point at rows.
How long does this take to show results?
The packet itself should exist at the end of the engagement — that is a file delivery, not a citation. Eligibility can be checked in days with URL Inspection once HTML is live. Accurate answers on a frozen panel often take weeks, and citations are not guaranteed; Google’s docs do not promise inclusion. Re-measure at two weeks and eight weeks on the same IDs. Do not invent a day-count SLA.
What should I skip if I only have a week?
Skip the 40-prompt dump, the Wikipedia campaign, the blog calendar, and llms.txt theater. Freeze about 15 revenue-tagged prompts, log ChatGPT search and Perplexity, map robots plus three URLs, fill name/year/offer/city on the entity sheet, and write ten tickets in ranks 0–2. That is a thin audit. It is still a packet.
When is this not worth doing yet?
Wait if the site is not snippet-eligible, Search Console is unverified, the legal name is mid-rebrand, or nobody will own the weekly subset. Fix eligibility and the offer you will actually take, then audit. An AEO audit cannot cite a product that does not exist, and a folder with no operator is a souvenir.
CTA
If you cannot name what models say about you this week, buy the packet — panel, crawler map, entity sheet, citation log, ranked fixes — not a grade.
Lane: /visibility · Book a visibility audit.
What questions does this article answer?
- What is an AEO audit and what should it include?
- An AEO audit is a dated diagnostic that produces five artifacts: a frozen query panel, a crawler map, an entity sheet, a citation log, and prioritized fixes. It records what ChatGPT, Perplexity, Claude, and Google AI surfaces already say, whether they can fetch you, and which tickets to ship first. A dashboard grade or a blog calendar is not the packet.
- How do I measure whether an AEO audit is working?
- Re-run the same frozen prompt IDs and compare mention, citation, accuracy, and share of voice against the baseline log. Confirm money URLs stay indexed and snippet-eligible in Search Console, and use the generative-AI report if your property has it. The audit worked if tickets have owners and the next panel is on a calendar — not if a vendor grade went up.
- What usually fails first when teams try this?
- They change the site before the citation log exists, so every later “win” is unprovable. The next failure is mashing training-bot opt-outs with search crawlers, or shipping a PDF with no line IDs. Freeze the panel, fetch the bots, then write tickets that point at rows.
- How long does this take to show results?
- The packet itself should exist at the end of the engagement — that is a file delivery, not a citation. Eligibility can be checked in days with URL Inspection once HTML is live. Accurate answers on a frozen panel often take weeks, and citations are not guaranteed; Google’s docs do not promise inclusion. Re-measure at two weeks and eight weeks on the same IDs. Do not invent a day-count SLA.
- What should I skip if I only have a week?
- Skip the 40-prompt dump, the Wikipedia campaign, the blog calendar, and `llms.txt` theater. Freeze about 15 revenue-tagged prompts, log ChatGPT search and Perplexity, map robots plus three URLs, fill name/year/offer/city on the entity sheet, and write ten tickets in ranks 0–2. That is a thin audit. It is still a packet.
- When is this not worth doing yet?
- Wait if the site is not snippet-eligible, Search Console is unverified, the legal name is mid-rebrand, or nobody will own the weekly subset. Fix eligibility and the offer you will actually take, then audit. An AEO audit cannot cite a product that does not exist, and a folder with no operator is a souvenir.
Last reviewed
AI Visibility
AI Visibility Cannabis visibility when the ad accounts are banned
Google and Meta will not take the usual spend. The models still answer dispensary, cultivator, and brand questions — if the site can be read and the cart can clear a 21+ order.
AI Visibility When ChatGPT names the franchise, not your shop
Run the best-HVAC-near-me prompt panel. If the model names a national franchise, fix corroboration and entity facts — not another blog calendar.
AI Visibility How do I get cited by Perplexity specifically
Allow PerplexityBot, put a liftable answer and unique numbers in HTML, then log numbered sources on a frozen prompt panel. There is no bought citation rate.
AI Visibility Does Wikipedia or Wikidata help AI recommend my brand
Wikipedia is not a paid AI lever. Notability plus independent sources decide the page; a real Wikidata item helps entity consistency, not a promotional stub.
Will's Journal in your inbox.
What I learned this week building for shops, floors, and houses.
You're on the list.
Sign-up failed — try again.
By subscribing, you agree to the Privacy Policy.