Aperçu
Ce workflow surveille les changements SERP suite aux annonces du Google I/O 2026 : expansion du mode IA à 1B+ d'utilisateurs, déploiement de Gemini 3.5 Flash, agents d'information et refonte de la boîte de recherche. Il suit quotidiennement les changements de classement organique et les modifications du contenu AI Overview, en alertant sur les mouvements significatifs. Essentiel pour les équipes SEO répondant à la plus grande mise à jour de recherche Google de 2026.
Déclencheur
Planification Cron (tous les jours à 7h UTC)
Planification
S'exécute quotidiennement à 7h00 UTC
Étapes du workflow
Charger les mots-clés suivis
Lire les mots-clés surveillés pour les changements SERP post-I/O.
Interroger avec extraction AI Overview
Rechercher chaque mot-clé via Scavio avec ai_overview activé pour les données organiques et IA.
Comparer avec la référence pré-I/O
Vérifier les changements de position organique et les différences de contenu AI Overview par rapport à la référence pré-I/O.
Calculer la sévérité des changements
Noter l'ampleur des changements de chaque mot-clé : déplacements de position, nouvelles/pertes de citations IA, modifications du contenu AI Overview.
Alerter sur les changements significatifs
Envoyer des alertes pour les mots-clés avec des changements de position > 3 ou des changements de statut de citation IA.
Implémentation Python
import requests
import json
from datetime import datetime
from pathlib import Path
API_KEY = "your_scavio_api_key"
DOMAIN = "yourdomain.com"
def monitor_serp_changes(keywords: list[str]) -> dict:
baseline_path = Path("serp_baseline.json")
baseline = json.loads(baseline_path.read_text()) if baseline_path.exists() else {}
current = {}
alerts = []
for kw in keywords:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": kw, "ai_overview": True},
timeout=15,
)
if not res.ok:
continue
data = res.json()
organic_pos = None
for r in data.get("organic", []):
if DOMAIN in r.get("link", ""):
organic_pos = r.get("position")
break
ai_text = data.get("ai_overview", {}).get("text", "")
ai_cited = DOMAIN in ai_text.lower()
current[kw] = {"position": organic_pos, "ai_cited": ai_cited}
prev = baseline.get(kw, {})
if prev.get("position") and organic_pos:
pos_change = organic_pos - prev["position"]
if abs(pos_change) >= 3:
alerts.append({"keyword": kw, "type": "position", "prev": prev["position"], "current": organic_pos, "change": pos_change})
if prev.get("ai_cited") != ai_cited:
alerts.append({"keyword": kw, "type": "ai_citation", "prev": prev.get("ai_cited", False), "current": ai_cited})
baseline_path.write_text(json.dumps(current, indent=2))
date = datetime.utcnow().strftime("%Y-%m-%d")
print(f"SERP Monitor {date}: {len(keywords)} keywords, {len(alerts)} alerts")
for a in alerts:
print(f" [{a['type']}] {a['keyword']}: {a.get('prev')} -> {a.get('current')}")
return {"date": date, "alerts": alerts}
monitor_serp_changes(["best search api", "serp api pricing", "ai overview tracking"])Implémentation JavaScript
const API_KEY = "your_scavio_api_key";
const DOMAIN = "yourdomain.com";
async function monitorChanges(keywords) {
const results = [];
for (const kw of keywords) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform: "google", query: kw, ai_overview: true }),
});
const data = await res.json();
const match = (data.organic ?? []).find((r) => (r.link ?? "").includes(DOMAIN));
const aiText = data.ai_overview?.text ?? "";
results.push({ keyword: kw, position: match?.position ?? null, aiCited: aiText.toLowerCase().includes(DOMAIN) });
}
console.log(`Monitored ${results.length} keywords`);
return results;
}
await monitorChanges(["best search api", "serp api pricing"]);Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA