--- name: improve-aeo-geo description: Audits a website codebase and makes code changes so AI engines (ChatGPT, Claude, Perplexity, Google AI Overviews) can better discover, parse, quote, and cite the site. Covers structured data, content structure, technical signals, and freshness. --- # Improve Website AEO/GEO Skill You are an expert at AI Engine Optimization (AEO) and Generative Engine Optimization (GEO). When invoked, you analyze the user's website codebase and make concrete, actionable code changes so AI agents — ChatGPT, Claude, Perplexity, Google AI Overviews, and others — can better discover, parse, quote, and cite the site. The web is shifting from human-first to AI-first discovery. AI agents don't browse like humans. They extract structured data, scan for direct answers, and decide in milliseconds whether content is worth citing. This skill makes websites visible to that new audience. ## Workflow When invoked on a codebase, follow this exact sequence: ### Step 1: Baseline - If the user has a live URL, get a baseline score first. Run the **`audit-website-aeo`** skill for a local crawl + scored report, or use the hosted [aeo-audit.sh](https://aeo-audit.sh). If an `aeo_audit_report.md` already exists, read it — its prioritized fixes and weakest pages tell you exactly what to fix. - If no URL is available, proceed with a code-level audit. ### Step 2: Discover the stack - Identify the framework (Next.js, Nuxt, Astro, SvelteKit, Remix, WordPress, Hugo, Jekyll, 11ty, plain HTML) - Find where `` is managed (layout files, document components, plugins, theme files) - Find where content lives (pages, MDX/MD files, CMS templates, components, PHP templates) - Check for existing SEO plugins/packages (next-seo, @astrojs/sitemap, Yoast, etc.) - Check if the site uses SSR, SSG, or client-side rendering ### Step 3: Audit existing state Run through all checks below. For each failing check, note the file(s) to modify and the specific fix. ### Step 4: Fix in priority order Apply changes starting with Priority 1 (blockers), then work down. Make the smallest, most targeted changes needed. ### Step 5: Verify - Re-run the audit (`audit-website-aeo` skill, or [aeo-audit.sh](https://aeo-audit.sh)) and compare against the Step 1 baseline to confirm the score improved - Target: 80+ overall score (B+ grade or higher) --- ## Scoring Model The AEO audit score combines two halves: - **Foundational Score (50%)** — 16 deterministic checks, pass/fail per page, aggregated site-wide (80%+ pages must pass) - **Intelligence Score (50%)** — 6 LLM-evaluated content quality dimensions (0-5 scale) **Final Score** = 50% Foundational + 50% Intelligence → letter grade (A+ = 95-100, A = 90-94, B+ = 80-84, ..., F = below 40). --- ## Priority 1: Blockers (fix these first) ### AI Bot Access (12 pts) robots.txt must NOT block these 9 AI crawlers: `GPTBot`, `ClaudeBot`, `PerplexityBot`, `Google-Extended`, `OAI-SearchBot`, `anthropic-ai`, `ChatGPT-User`, `Bytespider`, `CCBot`. **Fix**: Open `robots.txt` (project root, `public/robots.txt`, or framework equivalent). Remove any `Disallow` rules for these bots. If no robots.txt exists, create one: ```txt User-agent: * Allow: / User-agent: GPTBot Allow: / User-agent: ClaudeBot Allow: / User-agent: PerplexityBot Allow: / User-agent: Google-Extended Allow: / User-agent: OAI-SearchBot Allow: / User-agent: anthropic-ai Allow: / User-agent: ChatGPT-User Allow: / User-agent: Bytespider Allow: / User-agent: CCBot Allow: / Sitemap: https://YOURDOMAIN.com/sitemap.xml ``` If AI bots are blocked, nothing else matters. This is the #1 prerequisite. ### AI-Accessible Meta Tags (6 pts) Pages must NOT have `nosnippet`, `noai`, or `noimageai` in robots meta tags or `X-Robots-Tag` headers. Search for these and remove from public content pages. ### Indexability (10 pts) Pages must NOT have `` on public-facing pages. Search codebase for `noindex` and remove where inappropriate. --- ## Priority 2: High-Impact Structure ### Structured Data / JSON-LD (8 pts) Every page needs at least 1 ` ``` **JSON-LD** (using `useSchemaOrg` from `nuxt-schema-org`): ```vue ``` ### SvelteKit **Metadata** (in `+page.svelte` or `+layout.svelte`): ```svelte Page Title | Brand ``` **JSON-LD**: ```svelte {@html ``} ``` ### Astro **Layout** (`src/layouts/Base.astro`): ```astro --- const { title, description, canonical, publishedDate } = Astro.props --- {title} {publishedDate && } ``` Use `@astrojs/sitemap` for automatic sitemap generation with lastmod. ### WordPress **functions.php** — Add JSON-LD: ```php function add_json_ld_schema() { if (is_singular('post')) { $schema = [ '@context' => 'https://schema.org', '@type' => 'Article', 'headline' => get_the_title(), 'datePublished' => get_the_date('c'), 'dateModified' => get_the_modified_date('c'), 'author' => ['@type' => 'Person', 'name' => get_the_author()], ]; echo ''; } } add_action('wp_head', 'add_json_ld_schema'); ``` **robots.txt** — WordPress manages via Settings > Reading. Add AI bot rules via a plugin (Yoast, Rank Math) or a custom `robots.txt` in the web root. **llms.txt** — Create `.well-known/llms.txt` in the WordPress root directory, or use a plugin/rewrite rule. ### Hugo **Metadata** (in `layouts/partials/head.html`): ```html {{ .Title }} | {{ .Site.Title }} {{ if .Date }}{{ end }} {{ if .Lastmod }}{{ end }} ``` **JSON-LD** (in `layouts/partials/schema.html`): ```html {{ if .IsPage }} {{ end }} ``` Hugo generates RSS at `/index.xml` by default. Use `hugo --minify` for clean HTML output. ### Jekyll / 11ty **Jekyll** — Use `jekyll-seo-tag` and `jekyll-sitemap` gems. Add JSON-LD in `_includes/head.html`. RSS via `jekyll-feed` gem. **11ty** — Use `@11ty/eleventy-plugin-rss` for feeds. Add metadata via Nunjucks/Liquid templates in `_includes/base.njk`. Generate sitemap with a custom template or `eleventy-plugin-sitemap`. ### Remix **Metadata** (in route `meta` function): ```typescript export const meta: MetaFunction = () => [ { title: 'Page Title | Brand' }, { name: 'description', content: 'Descriptive meta description.' }, { property: 'og:title', content: 'Page Title' }, { property: 'og:description', content: 'Social sharing description.' }, { tagName: 'link', rel: 'canonical', href: 'https://yourdomain.com/page' }, ] ``` --- ## Verification Checklist After making changes, confirm: - [ ] robots.txt allows all 9 AI bots - [ ] No noindex, nosnippet, noai on public pages - [ ] Every page has: title (10+ chars), meta description (50+ chars), canonical URL - [ ] Every page has: exactly 1 H1, proper heading hierarchy (H1 → H2 → H3) - [ ] Every page has: JSON-LD with recognized @type - [ ] Every page has: og:title + og:description - [ ] Every page has: 250+ words of body content - [ ] Every page has: 5+ internal links - [ ] 80%+ images have alt text - [ ] `/.well-known/llms.txt` exists and is valid - [ ] RSS/Atom feed exists and is discoverable via `` tag - [ ] Sitemap.xml exists with `` dates - [ ] Publication/modification dates on content pages (meta + visible) - [ ] Content leads with direct answers, not preamble - [ ] FAQ sections on key pages with FAQPage schema - [ ] Statistics and named sources cited inline - [ ] Authoritative quotations included where relevant **Target**: 80+ AEO score (B+ grade or higher). Validate at [aeo-audit.sh](https://aeo-audit.sh). --- ## Research References All statistics in this skill are from verifiable, peer-reviewed or large-scale primary research: | Claim | Source | |---|---| | Quotations = +41% visibility; Statistics = +33%; Cite Sources = +28% | Aggarwal et al., "GEO: Generative Engine Optimization," KDD 2024 ([arXiv](https://arxiv.org/abs/2311.09735)) | | Lower-ranked sites gain up to +115% from GEO optimization | Same GEO paper — sites ranked 4th-5th saw largest gains | | 44.2% of ChatGPT citations from first 30% of content | Kevin Indig, Growth Memo, Feb 2026 — 1.2M AI answers, 18K citations | | Articles 2,900+ words = 5.1 citations vs. 3.2 for <800 words | SE Ranking, Nov 2025 — 2.3M pages, 295K domains | | 120-180 words per section = 70% more ChatGPT citations | Same SE Ranking study | | FAQ sections = 4.9 citations vs. 4.4 without | Same SE Ranking study | | Content updated within 3 months = 6 citations vs. 3.9 for 2+ year old | Same SE Ranking study | | AI cites content 25.7% fresher than organic search | Ahrefs, 2025 — 17M citations across 7 AI platforms | | H2/H3 hierarchy = 2.8x more likely to earn citations | AirOps, 2025 | | 85% of AI Overview citations from last 2 years | Seer Interactive, 2025 | | ChatGPT drives 87.4% of AI referral traffic | Conductor, Nov 2025 — 13.7K domains, 3.3B sessions |