GEO Audit

geo audit scores your website from 0 to 100 across 8 GEO categories and tells you exactly what to fix.


What It Checks

Scored categories (100 points total)

Area Max Points What is audited
Robots.txt 18 27 AI bots across 3 tiers (training, search, user). Citation bots explicitly allowed?
llms.txt 18 Present, has H1 + blockquote, sections, links, depth. Companion llms-full.txt?
Schema JSON-LD 16 WebSite, Organization, FAQPage, Article. Schema richness (5+ attributes)?
Meta Tags 14 Title, description, canonical, Open Graph complete?
Content 12 H1, statistics, external citations, heading hierarchy, lists/tables, front-loading?
Brand & Entity 10 Brand coherence, Knowledge Graph links (Wikipedia/Wikidata/LinkedIn), about page, geo signals, topic authority
Signals 6 <html lang>, RSS/Atom feed, dateModified freshness?
AI Discovery 6 .well-known/ai.txt, /ai/summary.json, /ai/faq.json, /ai/service.json?

Bonus checks (informational, no score impact)

Check What it detects
CDN Crawler Access Does Cloudflare/Akamai/Vercel block GPTBot, ClaudeBot, PerplexityBot?
JS Rendering Is content accessible without JavaScript? SPA framework detection
WebMCP Readiness Chrome WebMCP support: registerTool(), toolname attributes, potentialAction schema
Negative Signals 8 anti-citation signals: CTA overload, popups, thin content, keyword stuffing, missing author, boilerplate ratio
Prompt Injection Detection 8 manipulation patterns: hidden text, invisible Unicode, LLM instructions, HTML comment injection
Trust Stack Score 5-layer trust aggregation (Technical, Identity, Social, Academic, Consistency) β€” grade A-F

Plus a separate Citability Score (0-100) measuring content quality across 47 methods.


Usage

# Standard audit
geo audit --url https://yoursite.com

# Save the snapshot in local history
geo audit --url https://yoursite.com --save-history

# Fail CI if the score regressed vs the previous saved snapshot
geo audit --url https://yoursite.com --regression

# Choose output format
geo audit --url https://yoursite.com --format rich

# Batch audit from sitemap
geo audit --sitemap https://yoursite.com/sitemap.xml --max-urls 25

# Batch audit as JSON
geo audit --sitemap https://yoursite.com/sitemap.xml --format json

Flags

