Aperçu
Être cité dans les AI Overviews de Google génère un trafic et une autorité significatifs en 2026. Ce workflow surveille si votre domaine apparaît dans les citations AI Overview pour les requêtes cibles, suit quels concurrents sont cités à la place, et alerte lorsque votre citation est ajoutée ou supprimée. Essentiel pour la stratégie AEO.
Déclencheur
Exécution de surveillance quotidienne pour les requêtes cibles.
Planification
Quotidien
Étapes du workflow
Charger les requêtes cibles
Lire la liste des requêtes pour lesquelles la citation dans AI Overview est importante pour votre domaine.
Extraire les AI Overviews
Pour chaque requête, appelez l'API de recherche Scavio pour extraire le texte de l'AI Overview et les sources citées.
Vérifier la citation du domaine
Pour chaque AI Overview, vérifiez si votre domaine apparaît dans les sources citées. Enregistrez la position et le texte environnant.
Suivre les modifications
Comparez les citations d'aujourd'hui avec celles d'hier. Signalez les nouvelles citations, les citations perdues et les changements de position.
Alerter en cas de modifications
Envoyez des alertes pour les gains et pertes de citations. Incluez la requête, les sources concurrentes et un extrait du texte de l'AI Overview.
Implémentation Python
import requests, os, json
from pathlib import Path
from datetime import datetime
API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY, "Content-Type": "application/json"}
HISTORY_FILE = Path("aio_citations.json")
def check_aio_citations(query: str, target_domain: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": query, "country_code": "us"},
timeout=10,
)
data = resp.json()
aio = data.get("ai_overview", {})
sources = aio.get("sources", [])
cited = any(target_domain in s.get("link", "") for s in sources)
competitors = [s.get("link", "").split("/")[2] for s in sources if target_domain not in s.get("link", "")]
return {
"query": query,
"has_aio": bool(aio),
"cited": cited,
"competitors": competitors[:5],
"aio_text_preview": aio.get("text", "")[:200],
}
def daily_monitor(queries: list, domain: str) -> dict:
today = datetime.now().strftime("%Y-%m-%d")
history = json.loads(HISTORY_FILE.read_text()) if HISTORY_FILE.exists() else {}
today_data = {}
changes = []
for q in queries:
result = check_aio_citations(q, domain)
today_data[q] = result
yesterday = history.get(q, {})
if yesterday.get("cited") and not result["cited"]:
changes.append({"query": q, "change": "LOST_CITATION"})
elif not yesterday.get("cited") and result["cited"]:
changes.append({"query": q, "change": "GAINED_CITATION"})
history.update(today_data)
HISTORY_FILE.write_text(json.dumps(history, indent=2))
return {"date": today, "total_queries": len(queries), "cited_count": sum(1 for d in today_data.values() if d["cited"]), "changes": changes}
report = daily_monitor(["search api for ai agents", "web scraping api alternative"], "scavio.dev")
print(f"Cited in {report['cited_count']}/{report['total_queries']} AI Overviews")
for c in report["changes"]:
print(f" {c['change']}: {c['query']}")Implémentation JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const fs = await import('fs');
async function checkAioCitations(query, targetDomain) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query, country_code:'us'})});
const d = await r.json();
const aio = d.ai_overview || {};
const sources = aio.sources || [];
const cited = sources.some(s=>(s.link||'').includes(targetDomain));
const competitors = sources.filter(s=>!(s.link||'').includes(targetDomain)).map(s=>(s.link||'').split('/')[2]).slice(0,5);
return {query, hasAio:!!d.ai_overview, cited, competitors, aioPreview:(aio.text||'').slice(0,200)};
}
async function dailyMonitor(queries, domain) {
let history = {};
try { history = JSON.parse(fs.readFileSync('aio_citations.json','utf8')); } catch {}
const todayData = {};
const changes = [];
for (const q of queries) {
const result = await checkAioCitations(q, domain);
todayData[q] = result;
const yesterday = history[q] || {};
if (yesterday.cited && !result.cited) changes.push({query:q, change:'LOST_CITATION'});
else if (!yesterday.cited && result.cited) changes.push({query:q, change:'GAINED_CITATION'});
}
Object.assign(history, todayData);
fs.writeFileSync('aio_citations.json', JSON.stringify(history, null, 2));
return {totalQueries:queries.length, citedCount:Object.values(todayData).filter(d=>d.cited).length, changes};
}
const report = await dailyMonitor(['search api for ai agents', 'web scraping api alternative'], 'scavio.dev');
console.log('Cited in '+report.citedCount+'/'+report.totalQueries+' AI Overviews');
for (const c of report.changes) console.log(' '+c.change+': '+c.query);Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA