AI Overviews Broke Rank Tracking
A stat that should change how you build
rank tracking tools:
The overlap between Google top-10 and
AI Overview citations dropped from 76%
to 38% in one year.
This means a page ranking #1 organically
now has less than a 40% chance of also
appearing in the AI Overview above it.
Traditional rank tracking is measuring
the wrong thing for half of all queries.
What the 2026 SERP actually looks like
For informational and "best X" queries
(~55% of all Google searches), the page
renders like this:
AI Overview (200-400px tall) │
│ Summarised answer │
│ Cited sources: [site1] [site2] │
├─────────────────────────────────────┤
│ People Also Ask │
├─────────────────────────────────────┤
│ #1 Organic result ← below fold │
│ #2 Organic result │
│ #3 Organic result │
Position 1 organically is below the fold
on a standard laptop screen.
The two metrics you actually need
Metric 1: Traditional rank position
Still useful. Not sufficient alone.
Metric 2: AI Overview citation status
New. Increasingly essential.
A page can rank #1 and not be in the AIO.
A page can rank #15 and be cited in the AIO.
Both exist. Both require different fixes.
Getting both from one API call
python
import requests
def get_full_serp_data(keyword: str, api_key: str) -> dict:
"""
Returns rank position AND AI Overview
citation status in one call.
"""
response = requests.get(
"https://apiserpent.com/api/search",
params={"q": keyword, "engine": "google"},
headers={"X-API-Key": api_key}
)
data = response.json()
# Traditional organic positions
organic = [
{
"position": r["position"],
"url": r["link"],
# Pixel Y coordinate — unique feature
# Tells you if result is above/below fold
"pixel_y": r.get("pixel_position", {}).get("y"),
"above_fold": r.get("pixel_position", {}).get("y", 999) < 600
}
for r in data.get("organic_results", [])
]
# AI Overview — separate signal
aio = data.get("ai_overview", {})
aio_data = {
"present": bool(aio),
"text": aio.get("text", ""),
"cited_sources": [
s["link"] for s in aio.get("sources", [])
]
}
return {
"keyword": keyword,
"organic_results": organic,
"ai_overview": aio_data,
"your_page_rank": None, # fill with your domain
"your_page_in_aio": None, # fill with your domain
}
def analyse_for_domain(data: dict, domain: str) -> dict:
"""Check both signals for your specific domain."""
rank = next(
(r["position"] for r in data["organic_results"]
if domain in r["url"]),
None
)
in_aio = any(
domain in url
for url in data["ai_overview"]["cited_sources"]
)
above_fold = next(
(r["above_fold"] for r in data["organic_results"]
if domain in r["url"]),
False
)
return {
"organic_rank": rank,
"above_fold": above_fold,
"in_ai_overview": in_aio,
"aio_present": data["ai_overview"]["present"]
}
# Example
keyword = "best SERP API 2026"
data = get_full_serp_data(keyword, "your_api_key")
result = analyse_for_domain(data, "apiserpent.com")
print(f"Rank: {result['organic_rank']}")
print(f"Above fold: {result['above_fold']}")
print(f"AIO present: {result['aio_present']}")
print(f"In AIO: {result['in_ai_overview']}")
The action matrix
| Rank | In AIO | Action |
|---|---|---|
| Top 3 | Yes | Maintain — you're winning both signals |
| Top 3 | No | Update content structure — add definitions, lists, stats |
| 4-10 | Yes | AIO win offsets rank — prioritise AIO freshness |
| 4-10 | No | Both gaps — start with AIO optimisation |
| 11+ | Yes | AIO is your only visibility — exploit it |
| 11+ | No | Build links first, then AIO structure |
Get started free
10 free Google searches at
apiserpent.com —
no card required. Returns organic rank,
AI Overview full text + sources, pixel
positions, PAA, Featured Snippets in
one JSON response.
Top comments (0)