Generative Engine Optimization (GEO) auditing and remediation for Claude Code.
Optimize your web content for AI answer engines — ChatGPT, Perplexity, Claude, Gemini, Google AI Overviews, and Bing Copilot — rather than traditional search rankings.
Generative Engine Optimization (GEO) is the practice of structuring web content so it is more likely to be cited, quoted, and included in answers generated by AI engines. Unlike SEO — which targets SERP position and organic traffic — GEO targets:
- Citation probability in AI-generated answers
- Factual extraction quality by retrieval-augmented models
- Answer inclusion across conversational AI surfaces
- Entity disambiguation in AI knowledge graphs
- Markdown-first accessibility for LLM consumption
GEO is an emerging discipline. Best practices are evolving monthly as AI engines update their ranking and retrieval algorithms. This plugin flags experimental recommendations with 🧪 so you can apply judgment.
| Dimension | SEO | GEO |
|---|---|---|
| Target | Search engine rankings, SERP position | AI engine citations, answer inclusion |
| Surface | Google, Bing results pages | ChatGPT, Perplexity, Claude, Gemini, AI Overviews |
| Metrics | Impressions, CTR, backlinks, keywords | Citation frequency, quote accuracy, entity linking |
| Key files | sitemap.xml, robots.txt |
llms.txt, llms-full.txt, robots.txt (AI bots) |
| Content format | HTML + metadata | Markdown-preferred, self-contained chunks |
| Rendering | Crawlable HTML (JS-tolerant) | Often JS-free; SSR/static critical |
| Structured data | Article, Product, LocalBusiness | FAQPage, HowTo, Person (with sameAs), DefinedTerm |
| Freshness | Matters for some queries | Matters heavily — AI engines de-prioritize stale content |
| E-E-A-T | Ranking signal | Citation-worthiness signal |
| Tone | Keyword-optimized | Conversational, question-anchored |
Overlap: ~40% (technical fundamentals, structured data, HTTPS, semantic HTML, authoritativeness signals).
Unique to GEO: ~60% — llms.txt protocol, AI-bot policy (training vs citation), content chunking for embedding retrieval, markdown-accessible routes, and entity sameAs disambiguation.
Use both plugins together:
/seo-auditfromai-seofor traditional search optimization/geo-auditfrom this plugin for AI answer engines
From the marketplace:
/plugin install ai-geo@claude-code-plugins-devOr add the marketplace first if you haven't:
/plugin marketplace add charlesjones-dev/claude-code-plugins-dev
/plugin install ai-geo@claude-code-plugins-dev| Command | Purpose |
|---|---|
/geo-audit |
Comprehensive GEO audit. Generates a timestamped report in /docs/geo-audit/. |
/geo-fix |
Apply safe remediations from the latest audit. Diff+confirm workflow. Supports --dry-run. |
/geo-llms-txt |
Generate, update, or validate llms.txt and llms-full.txt. |
All skills are interactive — run without arguments and answer the prompts.
/geo-audit
You'll be asked for audit scope (full solution or a sub-directory) and whether to commit audit reports to version control. The skill then:
- Detects your framework (Next.js, Nuxt, TanStack Start, Astro, SvelteKit, Remix, or vanilla HTML).
- Checks Context7 MCP availability for real-time documentation (recommended for GEO).
- Runs ten analysis categories —
llms.txtcompliance, AI crawler access, content structure, citation-worthiness, structured data, semantic chunking, content freshness, entity optimization, conversational alignment, technical accessibility. - Writes a timestamped report to
docs/geo-audit/geo-audit-YYYY-MM-DD-HHMMSS.md. - Updates
docs/geo-audit/README.md(index with trend indicators) anddocs/geo-audit/latest.md. - Prints a concise terminal summary with the top critical issues and AI crawler access summary.
/geo-fix # apply fixes interactively
/geo-fix --dry-run # preview diffs without writing
/geo-fix reads docs/geo-audit/latest.md, classifies findings, and guides you through:
- Safe-auto fixes — batch-confirmed once (add
dateModified, migrate microdata to JSON-LD, add FAQPage wrapper to Q&A prose). - Intent-requiring fixes — separate prompts for training-bot and citation-bot policies before modifying
robots.txt. - Content-requiring fixes — prompts for
sameAsURLs, TL;DR copy, FAQ extraction (never fabricated). - Larger refactors — proposed with per-file diffs (SSR migration, paragraph restructuring, heading rewording).
/geo-llms-txt
Interactive skill with four modes: generate, update, validate, or produce llms-full.txt. Detects your framework and places the file at the correct static-asset path (or emits a route handler for dynamic generation).
- Presence of
/llms.txtand/llms-full.txt - Spec compliance (H1 title, blockquote description, markdown throughout)
- Link reachability and
.md-companion preference - Staleness vs current content
- Per-bot directives parsed from
robots.txt - Training bots flagged separately from citation bots
- Analysis commentary on whether the policy matches likely intent
- Q&A patterns with direct answers
- Definitional opening sentences
- Self-contained paragraphs (flags context-dependent phrasing)
- Lists, tables, and inline statistic attribution
- Visible author attribution + credentials
- E-E-A-T signals (About, Contact, Privacy, Terms)
- Publication and last-modified dates
- Outbound links to authoritative sources
FAQPage,HowTo— heavily cited by AI enginesPersonandOrganizationwithsameAsfor entity disambiguationArticlewithspeakablespecification 🧪DefinedTerm,ClaimReview,Datasetfor specialized content 🧪
- Heading hierarchy creates self-contained sections
- Paragraph length and topic sentences
<section>/<article>landmarks
article:modified_timeOpen Graph tagdateModifiedin JSON-LD- Visible "Last updated" indicators
sameAslinks to Wikipedia/Wikidata, LinkedIn, GitHub, Crunchbase, ORCID- Consistent entity naming
- Disambiguation for ambiguous terms
- Question-shaped H2/H3 headings
- Natural-language phrasing over keyword stuffing
- Long-tail conversational patterns
- Server-side rendered or static content (not client-only)
- Clean HTML (not deeply nested wrapper divs)
- Proper HTTP status codes, HTTPS, fast response times
| Bot | Operator | Purpose |
|---|---|---|
GPTBot |
OpenAI | Model training |
ClaudeBot / anthropic-ai |
Anthropic | Model training |
Google-Extended |
Gemini training (also affects citations) | |
Applebot-Extended |
Apple | Apple Intelligence training |
CCBot |
Common Crawl | Training corpus used by many |
Bytespider |
ByteDance | Training |
Amazonbot |
Amazon | Training + indexing |
FacebookBot / meta-externalagent |
Meta | Training |
Omgilibot / Omgili |
Webz.io | Training corpus |
| Bot | Operator | Purpose |
|---|---|---|
ChatGPT-User |
OpenAI | ChatGPT browsing and citations |
OAI-SearchBot |
OpenAI | SearchGPT index |
PerplexityBot |
Perplexity | Index |
Perplexity-User |
Perplexity | Live citation fetch |
Claude-Web / Claude-User |
Anthropic | Claude browsing |
Google-Extended |
Gemini citations (also training) |
Common intentional pattern: block training bots, allow citation bots. Lets you be cited by AI answer engines without contributing to training data. /geo-fix prompts these preferences separately.
llms.txt is a markdown file placed at your web root (/llms.txt) that provides a concise, LLM-friendly index of your site. Proposed by Jeremy Howard in 2024 at https://llmstxt.org/. It is to LLMs what sitemap.xml is to search engines — but markdown-native and curated rather than exhaustive.
Minimal structure:
# Site Name
> One-sentence description of the site.
## Section
- [Page title](https://example.com/page.md): one-line summary.
- [Another page](https://example.com/another.md): one-line summary.
## Optional
- [Secondary resource](https://example.com/secondary.md): summary.Rules:
- H1 title required.
- Blockquote description required immediately after H1.
- H2 section headers organize the index.
- Bulleted links with descriptive text and a one-line summary.
- The
## Optionalsection (if present) is recognized as lower-priority. - Prefer linking to
.mdcompanion URLs when the content is available in markdown — AI engines quote markdown more accurately than extracted HTML.
llms-full.txt is a comprehensive companion file containing the full markdown content of the linked pages, suitable for direct retrieval. Use it for sites where licensing and bandwidth permit exposing full text to AI engines.
| What LLMs often do | What this plugin enforces |
|---|---|
| Treat GEO as a synonym for SEO | Distinct discipline with 60% non-overlap |
| Block all AI crawlers wholesale | Prompt separately for training vs citation intent |
Dismiss llms.txt as "not a standard" |
Recognized emerging protocol — generate and validate |
| Suggest HTML-only content is fine for AI | Flag client-only rendering as critical; prefer markdown companions |
| Treat structured data as optional | FAQPage, Person sameAs, dateModified are core GEO signals |
| Skip content-freshness checks | Flag missing dateModified and article:modified_time on evergreen content |
Fabricate sameAs URLs |
Always prompt user — never invent identity URLs |
| Ignore conversational phrasing | Flag keyword-stuffed H2/H3 in favor of question-shaped headings |
| Recommend cloaking for AI bots | Refuse — violates every major AI-engine policy |
Reports are written to /docs/geo-audit/ (or your project's existing docs directory if one is detected):
docs/geo-audit/
├── README.md # Index with trend indicators
├── latest.md # Copy of most recent audit
├── geo-audit-2026-04-17-143022.md # Timestamped reports
├── geo-audit-2026-04-10-091544.md
└── ...
Each timestamped report is immutable — new runs never overwrite prior audits. latest.md always reflects the most recent run (file copy, not symlink, for cross-platform compatibility).
GEO evolves faster than SEO. This plugin works best with Context7 MCP for up-to-date documentation on:
llms.txtspecification updates- AI bot documentation (OpenAI, Anthropic, Google, Perplexity)
- Latest Schema.org types (FAQPage, HowTo, DefinedTerm, ClaimReview)
- Framework meta/head APIs
Install:
claude mcp add context7 -- npx -y @upstash/context7-mcpWithout Context7 the plugin falls back to training-data knowledge and flags experimental items with 🧪 more liberally so you can apply judgment.
ai-geo and ai-seo are independent but complementary:
- Use
/seo-auditfor traditional search engine optimization (Google, Bing). - Use
/geo-auditfor AI answer engine optimization (ChatGPT, Perplexity, Claude, Gemini, AI Overviews). - Where checks overlap (structured data, semantic HTML, authoritativeness), the plugins cross-reference rather than duplicate.
- Run both in sequence for full coverage:
/seo-audit /geo-audit
- Name:
ai-geo - Version: 1.0.0
- Author: Charles Jones
- License: MIT
- Repository: https://github.com/charlesjones-dev/claude-code-plugins-dev
Issues and pull requests welcome at https://github.com/charlesjones-dev/claude-code-plugins-dev.
GEO is emerging. If you have empirical data on what improves citation frequency in specific AI engines, please open an issue — heuristics in this plugin can be updated as the field matures.
MIT — see LICENSE.