geo-optimizer

‎Make websites visible and citable by AI search engines (ChatGPT Search, Perplexity, Claude, Google AI Overviews).‎

Make websites visible and citable by AI search engines (ChatGPT Search, Perplexity, Claude, Google AI Overviews). Implements the GEO audit framework plus a citability engine of 47 content checks, 9 of them taken directly from the methods tested in Princeton KDD 2024 research.

چه چیزی می‌گیرید

  • ‎The GEO audit framework plus a citability engine of 47 content checks‎
  • ‎9 of them taken directly from the methods tested in Princeton KDD 2024 research‎

دربارهٔ این اسکیل

Make websites visible and citable by AI search engines (ChatGPT Search, Perplexity, Claude, Google AI Overviews). Implements the GEO audit framework plus a citability engine of 47 content checks, 9 of them taken directly from the methods tested in Princeton KDD 2024 research.

Workflow

Step 1 — Audit the site

Run geo audit first. It scores the site 0–100 across 9 categories and generates a prioritized action list.

geo audit --url https://yoursite.com
geo audit --url https://yoursite.com --format json
geo audit --sitemap https://yoursite.com/sitemap.xml --max-urls 25

Score bands: 0–35 critical · 36–67 foundation · 68–85 good · 86–100 excellent.

Step 2 — Fix AI crawler access (robots.txt)

AI crawlers fall into three tiers: training, search, and user-triggered fetch. To stay eligible to appear in AI search answers, do not block the search-tier bots (this makes the site eligible; it does not guarantee placement or citation):

  • OAI-SearchBot — ChatGPT search
  • PerplexityBot — Perplexity search index
  • Claude-SearchBot — Claude search
  • Googlebot — Google Search, which also feeds AI Overviews and AI Mode. These are governed by Googlebot access and snippet controls (nosnippet, max-snippet), not by Google-Extended

Google-Extended is a robots.txt token, not a separate crawler. It controls whether Google may use content for Gemini/Vertex training and grounding. It does not affect Search or AI Overviews.

To opt out of training while staying open to AI search: Disallow: / for the training bots (GPTBot, ClaudeBot, Google-Extended), and keep Allow: / for OAI-SearchBot, Claude-SearchBot, PerplexityBot, and Googlebot. Whether to block training is a policy choice; vendors treat these settings as independent.

Step 3 — Generate llms.txt

/llms.txt is a proposed convention that gives AI agents a short, machine-readable map of the site. Support varies by system and it does not guarantee AI visibility or citation.

geo llms --base-url https://yoursite.com --site-name "Site Name" --description "One-sentence description." --output ./public/llms.txt

Required structure: H1 (site name) → blockquote (description) → H2 sections with descriptive links. Keep under 200 lines. Full spec: https://llmstxt.org

Step 4 — Inject JSON-LD schema

Add structured data so AI engines understand page types:

geo schema --type website --url https://yoursite.com
geo schema --type faq --url https://yoursite.com/faq
geo schema --type webapp --url https://yoursite.com/tool

Types: website, webapp, faq, article, organization, breadcrumb, howto, review, product.

Structured data helps machines parse the page; it does not guarantee citation.

Step 5 — Optimize content (Princeton GEO methods)

Apply content improvements ordered by the effect reported in the paper's benchmark:

PriorityMethodImpactAction
🔴 1Cite Sources+30–115%Add authoritative external links
🔴 2Add Statistics+40%Include concrete numbers, percentages, dates
🟠 3Quotation Addition+30–40%Expert quotes: "Text" — Name, Role, Org, Year
🟠 4Authoritative Tone+6–12%Confident, expert framing
🟡 5Fluency Optimization+15–30%Clear, direct language
🟡 6Easy-to-Understand+8–15%Define terms, use analogies
🟢 7Technical Terms+5–10%Correct industry terminology
🟢 8Unique Words+5–8%Vary vocabulary deliberately
❌ 9Keyword Stuffing~0% ⚠️Do NOT apply — neutral to negative

Step 6 — Auto-fix all gaps

Generate all missing files at once:

geo fix --url https://yoursite.com --apply
geo fix --url https://yoursite.com --only robots,llms,schema

Creates robots.txt entries, llms.txt, JSON-LD schema, meta tags, and AI discovery endpoints based on audit results.

Scoring

9 categories, 100 points total in rubric v2:

CategoryWhat it measuresPoints (v2)
google_aiGoogle AI readiness checks20
robotsRobots.txt availability and citation-bot access14
schemaJSON-LD validity, richness, types, and visible-name match14
contentHeadings, evidence, links, structure, and image alt coverage14
brand_entityBrand coherence, Knowledge Graph, about/contact, identity, authority12
metaTitle, description, and Open Graph11
llmsllms.txt presence, sections, links, and llms-full.txt6
signalsLanguage, RSS, and freshness6
ai_discoveryai.txt, summary.json, and markdown negotiation3

Google AI readiness checks

