# Web Optimization

> 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.

- Skill: `staksoft/web-optimization` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add staksoft/web-optimization`
- Raw SKILL.md: https://api.skillmd.com/api/skills/staksoft/web-optimization/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- License: MIT
- Author: staksoft (https://skillmd.com/u/staksoft)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/staksoft/web-optimization

---


# 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.

1. **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>`.
2. **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`.
3. **Score & prioritize** using `references/scoring.md` (P0 blocking → P3 nice-to-have).
4. **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.

1. **Clarify intent** — target query, audience, and primary lens emphasis if any
   (default: optimize for all three).
2. **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).
3. **Attach structured data** — pick the right JSON-LD from
   `assets/schema-templates/` per `references/schema.md` (Article + FAQPage are
   the common pair).
4. **Produce an llms.txt entry** from `assets/llms-txt-template.md`.
5. **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.

1. **Run or recall the audit.** If an audit was just completed, use those findings.
   Otherwise run Workflow A first silently, then begin fixing.
2. **Load `references/fix-playbook.md`.** It maps every finding type to the
   minimum question(s) to ask and what to generate.
3. **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)"
4. **Maintain a session checklist** (✅ done / ⏭ skipped / ⬜ pending) and show
   it at the top of each turn so the user always knows where they are.
5. **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.

