best-aeo-skill audits, fixes, and monitors your website's AI search visibility. It computes a 0–100 composite GEO Score across 4 vectors (Technical 20%, Citability 35%, Schema 20%, Entity 25%), backed by 33 evidence collectors and 100 research-validated rules. Findings are confidence-labeled (Confirmed / Likely / Hypothesis) so you never act on hallucinated issues. Run bestaeo audit --url URL for diagnosis, bestaeo fix --apply to ship.
How to invoke this skill
This skill is triggered when the user asks any of:
- "Run a GEO/AEO audit on [URL]"
- "How do I get cited by ChatGPT/Claude/Perplexity?"
- "Make my site citable by AI search"
- "Generate llms.txt for [URL]"
- "Why is my site not showing up in AI Overviews?"
- "Improve my AI search visibility"
- "Fix my robots.txt for AI bots"
When invoked, it defaults to running audit on the provided URL and presenting a confidence-labeled findings list. Recommendations without confidence labels are never presented.
Architecture overview
┌────────────────────────────────────────────────────────────────────┐ │ best-aeo-skill │ ├────────────────────────────────────────────────────────────────────┤ │ │ │ User intent │ │ ↓ │ │ CLI dispatcher (audit | fix | monitor | compare) │ │ ↓ │ │ Orchestrator │ │ ↓ │ │ ┌─────────────┬─────────────┬─────────────┬─────────────┐ │ │ │ Technical │ Citability │ Schema │ Entity │ │ │ │ agent │ agent │ agent │ agent │ │ │ └─────┬───────┴─────┬───────┴─────┬───────┴─────┬───────┘ │ │ ↓ ↓ ↓ ↓ │ │ 33 evidence collectors (parallel execution) │ │ ↓ ↓ ↓ ↓ │ │ ┌───────────────────────────────────────────────────────┐ │ │ │ Composite Scorer (4-vector weighted sum) │ │ │ │ Profile-adaptive weights · Confidence labeling │ │ │ └────────────────────────────┬───────────────────────────┘ │ │ ↓ │ │ Ranked findings + projected score impact + auto-fix paths │ │ │ └────────────────────────────────────────────────────────────────────┘
The Composite GEO Score
A single 0–100 number computed as a weighted sum of four vectors. Default weights:
| Vector | Default weight | Maps to | Why |
|---|---|---|---|
| Technical Accessibility | 20% | robots.txt, AI bot allowance, JS rendering, CDN access | Princeton: "if crawlers can't reach you, prose doesn't matter" |
| Content Citability | 35% | Statistic density, expert quotes, citations, freshness, fluency | Largest weight. Princeton: +40% from stats, +41% from quotes, +115% from citations |
| Structured Data | 20% | FAQPage, Article, Organization, HowTo, Speakable, Product | FAQPage = highest single-signal citation rate (empirical 41M-citation study) |
| Entity & Brand | 25% | Author credentials, KG links, NAP, ai.txt | Sustained citation requires entity presence, not just one-off content quality |
Score bands
| Band | Range | Meaning | Default action |
|---|---|---|---|
| Excellent | 86–100 | Cited frequently across all engines | Maintain freshness; monitor only |
| Good | 68–85 | Cited regularly; gaps to fix | Apply top-3 fixes |
| Foundation | 36–67 | Indexed but rarely cited | Run full audit + apply all fixes |
| Critical | 0–35 | Effectively invisible to AI search | Start with Technical + Schema, then content |
Interpretation rules
- A score below 36 always indicates a technical or schema problem, not a content problem. Fixing prose first is the wrong order.
- A score 68–85 is the typical post-fix state for a well-built site. Reaching 86+ requires sustained content investment.
- Scores fluctuate ±3 due to crawl variance. Treat changes within ±3 as noise.
Adaptive weights per business profile
Business profiles re-weight the four vectors:
| Profile | Technical | Citability | Schema | Entity |
|---|---|---|---|---|
| Default | 20% | 35% | 20% | 25% |
| SaaS | 18% | 32% | 25% | 25% |
| E-commerce | 18% | 25% | 32% | 25% |
| Publisher / News | 15% | 45% | 20% | 20% |
| Local business | 18% | 25% | 22% | 35% |
| Agency / consultancy | 22% | 35% | 18% | 25% |
| DevTools / API docs | 25% | 30% | 25% | 20% |
| Academic / research | 18% | 50% | 12% | 20% |
Pass --profile saas (or other) to switch.
Sub-skills reference
audit — diagnose
Compute the GEO Score. Return ranked findings with confidence labels.
bestaeo audit --url https://yoursite.com --profile saas --format markdown
- Inputs:
--url,--sitemap,--profile,--format [json|markdown|html|sarif|junit] - Outputs: Composite GEO Score, per-vector breakdown, ranked findings, projected score impact, recommended next sub-skill
fix-content — rewrite
Adds expert quotes (+41% citations), inserts statistics (+40% visibility), embeds source attributions (+115% citation likelihood). Idempotent. Preserves voice. Never invents facts.
bestaeo fix-content --url URL --apply
fix-schema — generate JSON-LD
Auto-creates FAQPage (highest AI citation surface), Article, Organization, HowTo, Speakable, Product, BreadcrumbList, Person schemas. Validates with Schema.org. Outputs ready-to-paste blocks or auto-injects.
bestaeo fix-schema --types faq,article,org
fix-llmstxt — AI catalog
Generates a llmstxt.org-compliant catalog: H1, summary, primary pages, optional reference. Pulls from sitemap or crawl. Anthropic honors this for ClaudeBot.
bestaeo fix-llmstxt --base-url URL
fix-robotstxt — patch robots
Adds explicit Allow: rules for 27 AI bots: GPTBot, ChatGPT-User, ClaudeBot, anthropic-ai, Claude-Web, PerplexityBot, Google-Extended, OAI-SearchBot, Applebot-Extended, CCBot, +17 more. Diff-aware.
bestaeo fix-robotstxt --url URL
compare — benchmark
Side-by-side GEO Score vs 2–5 competitors. Detects per-vector deltas; generates a delta-action list — what to ship next to leapfrog them.
bestaeo compare --you URL --them URL1,URL2
monitor — track
Stores GEO Score history; detects regressions, alerts via webhook/Slack/email. Detects content decay (3.2× citation drop after 30 days). CI/CD-ready.
bestaeo monitor --url URL --threshold 80
Specialist agents
The skill delegates to 5 specialist agents in parallel during full audits. Each owns one vector + monitor for longitudinal:
| Agent | Owns | Evidence collectors |
|---|---|---|
| Technical | 20% | robots_check, ai_bot_access, js_render, cdn_blocking, response_codes, sitemap_check, http2_check, mobile_render, lazyload_check |
| Citability | 35% | statistic_density, quote_extractor, citation_check, freshness_check, readability, passage_score, fluency_check, hedge_density, claim_verifier, rag_chunk_score |
| Schema | 20% | schema_validate, faq_check, article_check, jsonld_lint, speakable_check, product_check, breadcrumb_check, video_check |
| Entity | 25% | entity_extractor, author_check, knowledge_graph, nap_consistency, brand_signal, sameas_links, expertise_signals |
| Monitor | longitudinal | all (re-runs full audit at intervals) |
Evidence collectors (33 total)
Every finding traces back to one or more of these. Output is what determines confidence label.
Technical (9)
robots_check— parses robots.txt; verifies User-agent rulesai_bot_access— tests fetch as GPTBot, ClaudeBot, PerplexityBotjs_render— compares HTML before/after JS executioncdn_blocking— detects Cloudflare/Akamai bot challengesresponse_codes— 200/301/404/500 distributionsitemap_check— XML sitemap presence + freshnesshttp2_check— HTTP/2 or HTTP/3 supportmobile_render— viewport, touch targets, mobile-firstlazyload_check— confirms above-fold content not lazy-loaded
Citability (10)
statistic_density— counts numeric claims per 100 wordsquote_extractor— counts and validates quoted passagescitation_check— counts inline links to external sourcesfreshness_check— extracts dateModified, computes content agereadability— Flesch-Kincaid + sentence variancepassage_score— passage-level extractability (chunk-readiness for RAG)fluency_check— detects awkward AI-rewrite patternshedge_density— counts hedging language ("may", "might", "could")claim_verifier— flags factual claims without citationrag_chunk_score— 250-word chunks ready for retrieval
Schema (7)
schema_validate— Schema.org compliancefaq_check— FAQPage presence + structurearticle_check— Article required fieldsjsonld_lint— JSON-LD syntax validityspeakable_check— Speakable Spec markupproduct_check— Product + AggregateRating + offersbreadcrumb_check— BreadcrumbList navigation
Entity (7)
entity_extractor— NER for Person, Org, Place, Productauthor_check— author markup + credentialsknowledge_graph— sameAs links to Wikidata, Wikipedianap_consistency— Name/Address/Phone matching across surfacesbrand_signal— brand mention frequency in contentsameas_links— verifies all sameAs URLs resolveexpertise_signals— credentials, affiliations, bylines
4 scoring frameworks bundled
CORE-EEAT — 80-item content quality publish-gate
Adopted from aaron-he-zhu/seo-geo-claude-skills.
- Experience (20): firsthand examples, real screenshots, original photos, dated experiences, personal voice, specific use cases, original tests, hands-on insights, primary research…
- Expertise (20): author credentials, named contributors, technical depth, specific terminology, methodology disclosure, source code, primary research links, edge case coverage…
- Authority (20): citing primary sources, linking to authoritative domains, credential markup, organization markup, awards, press mentions, peer-reviewed citations, .edu/.gov sources, sameAs to KG…
- Trust (20): HTTPS, contact info, privacy policy, transparent author bio, last-updated dates, fact-check links, error corrections published, no AI-generated boilerplate…
Pass threshold: 60/80 = pass. 50–59 = revise. <50 = block.
CITE — 40-item domain authority benchmark
- Backlinks (10): editorial inbound links, anchor diversity, follow ratio, referring domain growth, link velocity, contextual placement, .edu/.gov links
- Authority (10): topical authority depth, content cluster coverage, internal linking density, hub-and-spoke architecture, freshness average, expert contribution
- Brand (10): branded search volume, social mention velocity, Wikipedia entry, founder authority, podcast guest appearances, owned media
- Trust (10): historical domain age, ownership transparency, regulatory compliance pages, third-party audits, certifications, customer logos, case studies with metrics
Princeton GEO Tactics — 9 research-validated methods
From Aggarwal et al. KDD 2024.
| # | Method | Impact |
|---|---|---|
| 1 | Cite sources (emphasize external citations) | +115% citation likelihood |
| 2 | Add expert quotes (with attribution + quotation marks) | +41% citation likelihood |
| 3 | Add statistics (numeric claims with sources) | +40% visibility |
| 4 | Improve fluency (natural language, not formulaic) | varies by domain |
| 5 | Authority signaling (credential markup, named contributors) | varies |
| 6 | Easy-to-understand (Flesch-Kincaid grade 8–10) | varies |
| 7 | Keyword stuffing | NEGATIVE — do not use |
| 8 | Topic relevance (one primary topic per page) | varies |
| 9 | Length optimization (appropriate to topic) | varies |
Confidence Rubric — 3 labels
Anti-hallucination labeling. Detailed below at Confidence rubric.
The 100 Rules of AEO/GEO Optimization
Organized by category. Each rule is research-validated, traceable to a citation, and actionable.
Category A: AI Crawler Access (Rules 1–10)
Category B: Content Citability (Rules 11–35)
Category C: Structured Data (Rules 36–55)
Category D: Entity & Brand (Rules 56–75)
Category E: Multi-engine optimization (Rules 76–90)
--engine flag.Category F: Anti-patterns (Rules 91–100)
View / download the full SKILL.md (40 KB) →
Confidence labeling rubric
Every finding output by this skill MUST carry exactly one label.
Confirmed
Directly observed by ≥1 evidence collector. Examples:
- HTTP response code present in trace
- DOM element absent in parsed HTML
- JSON-LD parser returned syntax error
- Author byline element not found
When in doubt about confidence: prefer Likely over Confirmed.
Likely
Strong inference from ≥2 evidence collectors that agree, OR ≥1 collector with high specificity that maps to a known anti-pattern. Examples:
- schema_validate returned no FAQPage AND quote_extractor found Q&A patterns
- statistic_density returned 0.2/100 AND citability_score ≤ 50
- robots.txt allows GPTBot but CDN blocks GPTBot fetch
Hypothesis
LLM judgment, speculative recommendation, or single weak signal. Examples:
- Tone analysis suggesting voice mismatch
- Recommendations for future-proofing emerging engines
- Recommendations relying on user-only-knowable context
NEVER present a Hypothesis as a fix path without flagging human review needed.
Output formats
The skill produces output in 5 formats simultaneously when requested.
Markdown (default)
Human-readable report with score, findings, and projected impact.
JSON
{
"url": "https://example.com",
"geoScore": 64,
"scoreBand": "Foundation",
"vectors": {
"technical": 72,
"citability": 58,
"schema": 48,
"entity": 78
},
"findings": [
{
"id": "F-001",
"severity": "high",
"confidence": "Confirmed",
"category": "schema",
"rule": "Rule 36",
"message": "Missing FAQPage schema",
"evidence": ["schema_validate", "quote_extractor"],
"projectedImpact": 18,
"fixCommand": "bestaeo fix-schema --types faq"
}
]
}
Other formats
- HTML — Visual dashboard with interactive elements. Auto-opens in browser.
- SARIF — Static Analysis Results Interchange Format. For GitHub Code Scanning integration.
- JUnit — For CI/CD pipelines. Each finding as a test case; severity maps to pass/fail.
Common workflows
Workflow 1: First-time audit
bestaeo audit --url https://yoursite.com --profile saas --format markdown
Read top 3 fixes. Apply manually or via:
bestaeo fix --url https://yoursite.com --apply
Workflow 2: CI/CD gate
bestaeo audit --url $DEPLOY_URL --format junit > geo-report.xml bestaeo monitor --url $DEPLOY_URL --threshold 80 --fail-on-drop
Workflow 3: Competitor analysis
bestaeo compare \ --you https://yoursite.com \ --them https://competitor1.com,https://competitor2.com \ --format markdown
Workflow 4: Site-wide audit
bestaeo audit \ --sitemap https://yoursite.com/sitemap.xml \ --max-urls 100 \ --profile publisher \ --format html
Anti-patterns & pitfalls
- Don't fix prose first if technical/schema is below 60. Prose rewriting is high-effort, low-leverage when foundations are missing.
- Don't trust llms.txt as a foundational signal. 0.1% of AI bots fetch it as of 2026.
- Don't ship synthetic FAQ content. AI engines detect mass-generated Q&A.
- Don't auto-fix on production without backup.
fix --applyshould be tested on staging first. - Don't optimize for one engine in isolation. Optimizing only for ChatGPT loses Perplexity and Claude.
- Don't ignore citation decay. A 90-day-old article with declining citation needs refresh, not "more backlinks".
CLI reference
Global flags
--profile— business profile (default, saas, ecommerce, publisher, local, agency, devtools, academic)--format— output format (json, markdown, html, sarif, junit)--output— write to file--engine— target a specific engine (chatgpt, claude, perplexity, gemini, ai-overviews, all)--verbose— full evidence dump--no-color— for piping--ci— CI/CD mode (machine-readable, exit codes)
Sub-commands
bestaeo audit # diagnose bestaeo fix # apply fixes bestaeo fix-content # content rewrites only bestaeo fix-schema # schema generation only bestaeo fix-llmstxt # llms.txt only bestaeo fix-robotstxt # robots.txt only bestaeo compare # head-to-head bestaeo monitor # track over time bestaeo init # initialize config in current directory bestaeo --version bestaeo --help
Citations & references
This skill is built on peer-reviewed research and empirical analysis.
Primary research
- Aggarwal, P., Murahari, V., Rajpurohit, T., Kalyan, A., Narasimhan, K., Deshpande, A. (2024). GEO: Generative Engine Optimization. Proceedings of the 30th ACM SIGKDD Conference on Knowledge Discovery and Data Mining (KDD '24). arxiv:2311.09735 · DOI
- AutoGEO Authors (2026). AutoGEO: Automatic Optimization for Generative Engine Citation. International Conference on Learning Representations (ICLR 2026).
- C-SEO Bench Authors (2025). Conversational SEO Benchmark: Empirical Analysis of Content Manipulation Effectiveness in AI Search.
Empirical analysis
- 199-biotechnologies team (2025). 41M-citation corpus analysis.
- OtterlyAI (2026). llms.txt Adoption Study.
- SE Ranking (2026). llms.txt Audit of 300,000 Domains.
Open-source projects studied (predecessors)
- AgriciDaniel/claude-seo (5.8k ⭐)
- aaron-he-zhu/seo-geo-claude-skills (1.4k ⭐)
- Bhanunamikaze/Agentic-SEO-Skill (458 ⭐)
- Auriti-Labs/geo-optimizer-skill (328 ⭐)
- 199-biotechnologies/claude-skill-seo-geo-optimizer (28 ⭐)
best-aeo-skill v1.0.0 · MIT · 2026 · bestaeoskill.com