AEO Visibility
Three questions, in order: can AI engines reach us, do they cite us, does it send anyone? Measurement first; optimization advice only against pages that measurement says matter.
Render through growth-report-format. Open it alongside this skill.
Tools this skill calls
| Need | Tool | Key arguments |
|---|---|---|
| AI-surface referral sessions | mcp__google_search_mcp__ga4_run_report |
dimensions: ["sessionSource", "landingPage"] |
| Page readiness: outward citations, schema, structure | mcp__google_search_mcp__audit_page |
urls, response_format: "json" |
Agentman default: GA4 property 471838641. Any other property: resolve first.
Target resolution
- Named property in the request wins.
- Otherwise a registry in
data/names the default.example-*files and scrubbed placeholders never bind. - Otherwise ask.
Part 1 — Measure (GA4)
ga4_run_report, dimensions sessionSource + landingPage, filtered to the
AI-surface source list in references/ai-surfaces.md (chatgpt.com,
perplexity.ai, claude.ai, copilot.microsoft.com, gemini.google.com, and
variants). Pull the trailing 90 days monthly-bucketed for the trend.
The undercount caveat, stated in every report: referral traffic is the floor, not the measure. Most AI answers satisfy the user with zero click, and some surfaces strip referrers. Rising citations with flat referrals is still a win for brand presence — that is what the citation checks are for.
Watch for source fragmentation. Variants of the same surface counted separately understate it. Group before reporting, and say which strings you merged.
Part 2 — Access (can they even read us?)
Fetch robots.txt and check the AI crawler list in references/ai-surfaces.md
(GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot, Google-Extended, et al.).
Report a three-column table: crawler, allowed?, consequence. Blocking
Google-Extended affects Gemini grounding, not Search indexing — say which lever
each directive actually pulls. Flag contradictions (wanting AI citations while
blocking every AI crawler) as the finding.
Part 3 — Citation spot-checks
For 5–10 target prompts (the queries the business wants to be the answer to,
stored per-property in data/): run each against available AI surfaces and
record cited / mentioned / absent, and who is cited instead.
Sampling honesty: AI answers are stochastic. One run is an anecdote; three
runs per prompt is a sample, and even that is thin — published work on answer
stability finds roughly two thirds of cited sources change between consecutive
days on the same prompt. Record the date, surface, and exact phrasing; results
are not comparable across differently-phrased prompts. Log to
data/citation-log-<target>-<date>.md so the trend is real.
Report distributions, not binaries: "cited in 2 of 3 runs" is the finding, "we are cited" is not.
Part 4 — Page readiness rubric
Score only pages that Parts 1–3 say matter (cited-adjacent, or target-prompt
relevant). Run audit_page on them first — it returns three of these checks
directly, so do not eyeball what the tool already measured.
| Check | Source | Why (evidence) |
|---|---|---|
| Sources cited outward | audit_page → outwardCitations |
Cite Sources: top-tier method in GEO benchmarks |
| Structured data present | audit_page → schemaTypes |
engines parse it; malformed blocks are ignored entirely |
| FAQ content actually visible | audit_page → faq |
schema describing invisible content is a policy violation |
| Citable self-contained passages | read the page | position-adjusted visibility favors quotable blocks |
| Statistics present | read the page | Statistics Addition: top-tier method |
| Quotations from credible sources | read the page | Quotation Addition: top-tier method |
| Fluent, plain phrasing | read the page | Fluency/Easy-to-Understand: mid-tier positive |
| Entity named consistently | read the page | engines must know who is being cited |
| No keyword stuffing | read the page | measurably hurts in generative engines |
Output per page: score, and the one or two methods that would move it most.
Execution hand-off: for new or rewritten content, hand the target question
and the failing rubric rows to aeo-blog-generator. For structural fixes on
existing non-blog pages, a content brief is enough.
Closing the loop (produce → measure → verdict)
- Add the target question to this skill's prompt list in
data/the day the page ships. - Baseline the citation status (Part 3, three samples minimum) at ship time.
- Register the change — metric: citation rate for that prompt; control: a comparable untouched page's prompt.
- Re-check at the next monthly run. Content that is never re-measured is a superstition.
Output — the Findings section
Referral trend table, access table, citation log delta, top 5 page-readiness
rows. Provenance per growth-report-format; save to
data/aeo-report-<target>-<date>.md.
Honesty rules
- Never import conversion multipliers. Published AI-vs-organic figures range 4.4× to 23× with incompatible definitions of "conversion". Report this property's measured conversion rate for AI-referred sessions or nothing.
- GEO-paper effect sizes came from Perplexity-like engines on GEO-bench; they are directional priors for other surfaces, not guarantees. Method efficacy varies by domain — the paper's own headline caveat.
- A citation check is evidence about that prompt, on that surface, on that day. No "we rank in ChatGPT" claims off a single sample.
- Access findings are about crawlers, not indexing: robots directives for AI bots do not touch classic Google indexing, and vice versa.
audit_pagereads server-rendered HTML only. A page whose content is injected client-side may score poorly here and read fine in a browser — that gap is itself the finding, since a crawler sees what the tool sees.
Working copies and publishing
Public master: data/ holds fictional example-* files only. Target-prompt
lists are competitive strategy; citation logs name your property — both live only
in a private clone and are never published.