What Are Google AI Overviews?
Google AI Overviews (formerly Search Generative Experience / SGE) are AI-generated summaries that appear at the top of search results. They synthesize information from multiple sources to answer queries directly in the SERP.
For SEO, AI Overviews represent a paradigm shift:
- CTR redistribution: Users may get answers without clicking through
- New visibility metric: Being cited in AI Overviews matters more than position 1
- Source selection: Google chooses which sites to cite in summaries
- Dynamic content: AI summaries change frequently based on Google's model updates
Why Monitor AI Overviews
- Brand visibility: Is your brand or content cited in AI summaries?
- Competitor intelligence: Which competitors appear in AI Overviews?
- Content optimization: What type of content triggers AI citation?
- Share of voice: What percentage of AI Overviews cite your domain?
Detecting AI Overviews with a SERP API
import requests
from datetime import datetime
API_KEY = "your-key"
URL = "https://api.serpbase.dev/google/search"
def check_ai_overview(keyword, gl="us"):
resp = requests.post(URL, headers={
"X-API-Key": API_KEY, "Content-Type": "application/json"
}, json={"q": keyword, "gl": gl})
data = resp.json()
ai_overview = data.get("ai_overview")
if ai_overview:
return {
"keyword": keyword,
"has_overview": True,
"summary": ai_overview.get("summary", "")[:300],
"sources": [
{"title": s.get("title", ""), "url": s.get("link", "")}
for s in ai_overview.get("sources", [])
],
"source_count": len(ai_overview.get("sources", [])),
"checked_at": datetime.now().isoformat()
}
return {
"keyword": keyword,
"has_overview": False,
"checked_at": datetime.now().isoformat()
}
Building an AI Overview Monitor
Step 1: Batch Check Keywords
def scan_keywords_for_ai(keywords, gl="us"):
results = []
for kw in keywords:
result = check_ai_overview(kw, gl)
results.append(result)
coverage = sum(1 for r in results if r["has_overview"])
print(f"[{coverage}/{len(results)}] {kw}: {'✅' if result['has_overview'] else '❌'}")
return results
Step 2: Brand Mention Detection in AI Summaries
def detect_brand_in_ai(keywords, brand_name):
mentions = []
for kw in keywords:
result = check_ai_overview(kw)
if result["has_overview"]:
# Check summary text
if brand_name.lower() in result["summary"].lower():
mentions.append({
"keyword": kw,
"summary_snippet": result["summary"][:200],
"match_type": "summary_text"
})
# Check sources
for source in result["sources"]:
if brand_name.lower() in source["url"].lower():
mentions.append({
"keyword": kw,
"source_url": source["url"],
"match_type": "source_url"
})
return mentions
Step 3: Track AI Overview Changes
import json
import os
AI_HISTORY = "ai_overview_history.json"
def track_ai_changes(keywords, gl="us"):
history = {}
if os.path.exists(AI_HISTORY):
with open(AI_HISTORY) as f:
history = json.load(f)
for kw in keywords:
current = check_ai_overview(kw, gl)
previous = history.get(kw)
if previous:
if current["has_overview"] and not previous["has_overview"]:
print(f"🔥 NEW AI Overview on '{kw}'")
elif not current["has_overview"] and previous["has_overview"]:
print(f"💨 AI Overview LOST on '{kw}'")
elif current["has_overview"] and previous["has_overview"]:
if current["summary"] != previous.get("summary"):
print(f"🔄 AI Overview UPDATED on '{kw}'")
history[kw] = current
with open(AI_HISTORY, "w") as f:
json.dump(history, f, indent=2)
return history
Step 4: Competitor AI Share of Voice
def ai_share_of_voice(keywords, competitors):
"""Track which competitors are cited in AI Overview sources"""
presence = {comp: 0 for comp in competitors}
total_overviews = 0
for kw in keywords:
result = check_ai_overview(kw)
if result["has_overview"]:
total_overviews += 1
for source in result["sources"]:
for comp in competitors:
if comp in source["url"].lower():
presence[comp] += 1
print("AI Overview Share of Voice:\n")
for comp, count in sorted(presence.items(), key=lambda x: -x[1]):
pct = (count / total_overviews * 100) if total_overviews > 0 else 0
print(f" {comp}: {count} appearances ({pct:.1f}%)")
print(f"\nTotal AI Overviews detected: {total_overviews}")
return presence
Step 5: Content Optimization for AI Overviews
def suggest_ai_optimization(keywords):
"""Analyze what types of content trigger AI Overviews"""
suggestions = []
for kw in keywords:
result = check_ai_overview(kw)
if result["has_overview"]:
# Analyze source patterns
source_domains = [
s["url"].split("/")[2] for s in result["sources"]
]
suggestion = {
"keyword": kw,
"ai_summary_length": len(result["summary"]),
"source_count": result["source_count"],
"top_source_domains": source_domains[:3],
"summary_preview": result["summary"][:150]
}
suggestions.append(suggestion)
# Find common patterns
from collections import Counter
all_domains = []
for s in suggestions:
all_domains.extend(s["top_source_domains"])
top_sources = Counter(all_domains).most_common(5)
print("Top domains cited in AI Overviews:")
for domain, count in top_sources:
print(f" {domain}: {count} times")
AI Overview Monitoring Dashboard
def print_ai_dashboard(keywords):
print("=== AI Overview Dashboard ===\n")
total = len(keywords)
with_ai = 0
for kw in keywords:
result = check_ai_overview(kw)
if result["has_overview"]:
with_ai += 1
sources = ", ".join(
s["url"].split("/")[2] for s in result["sources"][:3]
)
print(f"✅ {kw}")
print(f" Sources: {sources}")
else:
print(f"❌ {kw}")
print(f"\nCoverage: {with_ai}/{total} ({with_ai/total*100:.1f}%)")
Cost Analysis
| Keywords | Check Frequency | Monthly Searches | Cost |
|---|---|---|---|
| 100 | Daily | 3,000 | $1.50 |
| 500 | Daily | 15,000 | $7.50 |
| 2,000 | Weekly | ~8,000 | $4 |
AI Overview Trends to Watch
Based on monitoring data:
- Informational queries dominate: 60%+ of "what is" and "how to" queries trigger AI Overviews
- Sources from authoritative domains: Wikipedia, .gov, .edu, and major publishers are most cited
- Summaries change weekly: Google updates AI models and summaries rotate
- Local queries less affected: AI Overviews less common for local intent searches
- YMYL topics have lower AI Overview rates: Medical and financial queries get fewer AI summaries
Best Practices
- Check daily — AI Overviews change frequently as Google updates models
- Track source URLs — being cited matters more than just appearing
- Compare against organic rankings — AI Overview citation may not correlate with position 1
- Optimize for direct answers — concise, factual content is more likely to be cited
- Monitor for brand mentions — both positive and negative AI citations