Web Optimization (SEO · GEO · AEO)
This skill treats SEO, GEO, and AEO as three lenses over one shared
body of web-optimization practice. It supports two workflows: Audit an
existing page, and Generate new optimized content.
The three lenses (what each optimizes for)
| Lens |
Optimizes for |
Load file |
| SEO |
Google/Bing ranking (blue links) |
references/seo.md |
| GEO |
LLM synthesis (ChatGPT, Perplexity, AI Overviews) |
references/geo.md |
| AEO |
Answer engines, featured snippets, voice |
references/aeo.md |
Shared support files:
references/schema.md — JSON-LD patterns (load whenever structured data is involved).
references/scoring.md — the rubric and priority weighting used by both workflows.
Progressive disclosure: Do NOT read every reference up front. Read only the
lens file(s) relevant to the request, plus scoring.md for audits and
schema.md when structured data is in play.
Workflow A — Audit
Use when given a URL or a local content file and asked to evaluate/improve it.
- Acquire the content.
- URL: prefer
python scripts/audit.py <url> for deterministic, objective
checks (returns JSON). Also fetch the rendered content to judge quality.
- Local file (
.html/.md): read it directly; run audit.py --file <path>.
- Apply the three lenses. Read
references/seo.md, geo.md, aeo.md and
evaluate the content against each. Fold in the JSON facts from audit.py.
- Score & prioritize using
references/scoring.md (P0 blocking → P3 nice-to-have).
- Emit the report using
assets/audit-report-template.md: every finding =
issue · lens · impact · concrete fix. Lead with the prioritized action list.
Workflow B — Generate
Use when given a topic/brief + target keyword or user intent and asked to
produce new content.
- Clarify intent — target query, audience, and primary lens emphasis if any
(default: optimize for all three).
- Draft applying all three lenses: answer-first structure (AEO), keyword/
intent coverage and clean heading hierarchy (SEO), high information density
with concrete measurable claims (GEO).
- Attach structured data — pick the right JSON-LD from
assets/schema-templates/ per references/schema.md (Article + FAQPage are
the common pair).
- Produce an llms.txt entry from
assets/llms-txt-template.md.
- Output the content + JSON-LD + llms.txt entry + a short "why this is
optimized" rationale mapping choices back to the three lenses.
Workflow C — Fix (interactive step-by-step)
Use when the user says "fix [URL]", "fix the issues", or "apply the fixes"
after an audit — or wants to be guided through improvements interactively.
- Run or recall the audit. If an audit was just completed, use those findings.
Otherwise run Workflow A first silently, then begin fixing.
- Load
references/fix-playbook.md. It maps every finding type to the
minimum question(s) to ask and what to generate.
- Work P0 → P1 → P2 → P3, one fix per turn:
- State: what you're fixing and why (one line).
- Ask: the minimum question(s) needed (often zero — derive from fetched content).
- Generate: the complete, ready-to-paste output (JSON-LD block, file content,
rewritten copy, HTML snippet, diff of tag changes).
- Confirm: "Fix N of M done — move to the next one? (or say skip / stop)"
- Maintain a session checklist (✅ done / ⏭ skipped / ⬜ pending) and show
it at the top of each turn so the user always knows where they are.
- On "stop" or "done": show the full checklist summary and remind the user
of any skipped items.
Key principle: Never ask the user to write anything manually. Every output
should be copy-paste ready. If you need a number or URL you can't derive,
ask for that one thing — then generate everything else yourself.
Quick rules of thumb
- Information density beats word count. Replace hedges ("might be fast") with
measurable claims ("sub-50ms p95 latency"). LLMs cite specifics.
- Answer the question in the first sentence, then elaborate — this serves
snippets, voice, and LLM extraction simultaneously.
- Structure for two readers: a human operator and a natural-language parser.
Tables, lists, and JSON-LD help the parser without hurting the human.
- Authority is distributed. Off-domain mentions (GitHub, Reddit, citations)
matter for GEO trust, not just on-page factors.
1---2name: web-optimization3description: Audit or generate web content optimized for traditional search (SEO), AI generative answer engines like ChatGPT/Perplexity/Google AI Overviews (GEO), and answer engines / featured snippets / voice (AEO). Use when the user asks to improve a page's ranking or AI-citability, run an SEO/GEO/AEO audit of a URL or file, add JSON-LD schema, create an llms.txt, or write new content that is search- and LLM-friendly.4license: MIT5---67# Web Optimization (SEO · GEO · AEO)89This skill treats **SEO**, **GEO**, and **AEO** as three lenses over one shared10body of web-optimization practice. It supports two workflows: **Audit** an11existing page, and **Generate** new optimized content.1213## The three lenses (what each optimizes for)1415| Lens | Optimizes for | Load file |16|------|---------------|-----------|17| SEO | Google/Bing ranking (blue links) | `references/seo.md` |18| GEO | LLM synthesis (ChatGPT, Perplexity, AI Overviews) | `references/geo.md` |19| AEO | Answer engines, featured snippets, voice | `references/aeo.md` |2021Shared support files:22- `references/schema.md` — JSON-LD patterns (load whenever structured data is involved).23- `references/scoring.md` — the rubric and priority weighting used by both workflows.2425> **Progressive disclosure:** Do NOT read every reference up front. Read only the26> lens file(s) relevant to the request, plus `scoring.md` for audits and27> `schema.md` when structured data is in play.2829## Workflow A — Audit3031Use when given a **URL or a local content file** and asked to evaluate/improve it.32331. **Acquire the content.**34 - URL: prefer `python scripts/audit.py <url>` for deterministic, objective35 checks (returns JSON). Also fetch the rendered content to judge quality.36 - Local file (`.html`/`.md`): read it directly; run `audit.py --file <path>`.372. **Apply the three lenses.** Read `references/seo.md`, `geo.md`, `aeo.md` and38 evaluate the content against each. Fold in the JSON facts from `audit.py`.393. **Score & prioritize** using `references/scoring.md` (P0 blocking → P3 nice-to-have).404. **Emit the report** using `assets/audit-report-template.md`: every finding =41 *issue · lens · impact · concrete fix*. Lead with the prioritized action list.4243## Workflow B — Generate4445Use when given a **topic/brief + target keyword or user intent** and asked to46produce new content.47481. **Clarify intent** — target query, audience, and primary lens emphasis if any49 (default: optimize for all three).502. **Draft** applying all three lenses: answer-first structure (AEO), keyword/51 intent coverage and clean heading hierarchy (SEO), high information density52 with concrete measurable claims (GEO).533. **Attach structured data** — pick the right JSON-LD from54 `assets/schema-templates/` per `references/schema.md` (Article + FAQPage are55 the common pair).564. **Produce an llms.txt entry** from `assets/llms-txt-template.md`.575. **Output** the content + JSON-LD + llms.txt entry + a short "why this is58 optimized" rationale mapping choices back to the three lenses.5960## Workflow C — Fix (interactive step-by-step)6162Use when the user says **"fix [URL]"**, **"fix the issues"**, or **"apply the fixes"**63after an audit — or wants to be guided through improvements interactively.64651. **Run or recall the audit.** If an audit was just completed, use those findings.66 Otherwise run Workflow A first silently, then begin fixing.672. **Load `references/fix-playbook.md`.** It maps every finding type to the68 minimum question(s) to ask and what to generate.693. **Work P0 → P1 → P2 → P3, one fix per turn:**70 - State: what you're fixing and why (one line).71 - Ask: the minimum question(s) needed (often zero — derive from fetched content).72 - Generate: the complete, ready-to-paste output (JSON-LD block, file content,73 rewritten copy, HTML snippet, diff of tag changes).74 - Confirm: "Fix N of M done — move to the next one? (or say skip / stop)"754. **Maintain a session checklist** (✅ done / ⏭ skipped / ⬜ pending) and show76 it at the top of each turn so the user always knows where they are.775. **On "stop" or "done"**: show the full checklist summary and remind the user78 of any skipped items.7980> **Key principle:** Never ask the user to write anything manually. Every output81> should be copy-paste ready. If you need a number or URL you can't derive,82> ask for that one thing — then generate everything else yourself.8384## Quick rules of thumb8586- **Information density beats word count.** Replace hedges ("might be fast") with87 measurable claims ("sub-50ms p95 latency"). LLMs cite specifics.88- **Answer the question in the first sentence**, then elaborate — this serves89 snippets, voice, and LLM extraction simultaneously.90- **Structure for two readers**: a human operator and a natural-language parser.91 Tables, lists, and JSON-LD help the parser without hurting the human.92- **Authority is distributed.** Off-domain mentions (GitHub, Reddit, citations)93 matter for GEO trust, not just on-page factors.