The Great Decoupling: Measure AI Overview Traffic Loss

By Serpent API Team · · 12 min read

Two months ago a friend who runs a 5M-monthly-visit content site sent me a screenshot of his Search Console graph. Impressions on a green line going up and to the right. Clicks on a blue line drifting flat to slightly down. Same queries, same pages, no algorithm penalty.

"The Great Decoupling," he wrote. "I'm getting eaten by AI Overviews and I don't even know how much."

This guide is the script and the dashboard I built him. By the end you'll have a Python program that combines Google Search Console data with live SERP data, tags every tracked query for AI Overview presence, and tells you exactly how much traffic the AIO is costing you per query. Spoiler: for most informational keywords, it's a lot.

What "The Great Decoupling" actually means

Traditionally, Google Search Console impressions and clicks track each other. More impressions, more clicks. Click-through rate (CTR) is roughly constant for a given position. Anyone who's looked at a long-running content site for more than a year has internalised this.

That broke in 2024 and shattered in 2026. AI Overviews now appear on roughly 48 percent of SERPs. For queries with an AIO present, organic CTR drops 61 percent on average and zero-click rates hit 80–83 percent. Your impressions stay the same (the page still ranks), but your clicks crater because the user got the answer before scrolling to the blue links.

This produces the "decoupling" signature in Search Console — rising impressions, falling clicks, sinking CTR — with no on-page change.

Why now (and why it accelerated in 2026)

Three things stacked up:

Google AI Mode launched broadly in 2025. Initially a tab; by late 2025 a default behaviour for many query categories. AI Mode is a conversational search interface that synthesises answers from web pages and is the natural successor to Search Generative Experience. Our breakdown of AI Mode ranking factors covers the mechanics.

AI Overviews coverage expanded. AIO started rolling out in mid-2024, hit ~48 percent of SERPs by mid-2026, and dominates informational queries: explanations, comparisons, definitions, how-to.

AI Mode in Search Console became filterable in March 2026. You can now go to Performance → Search Results, filter by Search Appearance → AI Mode or AI Overviews, and see impressions inside those surfaces specifically. Critical context for the analysis below.

Two data sources you need

You can't measure AIO loss with just Search Console. GSC tells you your page's impressions and clicks; it doesn't tell you which queries triggered an AIO in the first place. For that you need to actually look at the SERP.

Source 1: Google Search Console via the Search Console API. Pull query-level impressions, clicks, CTR for the last 28 days. Free, takes 10 minutes to set up via Google Cloud Console.

Source 2: A SERP API. For each query, fetch the live SERP and check whether an AIO is present and whether your domain is one of its cited sources. The Serpent Google SERP API returns AIO presence and source URLs directly in the response — we'll use that. The free tier gives 100 quick-search calls; paid plans start at $0.05 per 1,000.

Tutorial: the decoupling Python script

The script does four things: pull GSC data, query each term through the SERP API, tag each query for AIO presence and your-domain citation, output a CSV with CTR delta. Here's the whole thing:

import os, csv, datetime, requests
from google.oauth2 import service_account
from googleapiclient.discovery import build

SERPENT_KEY = os.environ["SERPENT_API_KEY"]
SITE_URL    = "https://your-site.com"            # exact GSC property
SA_FILE     = "service-account.json"             # GSC API service account
DOMAIN      = "your-site.com"

def gsc_queries(days=28, n=200):
    creds = service_account.Credentials.from_service_account_file(
        SA_FILE, scopes=["https://www.googleapis.com/auth/webmasters.readonly"]
    )
    svc = build("searchconsole", "v1", credentials=creds)
    end = datetime.date.today()
    start = end - datetime.timedelta(days=days)
    res = svc.searchanalytics().query(siteUrl=SITE_URL, body={
        "startDate": str(start), "endDate": str(end),
        "dimensions": ["query"], "rowLimit": n
    }).execute()
    return res.get("rows", [])

def serp_aio_check(query, country="us"):
    r = requests.get("https://apiserpent.com/api/search",
        params={"q": query, "num": 10, "engine": "google", "country": country},
        headers={"X-API-Key": SERPENT_KEY}, timeout=60)
    r.raise_for_status()
    data = r.json()
    aio = data.get("results", {}).get("aiOverview") or {}
    sources = [s.get("url", "") for s in aio.get("sources", [])]
    present = bool(aio)
    self_cited = any(DOMAIN in s for s in sources)
    return present, self_cited