Flag Required Description
--url Yes* Full URL of the site to audit (must include https://)
--sitemap Yes* XML sitemap URL to audit multiple pages in one run
--format No Output format: text (default), json, rich, html, sarif, junit, github
--max-urls No Maximum number of sitemap URLs to audit in batch mode (default: 50)
--concurrency No Concurrent page audits in batch mode (default: 5)
--save-history No Save the URL audit in local history (~/.geo-optimizer/tracking.db)
--regression No Exit with code 1 if the score dropped vs the previous saved snapshot
--retention-days No Retention window for local snapshots (default: 90)

* Use either --url or --sitemap.

Output Formats

Format Use case
text Human-readable terminal output (default)
json Machine-readable, pipe to jq or downstream tools
rich Colored terminal with ASCII art dashboard
html Self-contained HTML report (shareable)
sarif GitHub Code Scanning (upload to Security tab)
junit Jenkins, GitLab CI test reports
github GitHub Actions step summary annotations

When using --sitemap, only text and json are supported. --save-history and --regression currently apply only to --url mode.


Output Explained

Each section in the output maps to one of the 8 scoring categories:

β–Έ ROBOTS.TXT
+ βœ… GPTBot          allowed  (OpenAI β€” ChatGPT training)
+ βœ… OAI-SearchBot   allowed  (OpenAI β€” ChatGPT citations)  ← critical
- ❌ ClaudeBot        MISSING                               ← critical
- ❌ PerplexityBot    MISSING                               ← critical
β–Έ LLMS.TXT
- ❌ Not found at https://yoursite.com/llms.txt
β–Έ SCHEMA JSON-LD
+ βœ… WebSite schema
+ βœ… Organization schema
- ❌ FAQPage schema missing
- ❌ Article schema missing
β–Έ META TAGS
+ βœ… Title (62 chars)
+ βœ… Meta description (142 chars)
+ βœ… Canonical URL
- ❌ Open Graph tags missing (og:title, og:image)
β–Έ CONTENT QUALITY
+ βœ… 18 headings Β· H2+H3 hierarchy
- ❌ 1 statistic  (target: 5+)
- ❌ 0 external citations  (target: 3+)
+ βœ… Lists/tables present
β–Έ BRAND & ENTITY
+ βœ… Brand name coherent across title/schema/OG
- ❌ No sameAs Knowledge Graph links
+ βœ… About page found
β–Έ SIGNALS
+ βœ… <html lang="en">
- ❌ No RSS/Atom feed
- ❌ No dateModified freshness signal
β–Έ AI DISCOVERY
- ❌ /.well-known/ai.txt missing
- ❌ /ai/summary.json missing

GEO Score Breakdown

The score is the sum of all points earned across 8 categories, capped at 100.

Category Max Points How it’s scored
Robots.txt 18 5pt found + 13pt all 4 citation bots allowed (OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot). 10pt partial credit if some bots allowed
llms.txt 18 5pt found + 2pt H1 + 1pt blockquote + 2pt sections + 2pt links + 2pt depth (1k words) + 2pt high depth (5k) + 2pt llms-full.txt
Schema JSON-LD 16 2pt any valid + 3pt richness (5+ attrs) + 3pt FAQPage + 3pt Article + 3pt Organization + 2pt WebSite
Meta Tags 14 5pt title + 2pt description + 3pt canonical + 4pt Open Graph
Content 12 2pt H1 + 1pt numbers + 1pt links + 2pt word count + 2pt hierarchy + 2pt lists/tables + 2pt front-loading
Brand & Entity 10 3pt coherence + 3pt KG readiness + 2pt about/contact + 1pt geo identity + 1pt topic authority
Signals 6 3pt lang + 2pt RSS + 1pt freshness
AI Discovery 6 2pt ai.txt + 2pt summary.json + 1pt faq.json + 1pt service.json

Score bands:

Score Label Meaning
86-100 Excellent Fully optimized for AI citation engines
68-85 Good Well-optimized, minor gaps remain
36-67 Foundation Partially visible β€” key signals missing
0-35 Critical AI engines cannot reliably discover or cite you

What Each Problem Means and How to Fix It

Problem Fix Docs
AI bot MISSING in robots.txt Add the bot’s User-agent block with Allow: / AI Bots Reference
llms.txt not found Generate with geo llms, place at site root Generating llms.txt
FAQPage schema missing Generate with geo schema --type faq Schema Injector
Organization schema missing Generate with geo schema --type organization Schema Injector
Meta description missing Add <meta name="description" content="..."> to <head> β€”
Open Graph tags missing Add og:title, og:description, og:image to <head> β€”
No KG sameAs links Add sameAs to Organization schema (Wikipedia, LinkedIn, etc.) Scoring Rubric
AI Discovery endpoints missing Use geo fix to generate .well-known/ai.txt and /ai/*.json β€”
Low statistics count Add specific numbers, %, dates to page content GEO Methods
0 external citations Link to authoritative sources (papers, .gov, .edu) GEO Methods

Example Outputs

Score 52/100 β€” Unoptimized Site

╔══════════════════════════════════════════════════════════╗
  GEO AUDIT β€” https://example.com
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

β–Έ ROBOTS.TXT ─────────────────────────── 5 / 18
  βœ… robots.txt found
  ❌ OAI-SearchBot   MISSING   ← critical
  ❌ ClaudeBot        MISSING   ← critical
  ❌ PerplexityBot    MISSING   ← critical

β–Έ LLMS.TXT ───────────────────────────── 0 / 18
  ❌ Not found at https://example.com/llms.txt

β–Έ SCHEMA JSON-LD ─────────────────────── 4 / 16
  βœ… WebSite schema (3 attributes)
  ❌ FAQPage schema missing
  ❌ Article schema missing
  ❌ Organization schema missing

β–Έ META TAGS ──────────────────────────── 10 / 14
  βœ… Title Β· Meta description Β· Canonical
  ❌ Open Graph tags missing

β–Έ CONTENT QUALITY ────────────────────── 5 / 12
  βœ… H1 present Β· 9 headings
  ❌ 1 statistic  (target: 5+)
  ❌ 0 external citations  (target: 3+)

β–Έ BRAND & ENTITY ─────────────────────── 3 / 10
  βœ… Brand name coherent
  ❌ No sameAs Knowledge Graph links
  ❌ No about/contact pages

β–Έ SIGNALS ────────────────────────────── 3 / 6
  βœ… <html lang="en">
  ❌ No RSS/Atom feed

β–Έ AI DISCOVERY ───────────────────────── 0 / 6
  ❌ No AI discovery endpoints found

──────────────────────────────────────────────────────────
  GEO SCORE   [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘]   52 / 100   ⚠️  FOUNDATION
──────────────────────────────────────────────────────────

Score 87/100 β€” Optimized Site

╔══════════════════════════════════════════════════════════╗
  GEO AUDIT β€” https://optimized-site.com
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

β–Έ ROBOTS.TXT ─────────────────────────── 18 / 18
  βœ… All 4 citation bots configured
  βœ… 27 AI bots explicitly allowed

β–Έ LLMS.TXT ───────────────────────────── 16 / 18
  βœ… Found  (6,517 bytes Β· 46 links Β· 6 sections)
  ❌ llms-full.txt missing (βˆ’2pt)

β–Έ SCHEMA JSON-LD ─────────────────────── 14 / 16
  βœ… WebSite Β· Organization Β· Article (8 attributes)
  ❌ FAQPage schema missing (βˆ’3pt)

β–Έ META TAGS ──────────────────────────── 14 / 14
  βœ… Title Β· Meta description Β· Canonical Β· OG tags

β–Έ CONTENT QUALITY ────────────────────── 12 / 12
  βœ… 31 headings Β· H2+H3 hierarchy Β· 15 statistics Β· 4 citations
  βœ… Lists/tables Β· Front-loading

β–Έ BRAND & ENTITY ─────────────────────── 9 / 10
  βœ… Brand coherent Β· KG links (Wikipedia, LinkedIn)
  βœ… About + Contact pages
  ❌ No geo identity signal (βˆ’1pt)

β–Έ SIGNALS ────────────────────────────── 4 / 6
  βœ… <html lang="en"> Β· RSS feed
  ❌ No dateModified freshness (βˆ’1pt)

β–Έ AI DISCOVERY ───────────────────────── 0 / 6
  ❌ No AI discovery endpoints

──────────────────────────────────────────────────────────
  GEO SCORE   [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘]   87 / 100   πŸ† EXCELLENT
──────────────────────────────────────────────────────────