L'optimisation générative des moteurs de recherche (GEO) vise à faire citer votre contenu comme source dans les réponses générées par l'IA. Les aperçus IA de Google sont la surface GEO la plus mesurable : ils affichent des citations explicites que vous pouvez suivre par programmation. Ce tutoriel construit un outil qui analyse quelles pages sont citées pour vos mots-clés cibles, identifie les modèles dans le contenu cité et suggère des optimisations pour vos propres pages.
Prérequis
- Python 3.8+ installé
- Bibliothèque requests installée
- Une clé API Scavio depuis scavio.dev
- Une liste de mots-clés cibles
Parcours
Étape 1: Analyser les sources des aperçus IA pour les mots-clés cibles
Pour chaque mot-clé, vérifiez quels domaines et types de pages sont cités.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def analyze_citations(keyword: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': keyword}, timeout=10)
data = resp.json()
ai_overview = data.get('ai_overview', {})
sources = ai_overview.get('sources', [])
return {
'keyword': keyword,
'has_ai_overview': bool(ai_overview),
'source_count': len(sources),
'sources': [{'domain': s.get('link', '').split('/')[2] if '//' in s.get('link', '') else '',
'title': s.get('title', ''), 'url': s.get('link', '')} for s in sources],
}Étape 2: Identifier les modèles de citation
Agréger les données sources sur tous les mots-clés pour trouver quels types de pages sont les plus cités.
from collections import Counter
def find_patterns(analyses: list) -> dict:
all_domains = []
all_titles = []
for a in analyses:
for s in a['sources']:
all_domains.append(s['domain'])
all_titles.append(s['title'].lower())
domain_counts = Counter(all_domains).most_common(10)
# Look for content type patterns in titles
patterns = {'comparison': 0, 'review': 0, 'guide': 0, 'list': 0, 'how_to': 0}
for title in all_titles:
if 'vs' in title or 'comparison' in title: patterns['comparison'] += 1
if 'review' in title: patterns['review'] += 1
if 'guide' in title: patterns['guide'] += 1
if 'best' in title or 'top' in title: patterns['list'] += 1
if 'how to' in title: patterns['how_to'] += 1
return {'top_domains': domain_counts, 'content_patterns': patterns}Étape 3: Générer des suggestions d'optimisation
En fonction des modèles de citation, suggérer des types et structures de contenu plus susceptibles d'être cités.
def suggest_optimizations(patterns: dict, my_domain: str) -> list:
suggestions = []
content_patterns = patterns['content_patterns']
top_type = max(content_patterns, key=content_patterns.get)
suggestions.append(f'Most cited content type: {top_type} ({content_patterns[top_type]} citations). Prioritize publishing {top_type} content.')
top_domains = [d for d, _ in patterns['top_domains']]
if my_domain in top_domains:
rank = top_domains.index(my_domain) + 1
suggestions.append(f'Your domain ranks #{rank} in citation frequency. Focus on keywords where you are not yet cited.')
else:
suggestions.append(f'Your domain does not appear in top 10 cited domains. Focus on structured content with clear headings, tables, and FAQ sections.')
suggestions.append('Add FAQ schema markup to improve extraction by AI systems.')
suggestions.append('Include comparison tables with clear column headers for product/feature comparisons.')
return suggestionsÉtape 4: Exécuter l'analyse complète
Traiter tous les mots-clés et générer un rapport d'optimisation GEO complet.
KEYWORDS = ['best crm 2026', 'project management tool comparison', 'invoice software for freelancers']
def geo_report(keywords: list, my_domain: str) -> dict:
analyses = [analyze_citations(kw) for kw in keywords]
patterns = find_patterns(analyses)
suggestions = suggest_optimizations(patterns, my_domain)
return {
'keywords_analyzed': len(keywords),
'with_ai_overview': sum(1 for a in analyses if a['has_ai_overview']),
'patterns': patterns,
'suggestions': suggestions,
'details': analyses
}
report = geo_report(KEYWORDS, 'mydomain.com')
for s in report['suggestions']: print(f'- {s}')Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def geo_analyze(keywords):
for kw in keywords:
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': kw}, timeout=10).json()
sources = data.get('ai_overview', {}).get('sources', [])
domains = [s.get('link', '').split('/')[2] for s in sources if '//' in s.get('link', '')]
print(f'{kw}: {len(sources)} AI Overview sources: {domains}')Exemple JavaScript
async function geoAnalyze(keywords) {
for (const kw of keywords) {
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'google', query: kw})
}).then(r => r.json());
const sources = data.ai_overview?.sources || [];
console.log(`${kw}: ${sources.length} sources`);
}
}Sortie attendue
A GEO analysis report showing citation patterns across target keywords with actionable optimization suggestions.