GEO Audit Script

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


What It Checks

Area What is audited
robots.txt 13 AI bots β€” are they allowed or missing?
llms.txt Present at site root? Has content and links?
Schema JSON-LD WebSite, WebApplication, FAQPage, Article detected?
Meta tags Title, description, canonical, Open Graph
Content quality Headings count, statistics, external citations

Usage

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

# --verbose flag is coming soon (currently has no effect)

Flags

Flag Required Description
--url βœ… Yes Full URL of the site to audit (must include https://)
--verbose No Coming soon β€” currently has no effect

Output Explained

Each line in the output maps to a specific check. Here’s how to read it:

β–Έ ROBOTS.TXT
+ βœ… GPTBot          allowed  (OpenAI β€” ChatGPT training)
+ βœ… OAI-SearchBot   allowed  (OpenAI β€” ChatGPT citations)  ← critical
- ❌ ClaudeBot        MISSING                               ← critical
- ❌ PerplexityBot    MISSING                               ← critical
+ βœ… Google-Extended  allowed  (Gemini + AI Overviews)
- ❌ anthropic-ai     MISSING
- ❌ ChatGPT-User     MISSING
β–Έ LLMS.TXT
- ❌ Not found at https://yoursite.com/llms.txt
β–Έ SCHEMA JSON-LD
+ βœ… WebSite schema
- ❌ FAQPage schema missing     ← next step
- ❌ WebApplication 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
- ❌ 1 statistic  (target: 5+)
- ❌ 0 external citations  (target: 3+)

GEO Score Breakdown

The score is calculated from five weighted categories:

Category Max Points How it’s scored
robots.txt 20 Full points if all 3 citation bots (OAI-SearchBot, ClaudeBot, PerplexityBot) are allowed; partial for other bots
llms.txt 20 10pt for presence, 10pt for having H1, sections, and links
Schema JSON-LD 25 10pt WebSite (essential), 10pt FAQPage (high value), 5pt WebApplication (bonus for tools)
Meta tags 20 5pt each: title, description, canonical, OG tags
Content quality 15 4pt for H1, 6pt for numerical statistics, 5pt for external citations

Score bands:

Score Label Meaning
91–100 πŸ† Excellent Fully optimized for AI citations
71–90 βœ… Good Strong foundation, apply Princeton content methods
41–70 ⚠️ Foundation Core elements present, schema/content gaps remain
0–40 ❌ Critical Missing essential elements β€” start with robots.txt and llms.txt

What Each ❌ 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
WebSite schema missing Generate with geo schema --type website 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> β€”
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 55/100 β€” Unoptimized Site

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

⏳ Fetching homepage...  200 OK | 22,418 bytes

β–Έ ROBOTS.TXT ─────────────────────────────────────────────
  βœ… GPTBot          allowed
  ❌ OAI-SearchBot   MISSING   ← critical
  ❌ ClaudeBot        MISSING   ← critical
  ❌ PerplexityBot    MISSING   ← critical
  βœ… Googlebot        allowed

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

β–Έ SCHEMA JSON-LD ─────────────────────────────────────────
  βœ… WebSite schema
  ❌ FAQPage schema missing
  ❌ WebApplication schema missing

β–Έ META TAGS ──────────────────────────────────────────────
  βœ… Title
  βœ… Meta description
  ❌ Canonical URL missing
  ❌ Open Graph tags missing

β–Έ CONTENT QUALITY ────────────────────────────────────────
  βœ… 9 headings
  ❌ 1 statistic  (target: 5+)
  ❌ 0 external citations  (target: 3+)

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

Score 85/100 β€” Optimized Site

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

⏳ Fetching homepage...  200 OK | 50,251 bytes

β–Έ ROBOTS.TXT ─────────────────────────────────────────────
  βœ… GPTBot          allowed  (OpenAI β€” ChatGPT training)
  βœ… OAI-SearchBot   allowed  (OpenAI β€” ChatGPT citations)  ← critical
  βœ… ClaudeBot        allowed  (Anthropic β€” Claude)          ← critical
  βœ… PerplexityBot    allowed  (Perplexity AI)               ← critical
  βœ… Google-Extended  allowed  (Gemini + AI Overviews)
  βœ… anthropic-ai     allowed
  βœ… ChatGPT-User     allowed
  βœ… All critical citation bots configured

β–Έ LLMS.TXT ───────────────────────────────────────────────
  βœ… Found  (6,517 bytes Β· 46 links Β· 6 sections)

β–Έ SCHEMA JSON-LD ─────────────────────────────────────────
  βœ… WebSite schema
  βœ… WebApplication schema
  ⚠️  FAQPage schema missing  ← next step

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

β–Έ CONTENT QUALITY ────────────────────────────────────────
  βœ… 31 headings  Β·  15 statistics  Β·  2 external citations

──────────────────────────────────────────────────────────
  GEO SCORE   [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘]   85 / 100   βœ… GOOD
──────────────────────────────────────────────────────────

The missing FAQPage schema (βˆ’8pt) and one external citation (βˆ’2pt) are the gap between 85 and 100.