GEO Audit

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


What It Checks

Scored categories (100 points total)

Area Max Points What is audited
Google AI readiness 20 Indexing, snippets, canonical, dates, byline, links, viewport, sitemap, and manual generative-AI control check
Robots.txt 14 27 AI bots across 3 tiers (training, search, user). Citation bots explicitly allowed?
llms.txt 6 Present, sections, links, and companion llms-full.txt; useful to other AI agents, ignored by Google Search
Schema JSON-LD 14 WebSite, Organization, FAQPage, Article, schema richness, and visible name match
Meta Tags 11 Title, description, Open Graph complete? Canonical is scored in Google AI readiness
Content 14 H1, statistics, external citations, heading hierarchy, lists/tables, front-loading, image alt coverage
Brand & Entity 12 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 3 .well-known/ai.txt, /ai/summary.json, and markdown negotiation?

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

Google AI readiness - max 20 pts (v2)

Check Points One-line check Source
G-INDEX 5 Final status 200, no noindex directives, and Googlebot is not blocked by robots.txt. https://developers.google.com/search/docs/essentials/technical
G-SNIPPET 5 No restrictive snippet directives; data-nosnippet over 50% fails and over 10% warns. https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag
G-CANONICAL 3 Exactly one absolute canonical in <head> matches the final URL. https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
G-DATES 2 Visible date agrees with datePublished/dateModified and is not in the future. https://developers.google.com/search/docs/appearance/publication-dates
G-BYLINE 2 Visible author or JSON-LD author is present, ideally linked to an author page. https://developers.google.com/search/docs/fundamentals/creating-helpful-content
G-LINKS 1 Internal links use crawlable <a href> elements, with no #/ routes. https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics
G-VIEWPORT 1 Meta viewport is present. https://developers.google.com/search/docs/appearance/page-experience
G-SITEMAP 1 Sitemap: is declared in robots.txt. https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap
G-SD-VISIBLE 2 JSON-LD name or headline appears in visible text; scored in Schema JSON-LD. https://developers.google.com/search/docs/appearance/structured-data/sd-policies
G-GENAI-CONTROL 0 Search Console generative-AI opt-out; manual check. https://developers.google.com/search/docs/fundamentals/ai-optimization-guide

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

# Compare with the legacy v1 rubric
geo audit --url https://yoursite.com --score-version 1

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)
--max-pages No With --url: find the site’s sitemap and audit up to N of its pages (2-500), reporting the average. Same as --sitemap without needing the sitemap URL; text or JSON output only. Fails with exit 1 if no sitemap is found. A home-only score can differ from the page average by several points (observed 2026-10-16 on 14 sites: mean gap 8.9, median 5.9)
--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)
--score-version No Scoring rubric version: 2 (default) or 1 (legacy)

* 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 9 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 9 categories, capped at 100. Rubric v2 is the default; use --score-version 1 for legacy comparisons.

Category Max Points How it’s scored
Google AI readiness 20 G-INDEX 5 + G-SNIPPET 5 + G-CANONICAL 3 + G-DATES 2 + G-BYLINE 2 + G-LINKS 1 + G-VIEWPORT 1 + G-SITEMAP 1; G-GENAI-CONTROL is manual (0pt)
Robots.txt 14 3pt found + 11pt all 4 citation bots allowed. 8pt partial credit if some bots allowed
llms.txt 6 3pt found + 1pt sections + 1pt links + 1pt llms-full.txt; ignored by Google Search
Schema JSON-LD 14 2pt any valid + 2pt richness + 2pt FAQPage + 2pt Article + 3pt Organization + 1pt WebSite + 2pt visible name match
Meta Tags 11 5pt title + 2pt description + 4pt Open Graph; canonical moved to G-CANONICAL
Content 14 2pt H1 + 1pt numbers + 1pt links + 1pt word count + 3pt hierarchy + 2pt lists/tables + 2pt front-loading + 2pt image alt coverage
Brand & Entity 12 3pt coherence + 4pt KG readiness + 3pt about/contact + 1pt geo identity + 1pt topic authority
Signals 6 3pt lang + 1pt RSS + 2pt freshness; valid, not future date
AI Discovery 3 1pt ai.txt + 1pt summary.json + 1pt markdown negotiation (Accept: text/markdown β†’ Content-Type: text/markdown)

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 / 14
  βœ… robots.txt found
  ❌ OAI-SearchBot   MISSING   ← critical
  ❌ ClaudeBot        MISSING   ← critical
  ❌ PerplexityBot    MISSING   ← critical

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

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

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

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

β–Έ BRAND & ENTITY ─────────────────────── 3 / 12
  βœ… 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 / 3
  ❌ No AI discovery endpoints found

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

Score 87/100 β€” Optimized Site

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

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

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

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

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

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

β–Έ BRAND & ENTITY ─────────────────────── 9 / 12
  βœ… 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 / 3
  ❌ No AI discovery endpoints

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