Measuring AEO: Get Started for $1 a Month
AEO has created a visibility gap that traditional analytics can't see. Your content can get cited inside ChatGPT or Perplexity, shape someone's decision, and register zero clicks in Google Analytics. The reader got their answer and moved on without ever hitting your site. Enterprise platforms charge hundreds of dollars a month to track that. What follows is the ten-source stack I've created and run for this website, built almost entirely on free APIs, for about $1 a month.
The AI search space
The acronyms in this space are getting crowded, and they don't mean the same thing to everyone. Worth walking through an overview before going further. Search Engine Optimisation (SEO) targets link-based ranking, the classic ten blue links. Answer Engine Optimisation (AEO) targets the engines where synthesis replaces the list and the click is optional: Perplexity, ChatGPT, Google's AI Overviews (Column Five 2026). Generative Engine Optimisation (GEO) is the broader umbrella for anything surfacing inside generated text. Aggarwal et al. (2023) coined the term in the paper that first formalised it. Large Language Model Optimisation (LLMO) narrows to training-data presence: whether your content shaped the model before any live query ran (Search Engine Land 2025). Aleyda Solís (2025) has the full taxonomy if you want to go deeper.
Beyond those four, the space keeps splintering. AI Optimisation (AIO) is an emerging framing that treats AEO, GEO, and LLMO as one ecosystem rather than rival disciplines (Atak Interactive 2026). At the implementation layer you have Retrieval-Augmented Generation (RAG) optimisation, which covers tuning how content is chunked, indexed, and retrieved inside retrieval pipelines (RagFlow 2025). Semantic SEO prioritises meaning and entity relationships over keywords (Backlinko 2024). Entity SEO uses schema and knowledge-graph signals so AI systems can disambiguate one brand, author, or concept from every other lookalike in the training data (Ahrefs 2024). Google's old Search Generative Experience (SGE) now ships as AI Overviews (Google 2024), and Generative Search Optimisation (GSO) floats around as a synonym for both. A Search Engine Land analysis cited by eMarketer (2026) found 59% of SEO influencers use GEO as their default term, though fewer than a third stay consistent across categories.
GEO = citation visibility
AEO = direct-answer extraction
LLMO = training-data presence
RAG = retrieval precision
Why clicks aren't enough anymore
Google Analytics and Google Search Console were built for a world where someone typed a query, scanned ten links, and clicked one. Traditional search still drives most of the web, and both tools do that job well: where you rank, what queries find you, how many clicks land. The problem is that world is shrinking. Pew Research Center (2025) analysed browsing data from 900 US adults and found click-through rate dropped 47% when AI Overviews appeared: 8% versus 15% without. Ahrefs (2026) puts the position-one CTR drop at 58% against pre-AI-Overviews forecasts. Seer Interactive (2025) measured a 61% decline in organic CTR for informational queries with AI Overviews, across 3,119 queries and 25.1 million impressions from 42 client organisations over fifteen months.
When your content appears in a Perplexity answer or a ChatGPT response, there's often no click attached. No session. No pageview. Your analytics register nothing, but your content shaped what the reader believed and decided. Third-party platforms exist to make that visible. Most start at hundreds of dollars a month; enterprise tiers run into the thousands. For a solo operator or small team, that's hard to justify against what is, at this stage of AEO maturity, still a leading indicator with uncertain conversion. What follows is the alternative I built: ten sources, most of them free, covering the four categories of signal you actually need.
My top 10 analytics stack at a glance
Grouped into four signal categories: AI citation, search, site health, and audience context. Almost everything below is free. All of it is automatable. Wire it once and it runs. The table covers the whole stack at a glance; each source gets its own breakdown in the section below.
| Category | Source | Question it answers | What it measures |
|---|---|---|---|
| LLM visibility | AEO probe (4 engines) | Am I being cited in AI-generated answers? | Citations from Perplexity, ChatGPT, Claude, Gemini |
| LLM visibility | Server access logs (AI crawlers) | Are AI crawlers fetching my pages? | ClaudeBot, GPTBot, PerplexityBot, GoogleOther crawl rate |
| Search / Google | GA4 Data API | Are real people actually reading this? | Human sessions, engagement, page views |
| Search / Google | Google Search Console API | What queries surface me on Google, and where do I rank? | Impressions, clicks, CTR, position, query |
| Search / Google | Google Keyword Planner | Is there volume for the topics I'm covering? | Keyword search volume, competition, trend |
| Search / Google | Google Ads Search Term Insights | What real language are people using to find me? | Real queries triggering your ads, clustered by theme |
| Search / Bing | Bing Webmaster Tools API | Am I visible on Bing and Copilot? | Bing impressions, clicks, queries |
| Site health | PageSpeed Insights API | Is my site fast and healthy enough to be cited? | Core Web Vitals, performance scores |
| Context | Google Trends | Is interest in this topic rising or cooling? | Topic-level search-interest baseline |
| Audience | Returning-visitor cohort (GA4-derived) | Am I building an audience, not just traffic? | 90-day returning vs new ratio |
Source-by-source reference
1. AEO probe
I run 40 target queries fortnightly across ChatGPT, Claude, Gemini, and Perplexity, checking whether hcd.ai appears in citations, in the body text, or not at all. Each run produces a structured record so I can track citation rate over time, not just take a point-in-time snapshot.
This is the source most teams don't have. LLM citations frequently don't generate clicks, so without probing the engines directly you won't know whether your content is being cited at all. Aleyda Solís (2025) covers the AEO measurement landscape in detail if you want the broader context.
Signal type: Leading (citation often precedes ranking).
Cost: About $1 a month in API usage across all four engines (40 queries, fortnightly). The only source in this stack that costs anything.
Cadence: Fortnightly. Weekly is overkill. Citations don't shift that fast.
One thing I'd flag: a single snapshot tells you almost nothing. Citations drift depending on what the engine has indexed recently, what competing content exists, and how the query is phrased. You need a history, not a one-off check.
2. Server access logs (AI crawlers)
Raw HTTP logs from your server, parsed for AI crawler user agents: ClaudeBot and Claude-SearchBot (Anthropic), GPTBot and OAI-SearchBot (OpenAI), PerplexityBot (Perplexity), GoogleOther and Google-Extended (Google).
This is the upstream signal for everything else. If ClaudeBot isn't crawling your pages, Claude isn't considering them for citations. Crawl rate tells you what's going to happen in the AEO probe before it happens, and it gives you a place to look when citation rates are flat, so you don't automatically assume the content isn't good enough.
Signal type: Leading.
Cost: Free (your hosting already keeps these logs).
Cadence: Weekly grep.
Watch log retention. Most default server setups keep logs for 7-14 days, which isn't enough for weekly trending. Extend retention before you need it. Retroactive fixes aren't possible once logs roll off.
3. GA4 Data API (bot-filtered)
Human sessions, page views, engagement rate, and referral source on your own site, pulled programmatically via the GA4 Data API rather than the UI. Running it via API means it cross-references cleanly with the other sources in the stack.
This is the baseline for whether real people are actually reading what you publish. It's also where chatgpt.com or perplexity.ai referrals show up when a citation converts to a click, so it catches the tail of what the AEO probe measures upstream.
Signal type: Lagging (reports on what happened).
Cost: Free.
Cadence: Weekly.
GA4's built-in bot filter uses the IAB's International Spiders and Bots List, which misses sophisticated headless browsers and referral spam. Search Engine Land (2025) documents the limitations; Kissmetrics (2025) covers the workarounds.
4. Google Search Console API
Impressions, clicks, average position, and CTR for every query Google associates with your pages. The closest thing to a direct read of how Google perceives your content.
It shows which queries you're ranking for before traffic shows up in GA4, and which pages get impressions but no clicks, which is the title and meta description problem. Both of those are things you can act on; raw session counts aren't.
Signal type: Lagging, with a 2-3 day delay before data appears.
Cost: Free.
Cadence: Weekly.
"Average position" hides a lot. A page sitting at position 8 across 300 impressions can still produce zero clicks if the title doesn't match what the searcher actually wanted. Look at CTR by query, not just position. And remember GSC only covers Google. Bing is a separate pull.
5. Google Keyword Planner
Monthly search volume ranges, competition level, and trend direction for any keyword, drawn from Google Ads data. GSC shows what you already rank for; Keyword Planner shows the volume context for terms you're targeting but haven't yet ranked for. That's a different question, and it matters before you commit to a content piece.
Writing without knowing whether anyone searches for the core term is guesswork dressed as strategy.
Signal type: Contextual.
Cost: Free, though Basic Access to the Google Ads API is required for programmatic pulls. The UI works for manual lookups in the meantime.
Cadence: Monthly.
Volume ranges are broad at lower tiers (100-1K, 1K-10K), directional not precise. Fine for topic selection. Not for traffic forecasting.
6. Google Ads Search Term Insights
The exact queries that triggered your ads, clustered thematically by Google on the Insights page of your Google Ads account. Unlike Keyword Planner, this is what people actually typed, not what Google thinks matches your targeting.
Multi-word, conversational queries (the kind LLMs are trained on) show up here in ways they don't in GSC. For readers running paid campaigns, this is the only source that gives verbatim query clusters without sampling.
Signal type: Ground-truth (for paid traffic).
Cost: Free within Google Ads, but requires an active paid campaign.
Cadence: Monthly.
Data density tracks spend. A thin campaign produces thin query data, and this source disappears entirely if you pause campaigns.
7. Bing Webmaster Tools API
Bing's equivalent of GSC: impressions, clicks, queries, and page performance in Bing Search.
ChatGPT Search (OpenAI's web-grounding feature for Plus, Enterprise, and Edu users) uses Bing as its backend. If you're not indexed in Bing, you're less likely to appear in ChatGPT's web-grounded responses. That alone makes Bing worth monitoring. Bing Webmaster also surfaces query data that GSC tends to suppress under "(other)".
Signal type: Lagging.
Cost: Free.
Cadence: Weekly.
Bing volumes are small relative to Google. One or two clicks per week on a given query is normal at this scale. Treat it as directional signal rather than anything you'd act on in isolation.
8. PageSpeed Insights API
Core Web Vitals and Lighthouse performance scores for your pages, split between lab data (controlled test) and field data (real user experience collected via Chrome).
Google has been explicit that Core Web Vitals factor into ranking. For LLM crawlers the connection is more indirect. Faster pages are cheaper to crawl, which matters when crawl budgets are finite, but the basic principle holds. A slow site is a liability on both fronts.
Signal type: Lagging (health, not visibility).
Cost: Free.
Cadence: Monthly.
A score of 98/100 in Lighthouse can coexist with a mediocre field CLS score if real users on mobile are loading heavy images. Lab scores and field scores don't always agree. Check field data first.
9. Google Trends
Relative search interest over time for any topic, compared against other topics or the overall index. Not absolute numbers, relative ones. That's a meaningful distinction when you're reading the output.
This is contextual baseline. It tells you whether your topic is trending, flat, or declining regardless of whether you rank for it. If a term you've been building content around is losing interest, that's worth knowing before you commission a follow-up piece.
Signal type: Contextual.
Cost: Free. Google launched an official Trends API in alpha in July 2025, still limited-access (Google 2025). The long-standing community scraper pytrends was archived in April 2025 (GeneralMills 2025); the current maintained successor is trendspyg.
Cadence: Monthly.
A topic dropping from index 85 to 60 doesn't mean 25% fewer searches. It means 25% less relative to the peak. And one spiking topic can suppress the index of everything else in the same comparison set, so watch what you're comparing against.
10. Returning-visitor cohort (GA4-derived)
The ratio of returning visitors to new visitors over a rolling 90-day window, pulled from the GA4 Data API and tracked monthly.
A content programme that only attracts first-time visitors hasn't built an audience. Returning visitor rate tells you whether the stack is compounding, whether people come back or just show up once and leave.
Signal type: Lagging.
Cost: Free.
Cadence: Monthly.
At low traffic volumes the numbers get noisy. I'm at that threshold now, so this metric will become more useful as the site grows. Don't read single-month swings as trends when your total returning visitor count is still in the dozens.
Key insights so far
AEO citation before Google ranking. The week after the VUX article published, the AEO probe showed Perplexity citing it for "verification user experience" queries. Google Search Console showed zero impressions for the same term. The article hadn't appeared in Google's index yet. Without the probe, I'd have concluded the piece had no traction and defaulted to waiting. The citation was real, even though GA4 had nothing to show for it.
ClaudeBot at zero. Before I added explicit Allow directives for named AI crawlers in robots.txt, the server logs showed ClaudeBot at zero for several weeks running. After the directive went in, the crawl rate moved off zero within days. Whether Anthropic's crawler deprioritises sites without explicit permission or whether it was coincidence with the site maturing, I can't say for certain, but the directive is worth adding regardless. What I can say is that if I'd been relying on the AEO probe alone, I'd have seen flat Claude citation rates and assumed the content wasn't good enough. The crawler logs showed the problem was upstream from the content entirely.
Ghost sessions in GA4. Over 90 days, bot filtering exposed a subset of sessions as spam-domain referrals. Not a crisis, but enough that any decisions made on raw counts were decisions made on numbers that included noise. Spam referrals tend to cluster, which distorts engagement rate for specific pages. That's the part that matters in a weekly report, because page-level engagement is what you'd use to decide whether to update or extend a piece.
Where to start today
Ten sources sound like a lot but the richness in reporting is worth it. Work through the following and you'll be up and running before you know it:
- Step 1: GA4, Google Search Console, and Bing Webmaster Tools. All free, all well-documented, roughly half a day of setup for all three. Covers human search behaviour completely and gives you a baseline before you start measuring anything else.
- Step 2: A manual AEO probe. Take your top ten target queries into Perplexity and note whether you appear. No API needed yet, just the habit of checking once a week. You'll learn more from two months of that than from a one-off comprehensive audit.
- Step 3: A grep of your server access logs for GPTBot and ClaudeBot. One command, run weekly. If the count is zero, your robots.txt needs attention before anything else.
Once those three are running consistently, add bot-filtered GA4 exclusions, explicit AI crawler Allow directives in robots.txt, and a trailing-slash canonical rewrite. That last one fixes LLM citation 404s when engines drop the trailing slash during URL normalisation. I lost early citation traffic to this before catching it.
The rest of the stack can follow at whatever pace makes sense.
Frequently Asked Questions
How do I measure AEO without paying for a third-party platform?
Wire up GA4, Google Search Console, and Bing Webmaster Tools first. That covers human search behaviour and costs nothing. Then run a manual or scripted AEO probe: take your target queries into ChatGPT, Claude, Gemini and Perplexity and note whether you appear. Add a weekly grep of your server access logs for AI crawler activity. Those three sources together will show you more about LLM visibility than most content teams have access to, and none of it needs a paid platform.
Does GA4 track AI citations?
Not in any useful sense. When someone clicks a link from a ChatGPT or Perplexity response, GA4 catches it as a referral, so you'll see chatgpt.com or perplexity.ai in your traffic report. But if the AI answered the question without surfacing a link, or the reader didn't click through, nothing registers. That's the gap. GA4 sees conversions from AI citations; it doesn't see the citations themselves. That's why the AEO probe and crawler logs exist.
How much does a DIY AEO reporting stack cost?
For a small site, about a dollar a month should cover it. The only thing I pay for is the AEO probe. API calls across ChatGPT, Claude, Gemini, and Perplexity run to roughly $1/month at my query volume (40 queries, fortnightly, four engines). GA4, Google Search Console, Bing Webmaster Tools, PageSpeed Insights, Google Trends, and server logs are all free. Third-party AEO platforms start in the hundreds of dollars per month. The DIY stack costs less than a coffee.
Which AI crawlers should I allow in robots.txt?
ClaudeBot and Claude-SearchBot for Anthropic, GPTBot and OAI-SearchBot for OpenAI, PerplexityBot for Perplexity, GoogleOther and Google-Extended for Google's AI features. All of them have documented user agent strings and respect robots.txt. Blocking any of them cuts your citation chances in the corresponding LLM. I'd also add explicit Allow directives rather than relying on absence of a Disallow rule. ClaudeBot went from zero crawls to active within days of me doing this.
What's the minimum viable AEO reporting setup?
GA4 and Google Search Console, both free. That handles human search behaviour completely. Then pick your top ten target queries and run them in Perplexity once a week, no API needed, just the habit of checking. And grep your server logs for GPTBot and ClaudeBot. If the count is zero, your robots.txt needs attention. Those three sources will already tell you more than most content teams know about their LLM visibility.
Created with Midjourney