def main():
    today = datetime.date.today().isoformat()
    out = f"decoupling-{today}.csv"
    with open(out, "w", newline="") as f:
        w = csv.writer(f)
        w.writerow(["query","impr","clicks","ctr","aio_present","self_cited"])
        for row in gsc_queries():
            q = row["keys"][0]
            impr, clicks, ctr = row["impressions"], row["clicks"], row["ctr"]
            try:
                present, self_cited = serp_aio_check(q)
            except Exception as e:
                present, self_cited = None, None
            w.writerow([q, impr, clicks, round(ctr,4), present, self_cited])
    print("wrote", out)

if __name__ == "__main__":
    main()

Setup: install google-api-python-client google-auth requests, create a Google Cloud service account with Search Console read access, and add it as a user to your GSC property. Five minutes total.

Run on a cron once a week. The 200-query call uses 200 SERP API requests; on the Default tier that's about $0.018, on Scale roughly $0.01. Well below the noise floor of any reasonable analytics budget.

How to interpret the output

Open the CSV in your tool of choice. Two pivot tables tell you everything you need.

Pivot 1: CTR by AIO presence. Group by aio_present, average CTR. You should see something like:

AIO present?Avg CTRQueries
No4.8%87
Yes1.6%113
Delta−67%

This is your headline number. "We lose 67 percent of our clicks on queries with AI Overviews." It's the answer that gets put on the leadership update.

Pivot 2: AIO presence and your domain's citation. Cross-tab aio_present against self_cited. The interesting cell is "AIO present AND you are not cited". Those are the queries where you have impressions but no presence in the answer summary — the highest-leverage targets to optimise next.

Brands cited inside their own queries' AIOs see roughly 35 percent more clicks than uncited brands, so this isn't all bad news — it's a roadmap.

Want the AIO source list for every tracked query in one call? The Serpent Google SERP API returns AI Overview text and source URLs directly. See the AIO extraction guide for the exact response shape.

What to do about it

Once the data is in front of you, four moves outperform everything else.

1. Get cited inside your own AIOs

This is the highest-leverage play. Cited brands recover much of the click loss because the cited URL gets a tooltip and is the natural next step for a curious user. Optimise pages with FAQ schema, clear claims, and information gain — see our AIO optimization guide for the field-tested checklist.

2. Pivot toward queries AIOs don't trigger on

AIOs love informational queries. They mostly avoid: transactional queries ("buy", "pricing", "discount code"), very long-tail specifics, and many local-intent queries. Reweight content investment toward those.

3. Diversify into AI assistants directly

If 80 percent of clicks for "what is X" queries are now zero-click, you need to be inside the AI answers wherever they happen — ChatGPT, Claude, Gemini, Perplexity. Cross-LLM citation tracking is what the Serpent AI Rank API covers. Our Python citation tracker walks through a working implementation.

4. Treat content velocity as a feature, not a cost

AI Overviews favour recently updated content. Pages with recent dateModified earn citations at higher rates — details in our freshness study. If you have evergreen pillar content, schedule legitimate refreshes every 90 days.

The mindset shift

The decoupling isn't really a measurement problem — it's a category shift in how visibility works. Impressions used to be a proxy for opportunity. Now they're a proxy for "Google considered showing you, then answered the question itself".

The number that matters in 2026 is not "where do I rank?" It's "am I cited?" The script above gives you the answer query by query. The optimization work flows from there.

FAQ

What is the Great Decoupling?

Rising Search Console impressions with falling clicks for the same pages and queries — driven by AI Overviews answering inside the SERP instead of users clicking through.

How do I measure AIO traffic loss?

Combine GSC query data with a SERP API call per query. Compare CTR for AIO-present vs AIO-absent queries. The Python script in this guide is a complete reference implementation.

Can I see AIO data in Search Console?

Partially. Search Console's Performance report has Search Appearance filters for AI Mode and AI Overviews. Impressions inside those surfaces are shown; matching them to specific queries at scale still needs a SERP API.

Can I reverse the decoupling?

Yes for individual pages by becoming a cited source in the AIO itself (cited brands earn ~35 percent more clicks than uncited ones). At a portfolio level, rebalance toward transactional and long-tail queries that don't trigger AIOs.

How often should I rerun the analysis?

Weekly is enough for most sites. Daily if you publish 5+ pieces per week or have heavy product launch / news cycles.

Measure What Google Stopped Sending You

Serpent's Google SERP API returns AI Overview text and source URLs in one call — from $0.05 per 1,000 queries. 100 free calls on signup, no card.

Get Your Free API Key

Explore: Google SERP API · AI Rank API · Pricing · Playground