Each check includes its Google source URL in audit JSON and recommendations:

llms.txt is useful to other AI agents but is ignored by Google Search. The score is versioned: JSON exposes score_version and per-category score_max; use geo audit --score-version 1 for legacy v1 comparisons. History deltas and regressions compare snapshots only when their score_version matches.

CLI Commands

Main commands covering audit, remediation, analysis, and monitoring (run geo --help for all 16, including access, authority, citations, drift, and perception):

# ── Primary ──
geo audit    --url URL [--format text|json|rich|html|pdf|github|sarif|junit] [--sitemap URL]
geo fix      --url URL [--apply] [--only robots,llms,schema,meta,ai_discovery,content]
geo llms     --base-url URL --site-name NAME --description DESC --output FILE
geo schema   --type TYPE --url URL [--file FILE --inject]

# ── Analysis ──
geo diff       --before URL --after URL
geo history    --url URL
geo coherence  --sitemap URL

# ── Monitoring ──
geo monitor  --domain DOMAIN
geo track    --url URL [--report | --history] [--output FILE]

# ── Utility ──
geo logs       --file LOGFILE
geo snapshots  [--query TEXT --answer-file FILE] [--quality --snapshot-id ID]

Output Formats

8 formats for different workflows:

FormatFlagUse case
text--format textTerminal (default)
json--format jsonProgrammatic consumption, CI pipelines
rich--format richColored terminal with ASCII dashboard
html--format htmlSelf-contained HTML report
github--format githubGitHub Actions annotations
sarif--format sarifCode-scanning tools (SARIF)
junit--format junitCI test reports (JUnit XML)
pdf--format pdfClient-facing reports

Informational Checks

10 non-scoring checks that provide deeper analysis beyond the 0–100 score:

CheckWhat it detects
WebMCP ReadinessSearchAction, labeled forms, tool attributes for AI agents
Negative SignalsCTA overload, thin content, keyword stuffing, boilerplate
Prompt InjectionLLM instructions in content, HTML comment injection, hidden text
Trust Stack5-layer trust score (technical, identity, social, academic, consistency)
RAG Chunk ReadinessContent structure optimized for retrieval-augmented generation
Embedding ProximitySemantic alignment between title, headings, and body content
Content DecayTemporal signals indicating stale or outdated content
Platform CitationPer-platform citation profile (ChatGPT vs Perplexity vs Gemini)
Context WindowContent length optimization for LLM context windows
Instruction ReadinessContent structure that helps LLMs follow extraction patterns

MCP Integration

12 tools and 5 resources for Claude Code, Cursor, Windsurf, and any MCP client:

Tools:

ToolDescription
geo_auditFull GEO audit (score 0–100)
geo_fixGenerate automatic fixes
geo_llms_generateGenerate llms.txt from sitemap
geo_citabilityCitability score (47 content checks)
geo_schema_validateValidate JSON-LD schema
geo_compareCompare GEO scores across sites (max 5)
geo_gap_analysisCompetitive gap analysis with priorities
geo_ai_discoveryCheck AI discovery endpoints
geo_check_botsCheck AI bot access via robots.txt
geo_trust_scoreTrust Stack Score (5-layer, grade A–F)
geo_negative_signalsNegative signals detection
geo_factual_accuracyFactual claims and sourcing audit

Resources: geo://ai-bots · geo://score-bands · geo://methods · geo://changelog · geo://ai-discovery-spec

Plugin System

Extend the audit with custom checks via entry points:

# pyproject.toml
[project.entry-points."geo_optimizer.checks"]
my_check = "my_package:MyCheck"

Plugins implement the AuditCheck protocol (name, description, max_score, run()). Plugin results appear in the audit output but do not affect the base score.

Platform Context Files

Platform-optimized versions of this skill for different AI tools:

PlatformFileSizeLimitHow to use
Claude Projectsai-context/claude-project.md~11,700 charsNo limitProject → Add as Knowledge
ChatGPT Custom GPTai-context/chatgpt-custom-gpt.md~4,500 chars8,000 charsGPT Builder → System prompt
ChatGPT Instructionsai-context/chatgpt-instructions.md~800 chars1,500 chars/fieldSettings → Custom Instructions
Cursorai-context/cursor.mdc~4,200 charsNo limitCopy to .cursor/rules/geo-optimizer.mdc
Windsurfai-context/windsurf.md~4,500 chars12,000 charsCopy to .windsurf/rules/geo-optimizer.md
Kiroai-context/kiro-steering.md~3,300 charsNo limitCopy to .kiro/steering/geo-optimizer.md
# Quick copy commands
mkdir -p .cursor/rules && cp ai-context/cursor.mdc .cursor/rules/geo-optimizer.mdc
mkdir -p .windsurf/rules && cp ai-context/windsurf.md .windsurf/rules/geo-optimizer.md
mkdir -p .kiro/steering && cp ai-context/kiro-steering.md .kiro/steering/geo-optimizer.md

دانلود ZIP