AEO / GEO Improvement Bot
The visibility audit tells you where a brand is invisible in AI answers. This skill tells you what to do about it -- it is the second half of the loop: measure, diagnose, fix, re-measure.
When to use
- Right after running AEO / LLM Visibility Audit and getting back
gap_questions.
- When the ask is to build an actual improvement plan, not another audit -- content briefs, schema fixes, citation targets, in priority order.
- To decide what a content/SEO team should work on first when there are more gaps than there is time.
When NOT to use
- To measure share of voice in the first place -- that's the visibility audit skill.
- As a substitute for writing the content or shipping the schema -- this produces the plan and the specific instruction, not the final asset. Feed the
content fixes to a content-writing skill and the schema fixes to a schema-audit skill.
Method
- For every gap question, read four signals: does an owned page answer it, does that page carry schema markup, how many independent (third-party) sources corroborate it, and how much demand it represents.
- Classify the gap into exactly one root cause, cheapest-explanation-first: no content > no schema > no citations > authority deficit. Fixing the wrong layer wastes effort -- adding schema to a page that doesn't exist does nothing.
- Prioritise: higher demand first; at equal demand, cheaper fixes (schema) surface before expensive ones (earning citations or authority) so the plan front-loads fast wins.
- Attach a re-check window per fix type -- schema changes show up in re-crawls faster than earned citations do.
Inputs
brand -- the brand name
gap_questions -- from the visibility audit's gap_questions[]
signals -- per question: has_owned_content, has_schema_markup, third_party_mentions, search_volume_proxy (1-10). In production these come from a site crawl + a third-party source search; the demo ships a deterministic sample.
Output (JSON)
fixes[] (each with question, fix_type, action, recheck_after_days, priority), fix_type_mix, and a one-line summary naming the top fix to start on.
Run it
python scripts/geo_improve.py # built-in sample
python scripts/geo_improve.py in.json # your own brand + gap_questions + signals
Zero dependencies, no API keys. To go live: swap the sampled signals for a real site crawl (does the page exist, does it carry JSON-LD) and a real third-party mention count; the classification and prioritisation logic stays identical. Chain it after aeo_score.py's output and, on a schedule, after re-running the audit to confirm each fix moved the needle -- a scheduled n8n version of the full measure-diagnose-fix-recheck loop ships in pipeline-automation/aeo-geo-improvement-loop.json.
1---2name: aeo-geo-improvement-bot3description: AEO / GEO Improvement Bot4---56# AEO / GEO Improvement Bot78The visibility audit tells you *where* a brand is invisible in AI answers. This skill tells you *what to do about it* -- it is the second half of the loop: measure, diagnose, fix, re-measure.910## When to use1112- Right after running [AEO / LLM Visibility Audit](../aeo-llm-visibility-audit) and getting back `gap_questions`.13- When the ask is to build an actual improvement plan, not another audit -- content briefs, schema fixes, citation targets, in priority order.14- To decide what a content/SEO team should work on first when there are more gaps than there is time.1516## When NOT to use1718- To measure share of voice in the first place -- that's the visibility audit skill.19- As a substitute for writing the content or shipping the schema -- this produces the plan and the specific instruction, not the final asset. Feed the `content` fixes to a content-writing skill and the `schema` fixes to a schema-audit skill.2021## Method22231. For every gap question, read four signals: does an owned page answer it, does that page carry schema markup, how many independent (third-party) sources corroborate it, and how much demand it represents.242. Classify the gap into exactly one root cause, cheapest-explanation-first: **no content** > **no schema** > **no citations** > **authority deficit**. Fixing the wrong layer wastes effort -- adding schema to a page that doesn't exist does nothing.253. Prioritise: higher demand first; at equal demand, cheaper fixes (schema) surface before expensive ones (earning citations or authority) so the plan front-loads fast wins.264. Attach a re-check window per fix type -- schema changes show up in re-crawls faster than earned citations do.2728## Inputs2930- `brand` -- the brand name31- `gap_questions` -- from the visibility audit's `gap_questions[]`32- `signals` -- per question: `has_owned_content`, `has_schema_markup`, `third_party_mentions`, `search_volume_proxy` (1-10). In production these come from a site crawl + a third-party source search; the demo ships a deterministic sample.3334## Output (JSON)3536`fixes[]` (each with `question`, `fix_type`, `action`, `recheck_after_days`, `priority`), `fix_type_mix`, and a one-line `summary` naming the top fix to start on.3738## Run it3940```bash41python scripts/geo_improve.py # built-in sample42python scripts/geo_improve.py in.json # your own brand + gap_questions + signals43```4445Zero dependencies, no API keys. To go live: swap the sampled `signals` for a real site crawl (does the page exist, does it carry JSON-LD) and a real third-party mention count; the classification and prioritisation logic stays identical. Chain it after `aeo_score.py`'s output and, on a schedule, after re-running the audit to confirm each fix moved the needle -- a scheduled n8n version of the full measure-diagnose-fix-recheck loop ships in `pipeline-automation/aeo-geo-improvement-loop.json`.