Resumen
Getting cited in Google AI Overviews drives significativo trafico y authority in 2026. Este flujo de trabajo monitorea si your dominio appears in AI Overview citaciones for objetivo consultas, rastrea cual competidores son cited instead, y alertas cuando your citacion es added o dropped. Esencial for AEO estrategia.
Desencadenador
Diario monitoreo ejecutar for objetivo consultas.
Programación
Diario
Pasos del flujo de trabajo
Cargar Target Consultas
Leer el lista of consultas donde AI Overview citacion matters for your dominio.
Extraer AI Overviews
For cada consulta, call Scavio search API to extraer el AI Overview text y citacion fuentes.
Verificar Domain Citacion
For cada AI Overview, verificar if your dominio appears in el citacion fuentes. Record position y surrounding text.
Rastrear Cambios
Comparar today's citaciones contra yesterday's. Marcar nuevo citaciones, lost citaciones, y position cambios.
Alert on Cambios
Enviar alertas for citacion gains y losses. Include el consulta, competing fuentes, y AI Overview text excerpt.
Implementacion en 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']}")Implementacion en 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);Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA