Course outline · lesson 19 of 20
Module 01 · 0/3
How AI Answers Get Made
Module 02 · 0/3
Measure What AI Says About You
Module 03 · 0/3
Open the Door: Crawler Access
Module 04 · 0/4
Fix the Facts AI Repeats
Module 05 · 0/4
Engine Playbooks
Module 06 · 0/3
Operate and Prove It
Final exam
Unlocks when every lesson is passedCertificate
Earned, not given
Module 06 · Operate and Prove It · Lesson 2 of 3
Monitoring and Measuring GEO ROI
A score that went up and a traffic number labeled AI are weak evidence. Monitor crawler access, read changes against variance bands, and report ROI without claiming more than the data shows.
By the end of this lesson you can
- Re-audit with a frozen prompt set and read changes against a variance band
- Set up alerts for crawler access regressions that happen without a site change
- Build an AI referral segment and state exactly what it cannot see
- Use Bing Webmaster Tools grounding queries to check your prompt set
- Report GEO results without claiming causation the data cannot support
Sooner or later someone asks what GEO did for the business. The usual answer is a score that went up and a revenue figure labeled "AI traffic". Both are weaker than they look. The score moves between runs when nothing has changed, and the traffic figure counts only the visitors whose AI tool tagged the link.
Meanwhile, the thing most likely to hurt you never makes the slide. A firewall rule, a CDN default or a template change can cut AI crawlers off your site overnight, and no score will show it for weeks.
This lesson sets up three things: monitoring that catches breakage the week it happens, attribution that is honest about what it cannot see, and an ROI story that holds up when a skeptical finance lead reads it.
Re-audit the same way every time
A re-audit is only comparable to the baseline if everything except your fixes stayed the same. Freeze these:
- The prompt set. Category, comparison and brand-fact prompts, written down and versioned. If you add or change prompts, start a new baseline.
- The platforms and settings. Same platforms, logged out or memory off, same language and country where the platform lets you choose.
- The number of runs. Run every prompt at least three times per audit.
The repeated runs matter because retrieval is discretionary per query on every platform. Whether ChatGPT searches the web at all for a given prompt varies, and nobody agrees on how often it does.
Evidence: Published estimates of how often ChatGPT searches the web conflict. Semrush's US clickstream data put it at 34.5% of queries in February 2026, Profound reported about 18% of conversations, and cloro reported 80.5% on a 100-prompt set it chose. They measure different things on different populations. What they share: any single answer may or may not have been grounded, and you often cannot tell which.
So build a variance band. In your baseline week, run the full audit three times. For each metric on each platform, the band is the range from the lowest reading to the highest. A later reading inside the band is noise. Call a change real only when it lands outside the band on two audits in a row.
Record the denominator too. In 99Visibility, a query where Google shows no AI Overview is skipped rather than counted as a miss, so the number of answered queries can change between runs. "6 of 20" and "6 of 14" are different results.
Set cadence by how fast each signal can move. Platforms that retrieve from the web can reflect a fix within days or weeks, so audit them weekly or every two weeks. Answers from training data move only with a new model: OpenAI’s chat-latest model page, checked 16 October 2026, lists an April 20, 2026 knowledge cutoff. That alias changes over time. Other models have their own cutoffs, so record the exact model and its documented cutoff rather than treating ChatGPT as one fixed knowledge state. A fact published after that snapshot cannot have been learned from that publication during training. In a 99Visibility audit every answer is marked "Searched the web" or "Answered from memory." ChatGPT and Claude are asked with web search on and decide per prompt whether to search, as they do in their own apps, and Gemini decides the same way with Google Search grounding. Perplexity, AI Overviews and AI Mode search on every answer. Answers that searched are where a fix can show up first. Answers from memory change when a new model ships, not when you ship a fix, so count the two apart when you judge a fix.
The score itself is a model, and you should say so when you report it. A weighted average of Mention Rate (40%), Accuracy (30%), Sentiment (15%) and Citation Rate (15%), multiplied by 0.2 + 0.8 × coverage, where coverage is the market-weighted share of the platforms in your audit that mentioned you at least once. Mentioned on no platform, the score is 0. Show the raw mention counts and the per-platform readings under it, so a reader can see what moved.
Alert on access, because it breaks without anyone touching the site
Scores lag. Access breaks fast, and the break is silent: nothing errors on your side, the crawler simply gets turned away. Monitor access directly.
Evidence: Cloudflare’s September 15 announcement says existing settings carry over. New ad-supported domains are offered Search: Allow, Training: Disallow AI Training, and Agent: Block on pages with ads. Training Block also blocks mixed-use crawlers such as Googlebot and Bingbot; Disallow AI Training preserves their search access. Check the settings of your own zone.
The CDN default is one cause. The others are ordinary: a bot-protection rule switched on during a scraping incident, a CMS plugin that rewrites robots.txt, a staging Disallow: / that ships to production, a template that adds nosnippet to every page, a redesign that moves pricing into a client-rendered component.
OpenAI's own eligibility rule shows why robots.txt alone is not enough. Its help center says to allow OAI-SearchBot "and confirm that the website host or content delivery network allows traffic from OpenAI's published searchbot IP addresses." Both halves have to hold. Set up these checks:
| Check | How | When | Alert if |
|---|---|---|---|
| robots.txt | Fetch it and diff it against the last copy | Daily | Anything changed |
| Crawler reachability | The Crawler Access check in 99Visibility, plus server logs for verified bots | Weekly | A retrieval bot gets a 403, a 429 or a challenge |
| Snippet directives | The same check, or view source on key pages | Weekly and after each deploy | noindex, nosnippet, max-snippet:0 or data-nosnippet appears where it shouldn't |
| Facts in raw HTML | Fetch the page without JavaScript and search for the price | After each deploy | A key fact is missing |
| CDN and Search Console settings | Cloudflare's AI crawler settings; the generative AI control in Search Console | Monthly | A default changed, or a property inherits an opt-out |
Your server logs are the ground truth, because they show what the real crawler received. Filter them to verified bots, not to anything claiming a crawler's user-agent. Cloudflare's verified-bot criteria are a cryptographic Web Bot Auth signature, a published IP list with a stable user-agent, or reverse DNS. The rendering check stays manual: the Crawler Access check covers robots.txt, the firewall probe and snippet directives, but it does not diff raw against rendered HTML.
Attribution: what your analytics can and cannot see
AI traffic attribution has three holes. Know them before you put a number on a slide.
- ChatGPT tags its links, but not all of them. OpenAI's publisher FAQ says ChatGPT automatically includes
utm_source=chatgpt.comin referral URLs. In practice, clicks from the free tier and the mobile app frequently arrive untagged and land in Direct. - Other assistants rarely tag at all. Build your segment on both the tag and the referring hostname. A visit that carries neither is invisible to you.
- Google AI Overviews send no referral of their own. A click from an AI Overview arrives as ordinary Google organic traffic, and GA4 cannot split it out.
Search Console does not fill that last gap. Its generative AI report shows impressions only for AI Overviews and AI Mode, split by page, country, date and device: no clicks, no CTR, no position. Google also confirmed a bug that depressed impressions in both its Search and generative AI reports from roughly 2026-08-12, so keep the affected window out of any baseline.
Myth: "ChatGPT is 92% of AI traffic." Figures like that are a share of trackable referral sessions. ChatGPT is the platform that stamps its links, and AI Overviews produce no referral event at all. ChatGPT's share of your trackable AI referrals is an upper bound on its real share, never an estimate of it.
The same logic runs the other way for your total. Tagged and referred AI sessions are a floor on AI-influenced visits, not a count of them. Google added a native AI Assistant channel to GA4 in May 2026, and Microsoft Clarity separates organic AI visits from paid AI placements. Build your own segment anyway, so you know exactly which sources are in it. A session segment where the session source matches .*(chatgpt|perplexity|gemini|claude|copilot).* is a reasonable start.
Bing Webmaster Tools: the only real grounding queries
Every prompt-tracking tool, including your own prompt set, measures prompts somebody chose. The engines then rewrite those prompts into searches of their own. Exactly one report shows you those searches.
Bing Webmaster Tools' AI Performance report (public preview since 2026-02-10, expanded 2026-06-16) shows total citations, average cited pages, page-level citation activity and grounding queries, which Microsoft defines as "the key phrases the AI used when retrieving content that was referenced in AI-generated answers." It covers Microsoft Copilot, AI-generated summaries in Bing and select partner integrations.
- Verify your site in Bing Webmaster Tools if you have not.
- Export the AI Performance data monthly. There is no API for it, so put a recurring task on someone's calendar.
- Compare the grounding queries with your prompt set. Where they differ, your prompt set is measuring the wrong thing; add the real queries to its next version.
Carry three caveats. Microsoft says the grounding-query data is a sample. Its Citation Share metric is "an observational metric – not a ranking system or a competitive scoreboard", and it can fall while your own citations rise. And Bing's index is a documented upstream of Copilot and a plausible one for ChatGPT search, with an effect nobody has quantified.
Leading and lagging indicators
Leading indicators are the ones you control and can verify the same day. Lagging indicators are what the business cares about, and they arrive late and noisy. Report both, leading first, because the leading ones are true whatever the lagging ones do.
| Indicator | Type | Moves |
|---|---|---|
| Each retrieval bot gets a 200 | Leading | The day you fix or break it |
| Key facts present in raw HTML | Leading | At deploy |
| Contradictions on your own site | Leading | When you edit pages |
| Accuracy errors and mentions on retrieval platforms | Middle | Weeks after a recrawl, if at all |
| Citations, Search Console AI impressions, Bing AI citations | Middle | Weeks |
| Tagged AI sessions and their conversions | Lagging | Months |
| Answers from training data, such as our ChatGPT and Claude columns | Lagging | The next model generation |
An ROI story that survives a skeptic
Evidence: A critical survey of 45 GEO studies (arXiv:2607.14035, July 2026) concluded that "already-retrieved content can causally alter its citation or use, but no reviewed technique shows a stable, longitudinal, cross-platform causal effect on organic discoverability or downstream behavior." Nobody has published even a before-and-after study for server-side rendering, the strongest lever in the evidence.
That sets the ceiling on what you can claim. You can show what you fixed and what moved afterward. You cannot prove the fix caused the move. Build the report on that:
- Fixes, as facts. "OAI-SearchBot went from a challenge page to a 200 on 2026-08-04." "Pricing now appears in raw HTML on all six pages that state it." These are verifiable whatever else happens.
- Movement, against the band. Only readings outside the variance band, with fix dates marked on the chart.
- A comparison group. Split your prompts into those that touch the fixed pages and those that don't. If the first group moves and the second doesn't, that is stronger than one trend line. It is still not proof.
- Traffic, as a floor. Tagged and referred AI sessions with their conversions, labeled as a lower bound.
- Damage avoided. Sales calls where a prospect quoted a wrong price, support tickets about a feature you don't have. Count them before and after.
Write "observed after the fix and consistent with it", not "caused by". And leave out conversion multipliers from industry reports you cannot trace to a primary source.
Worked example
Ledgerly, the fictional B2B invoicing SaaS from this module, ran three baseline audits in July. Its Perplexity mention rate ranged from 18% to 24%. On 2026-08-04 an engineer found that a bot-protection rule, switched on during a scraping incident, was serving a challenge page to PerplexityBot and OAI-SearchBot while robots.txt still allowed both. The rule was fixed that day. Later in August the pricing page moved to server-rendered HTML.
The two September audits read 31% and 34% on Perplexity, outside the band. The prompts that touch pricing moved; the prompts about integrations did not. Tagged ChatGPT sessions went from about 140 a month to about 210. Sales logged six prospects quoting the old free plan in June and one in September. The report lists the fixes with dates, shows the readings against the band, labels the sessions as a floor, and calls the result "observed after the fixes and consistent with them." The finance lead accepted it, because it claimed nothing the data could not hold.
Common mistakes
- Comparing one run with one run. Without a band you are reporting noise.
- Changing the prompt set mid-stream. A new prompt set needs a new baseline.
- Reading "no AI Overview traffic" in GA4 as zero. AI Overviews send no referral; those clicks sit inside Google organic.
- Presenting ChatGPT's share of tagged referrals as market share. It is an upper bound set by who stamps links.
- Building a baseline across the August 2026 Search Console bug. The impressions in that window are depressed.
- Watching the score instead of the access checks. A firewall break shows up in the score weeks after it starts costing you.
- Claiming causation. The evidence does not support it for any GEO technique, and a skeptic will notice.
Key takeaways
- 01Freeze the prompt set and settings, run each prompt several times, and call a change real only when it leaves the baseline band twice in a row.
- 02Access can break with no edit to your site, as Cloudflare's announced 2026-09-15 default change illustrates, so monitor robots.txt, crawler status codes and snippet directives directly.
- 03ChatGPT's UTM tag misses many clicks and AI Overviews send no referral, so AI referral sessions are a floor and ChatGPT's share of them is an upper bound.
- 04Search Console's generative AI report shows impressions only, and Bing Webmaster Tools is the one place to see the grounding queries an AI actually ran.
- 05Report fixes as facts, movement against the band, and outcomes as observed after and consistent with the fix, never as a proven cause.
Your win · about 10 minutes
Recorded a dated baseline for AI referral traffic
- In GA4, open Explore, start a free-form exploration and add a session segment where Session source matches the regex .*(chatgpt|perplexity|gemini|claude|copilot).*
- Set the date range to the last 90 days and show Sessions and Key events by month.
- Write the numbers in a dated note and label them a floor: untagged ChatGPT clicks and all AI Overview clicks are missing.
- Add this month's Search Console AI impressions and, if your site is verified there, your Bing AI citation count next to them.
Knowledge check · 4 questions · pass with 3
Pass this to complete the lesson
Graded on our server. Get 3 of 4 right to mark the lesson complete and move your timeline.
See what AI says about your brand
Run a free audit across ChatGPT, Perplexity, Google AI, Gemini and Claude, and check which AI crawlers can reach your site.
Start for Free