AI Overview Recovery Playbook
When Google AIO stops citing your article, run this recovery (per seo-geo pattern).
Phase 0: CONFIRM the loss is real (v3.35 — churn guard)
AIO citations churn ~45% per render (Ahrefs 2025: consecutive AIO renders of the same query share only ~54.5% of cited URLs). A single uncited probe is noise, not a loss — recovering from churn wastes a full rewrite cycle and poisons the journal.
- The automated trigger is already guarded:
refresh_decision_routeremitsNOT_IN_AIonly after 2 consecutive uncited probes ≥ 48h apart (observations persisted inprojects/{slug}/audits/aio-observations.json; an in-between cited probe resets the clock). A router-emitted NOT_IN_AI action is therefore pre-confirmed — proceed to Phase 1. - For a MANUAL
/aio-recoveryinvocation: checkaio-observations.jsonfirst. If the loss has only one observation, re-probe after 48h instead of starting recovery:python -m scripts.monitor.refresh_decision_router --site {slug} --json - Evidence:
references/seo/serp-feature-value-2026.md§4.
Phase 1: Measure Damage (Day 0)
- Check GSC: AIO impressions drop
- Run ai_search_probe to confirm
- Document: which queries lost AIO citation? Traffic impact?
Phase 2: Diagnose Skip Reason (Day 0-2)
4 query strategy classifiers:
- (A) Freshness — content >12 months old, new competitors fresher
- (B) Authority — competitors gained backlinks; we lost
- (C) Structure — H2/H3 structure no longer matches query intent
- (D) Entity — entity ambiguity (e.g., merger renamed brand)
Run:
bashpython -m scripts.fetch.ai_search_probe \ --brand "{brand}" --domain "{site}" \ --queries "{affected_queries_comma_separated}"
Phase 3: Targeted Rewrite (Day 3-5)
Per diagnosis:
- (A) Add dateModified + fresh stats + 2026 data
- (B) Build authority — add citations to Tier-1, get backlinks
- (C) Restructure H2s to match query intent
- (D) Add Organization schema with sameAs + add clarification copy
Phase 3.5: Record the change (closes the monitor verify loop)
After the targeted rewrite is republished, RECORD it so the verification loop can measure whether
AIO citation recovers (Rule 6: the real executor for the "fixer skills should call --record" wiring,
not a prose note). The diagnosis class (A/B/C/D) is the change --type:
bashpython -m scripts.monitor.optimization_journal --record \ --site {site} --post-id {post_id} --url {live_url} \ --type aio-recovery --query "{primary_affected_query}" \ --before "{old_structure_or_stat}" --after "{new_structure_or_stat}"
Phase 4: Monitor (Day 7 / 14 / 28)
- Re-probe AI engines weekly
- Check GSC AIO impressions weekly (
optimization_journal --verify --site {site} --window 14reads the recorded baseline) - If recovered: document what worked
- If still lost at Day 28: escalate to repair-orchestrator with from-scratch level
See also
references/geo/ai-overview-recovery-playbook.md


