GEO Audit
When a buyer asks ChatGPT, Perplexity, or Google AI Overviews a category question — does THIS brand get named? The GEO Audit answers that with two levels: technical crawlability and citation share-of-voice.
Level 1: Technical audit
Deterministic — no AI calls, no cost. Fetches four well-known URLs in parallel:
| URL | What it reveals |
|---|---|
| Homepage HTML | Meta tags, JSON-LD, content quality, heading hierarchy, alt text, NAP signals |
/llms.txt | Whether the brand has adopted the LLM-readable sitemap standard |
/robots.txt | Whether AI crawlers are blocked |
/sitemap.xml | How many pages are discoverable |
The audit checks 13 on-page signals (title, meta description, H1, word count, text ratio, Open Graph, heading hierarchy, image alt text, internal links, meta robots, Q&A blocks, NAP data, HTML lang). Each rated good / warn / bad.
Scoring: high severity = −25 pts, medium = −12, low = −5. Score starts at 100.
AI crawlers checked
9 crawlers that feed major generative engines:
| Crawler | Engine |
|---|---|
| GPTBot | OpenAI training |
| OAI-SearchBot | ChatGPT search |
| ChatGPT-User | ChatGPT live browsing |
| ClaudeBot | Anthropic |
| PerplexityBot | Perplexity index |
| Google-Extended | Gemini / AI Overviews training |
| CBot | Common Crawl (feeds many models) |
| Applebot-Extended | Apple Intelligence |
| anthropic-ai | Anthropic (legacy) |
Content analysis
The homepage is parsed for signals that affect both classic SEO ranking and whether generative engines can understand + cite the page:
- Title — 30-60 chars (LLMs use titles to understand page identity)
- Meta description — 120-160 chars (summary text AI engines extract)
- Word count — ≥500 (thin content gives AI nothing to cite)
- Text-to-HTML ratio — ≥10% (JS-rendered SPAs look empty to non-JS crawlers)
- Q&A blocks — FAQ-style content is the most-cited format in AI answers
- Image alt text — AI can't "see" images; alt is the only bridge
Level 2: Citation share-of-voice
Answers: when a real buyer asks an LLM a category question, does THIS brand appear?
Seed prompts
From the brand's profile, generate 5-7 natural buyer questions: "best X for Y", "alternatives to competitor", "how do I choose an X". Never the bare brand name.
Ask each prompt
Call Gemini with Google Search grounding → get a web-grounded answer. Then extract: did the answer name this brand? What rank? Which competitors?
Compute share-of-voice
% of prompts where the brand was mentioned. A brand named in 2 of 6 questions has 33% share-of-voice.
Artifacts: closing the gaps
The audit finds gaps. The artifact generator produces copy-paste assets the user can ship on their site — Anomalia proposes, the human ships.
| Kind | Format | Closes issue |
|---|---|---|
faq | markdown + JSON-LD | No FAQ schema + citation gaps |
org_schema | JSON-LD | No Organization structured data |
llms.txt | txt | No /llms.txt |
Each artifact uses the parallel variants + reviewer pattern: 3 variants generated in parallel, a GEO reviewer picks the most citable one. The LLM writes the content; the module assembles the structured format in code.
GET /api/v1/geo/tick — runs weekly for all active brands. Supports ?brand=<slug>.