Two scores, never blended. A page can rank well in Google yet be uncitable by ChatGPT, Perplexity, Google AI Overviews, Gemini, and Claude — or the reverse.
claude-seo-aimeasures both and tells you exactly what to fix.
🇪🇸 Resumen en español al final · guías completas en docs/es/.
Why
AI answer engines now sit beside classic search as a primary discovery channel, and the rules for being cited differ from the rules for ranking. Most SEO tools treat AI search as a footnote and never write fixes back into your code. This one is built for 2026–2027: honest, agent-native, and able to both diagnose and (opt-in) fix.
It is original work — inspired by the patterns of community SEO tooling but copies no branding, text, or names from any other project. MIT-licensed.
Install
As a Claude Code plugin (recommended):
/plugin marketplace add Hainrixz/claude-seo-ai
/plugin install claude-seo-ai@claude-seo-ai
/reload-plugins
Cross-agent (Cursor, Codex, Gemini CLI, Windsurf…) via Vercel Skills:
npx skills add Hainrixz/claude-seo-ai
The plugin works fully offline (Tier 0, no keys). See Data tiers for optional rendering and API integrations.
Usage
/claude-seo-ai:audit <url|path> [--render auto|static|js] [--vertical auto|saas|blog-publisher|local-business|ecommerce|docs]
/claude-seo-ai:geo <url|path> # AI-search (GEO/AEO) subset → AI Visibility score
/claude-seo-ai:score # recompute/show scores from the last audit
/claude-seo-ai:fix <url|path> [--category schema|meta|robots|sitemap|hreflang|alt|canonical|social|llms] [--dry-run]
audit is read-only and never touches your files. fix previews diffs by default and writes only after you confirm each change. Power users can call any module directly, e.g. /claude-seo-ai:seo-schema-jsonld.
Two scores, never blended
Every audit reports two 0–100 scores with letter bands (A–F) and a one-line interpretation (details):
- Search SEO — weighted toward indexability, Core Web Vitals, on-page, schema.
- AI Visibility (GEO/AEO) — weighted toward answer extractability, schema, fact density, AI-crawler access, entities.
Severity gating caps a score at F if something critical fails (e.g. site-wide noindex). Conditional verticals re-normalize so a blog isn't penalized for lacking Product schema. needs_api checks are excluded from the math and counted separately as score confidence.
How it works
A skill-first, three-layer design (Claude is the runtime; the Node helpers are optional):
- Directive — one of the four command skills (
audit/geo/score/fix). - Orchestration —
seo-orchestratorbuilds a shared PageSnapshot, detects the site vertical, and dispatches read-only specialist subagents in parallel. - Execution — ~20 focused
seo-*modules each emit findings conforming toschema/finding.schema.json— with observed evidence and a runnableverification.reproducecommand. Seedocs/en/architecture.md.
What it audits
A complete 2026 suite, grouped:
| Area | Modules |
|---|---|
| Crawl & index | crawlability/robots (M1), indexability + canonical + site health (M2/M3), rendering CSR/SSR/SSG (M4), sitemaps (M17) |
| Structured data | Tier-1 JSON-LD validate + generate (M5), entity/Knowledge-Graph sameAs (M6) |
| On-page & meta | title/meta/head (M7), mobile (M7b), headings (M7c), social cards (M8), images & alt (M9), internal linking (M10) |
| AI search (GEO/AEO) | answer extractability (M11), fact density & original data (M12), AI-crawler access + llms.txt (M14/M21) |
| Content & trust | E-E-A-T (M16), freshness (M13) |
| Performance | Core Web Vitals — LCP/INP/CLS (M15) |
| Verticals (conditional) | e-commerce/Product (M18), local (M19), international/hreflang (M20) |
Get cited by AI engines
The GEO/AEO modules score how citable your content is: self-contained answer blocks, fact density, original data, entity linking, and whether retrieval bots (OAI-SearchBot, Claude-SearchBot, PerplexityBot) can actually reach and render your page. See references/ai-crawlers.md.
The opt-in fixer
The fixer (skills/fix) is disable-model-invocation: true — Claude can never trigger writes on its own. Only /claude-seo-ai:fix does, and only the one writer subagent (seo-fixer-writer) has Write/Edit; every auditor is read-only by tool allowlist.
- AUTO (deterministic, additive, verifiable): meta viewport/charset/lang, Tier-1 JSON-LD, robots.txt AI directives, canonical, hreflang sets, OG/Twitter cards, image dimensions, XML sitemaps, llms.txt (disclosure-gated).
- PROPOSED (per-item accept): generated
<title>/meta description, answer-block/TL;DR rewrites, internal-link insertions, heading restructuring, generated image alt text. - ADVISORY (never written): content rewrites, Core Web Vitals/performance, rendering strategy, redirects, link-building, Merchant Center/GBP backend.
Dry-run by default · unified-diff preview · git-aware (refuses a dirty tree) · backups under ${CLAUDE_PLUGIN_DATA} · idempotent · re-verifies each change · never writes to .git/secrets/lockfiles (enforced by a PreToolUse hook).
Honesty guardrails
This tool refuses to ship SEO myths:
- llms.txt is generated but scored 0 and labeled low/uncertain impact (~10% adoption; partial vendor support — Anthropic and Perplexity honor it in retrieval, Google does not use it for AI Overviews/AI Mode, OpenAI uncommitted — also useful as IDE-agent context).
- FAQPage/HowTo flagged as deprecated-for-Google-rich-results (still valid for AI extraction) — never counted as a rich-result win.
- Keyword density is not optimized for; stuffing is flagged as a negative.
- No "AI-specific keyword" magic — citation comes from extractable structure, verifiable facts, and authority.
- Lab vs field Core Web Vitals are clearly distinguished (only CrUX field p75 drives the score).
- No fabrication, ever — never invents statistics, citations, dates (no backdating), credentials, or
sameAsidentity links. - Every finding carries a
confidencetier (established/directional/speculative); leaked/inferred guidance (e.g. NavBoost) ships only asdirectional.
Data tiers
| Tier | Needs | Adds |
|---|---|---|
| 0 (default) | nothing | full offline audit via WebFetch + bundled scripts |
| 1 | a render MCP (Playwright/Firecrawl) and/or PSI_API_KEY |
JS rendering for SPAs; real Core Web Vitals (CrUX field data) |
| 2 | Search Console / Merchant Center (OAuth) | indexation state, impressions, feed consistency |
See .mcp.json.example for opt-in render MCPs and docs/en/mcp.md.
Optional scripts
The skills work as pure Markdown; the zero-dependency Node helpers in scripts/ sharpen accuracy and make verification.reproduce runnable (Node ≥ 18, no install step):
node scripts/parse-html.mjs --file tests/fixtures/blog-post.html
node scripts/validate-jsonld.mjs --url https://example.com
node scripts/parse-robots-sitemap.mjs --url https://example.com
node scripts/score.mjs --findings findings.json
node tests/run.mjs # 30 assertions over the fixtures
Project structure
.claude-plugin/ plugin.json + marketplace.json
skills/ 4 command skills (audit, geo, score, fix → /claude-seo-ai:audit …)
+ orchestrator, vertical-detect, crawl-render, seo-score + ~20 audit modules
agents/ 5 subagents (4 read-only auditors + 1 writer)
hooks/ PreToolUse write guard
scripts/ optional zero-dep Node helpers (+ verification)
references/ scoring model, AI crawlers, schema, CWV, routing
schema/ finding + report JSON Schemas, JSON-LD templates
docs/en, docs/es bilingual guides
assets/ pixel-art images
tests/fixtures sample sites for verification
About
Built by Enrique Rocha — I help teams ship AI: consulting, automations, and agents. This is a community, MIT-licensed project: use it, fork it, open issues and PRs (see CONTRIBUTING.md).
- 🌐 tododeia.com
- 📸 Instagram @soyenriquerocha
License
MIT · Claude mascot artwork generated for this project in pixel-art style.
🇪🇸 Resumen (Español)
claude-seo-ai es la herramienta open-source de SEO + búsqueda con IA para Claude Code. Audita cualquier sitio en dos puntajes independientes — Search SEO clásico y Visibilidad en IA (GEO/AEO) — con hallazgos reproducibles, y opcionalmente aplica las correcciones seguras por ti (meta tags, JSON-LD, robots.txt para crawlers de IA, hreflang, sitemaps…), siempre con confirmación previa.
- Instalar:
/plugin marketplace add Hainrixz/claude-seo-ai→/plugin install claude-seo-ai@claude-seo-ai. Cross-agente:npx skills add Hainrixz/claude-seo-ai. - Usar:
/claude-seo-ai:audit <url>·:geo·:score·:fix(vista previa por defecto; nunca escribe sin tu confirmación). - Honestidad: llms.txt se genera pero puntúa 0; FAQ/HowTo marcados como sin rich results; nunca inventa estadísticas, fechas ni enlaces de identidad.
- Sin claves funciona (Tier 0, offline). Render de SPAs y Core Web Vitals reales son opcionales (Tier 1+).
Guías completas en español: docs/es/ · hecho con cariño por tododeia.com.
No comments yet
Be the first to share your take.