El problema
Las auditorías GEO requieren comparar el rendimiento de las citas de AI Overview con el de la competencia. Esto significa buscar cada palabra clave, anotar qué sitios se citan, realizar un seguimiento de los cambios en las citas a lo largo del tiempo y generar informes comparativos que muestren su dominio frente a los de la competencia en descripciones generales de IA. La generación manual de estos informes tarda entre 4 y 8 horas por cliente al mes para las agencias y proporciona solo una instantánea de un momento determinado.
La solucion de Scavio
Cree un generador de informes automatizado que consulte a Scavio para cada palabra clave objetivo con ai_overview habilitado, extraiga dominios citados, rastree su dominio y los dominios de la competencia en citas y genere informes comparativos semanales. La canalización produce informes formateados que muestran: palabras clave en las que se le cita, palabras clave en las que se cita a los competidores, palabras clave en las que aparecieron descripciones generales de IA pero no se cita a nadie del conjunto competitivo y tendencias semanales.
Antes
Antes de la automatización, los informes de auditoría de GEO eran proyectos manuales de 4 a 8 horas por cliente. La agencia solo pudo entregar instantáneas mensuales, faltando los cambios de citas que ocurrieron y se revirtieron entre informes.
Después
Después de la automatización, los informes semanales de comparación GEO se generan en minutos para cada cliente. Los informes muestran tendencias de citas, nuevas citas obtenidas, citas perdidas y brechas competitivas. Las reuniones con los clientes se centran en la estrategia en lugar de en la recopilación de datos.
Para quien es
Agencias de SEO que entregan informes de auditoría GEO a los clientes. Equipos de SEO internos que rastrean el rendimiento de las citas competitivas de AI Overview. Los equipos de contenido miden si las actualizaciones de contenido mejoran las tasas de citas de IA.
Beneficios clave
- Informes semanales de comparación GEO automatizados frente a instantáneas manuales mensuales
- Seguimiento de citas de su dominio frente al dominio de la competencia por palabra clave
- Análisis de la brecha de citas: palabras clave en las que se cita a los competidores pero a usted no
- Visualización de tendencias que muestra las ganancias y pérdidas de citas a lo largo del tiempo
- Costo de generación de informes: $2,50 por semana para 500 palabras clave
Ejemplo en Python
import requests
import json
from datetime import datetime
from pathlib import Path
from collections import defaultdict
API_KEY = "your_scavio_api_key"
def audit_citations(keywords: list[str], my_domain: str, competitor_domains: list[str]) -> dict:
all_domains = [my_domain] + competitor_domains
results = defaultdict(lambda: {"cited_in": [], "not_cited_in": [], "no_ai_overview": []})
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,
)
res.raise_for_status()
data = res.json()
ai = data.get("ai_overview")
if not ai:
for domain in all_domains:
results[domain]["no_ai_overview"].append(kw)
continue
citations = [c.get("source", "") for c in ai.get("citations", [])]
for domain in all_domains:
if any(domain in cite for cite in citations):
results[domain]["cited_in"].append(kw)
else:
results[domain]["not_cited_in"].append(kw)
report = {
"date": datetime.utcnow().strftime("%Y-%m-%d"),
"keywords_audited": len(keywords),
"domains": {},
}
for domain in all_domains:
d = results[domain]
report["domains"][domain] = {
"citation_count": len(d["cited_in"]),
"citation_rate": f"{len(d['cited_in']) / len(keywords) * 100:.1f}%",
"cited_keywords": d["cited_in"],
"gaps": d["not_cited_in"][:10],
}
Path(f"geo_comparison_{report['date']}.json").write_text(json.dumps(report, indent=2))
return report
report = audit_citations(
["best search api", "serp api pricing", "web scraping tools"],
"scavio.dev",
["serpapi.com", "tavily.com"]
)
for domain, data in report["domains"].items():
print(f"{domain}: {data['citation_count']} citations ({data['citation_rate']})")Ejemplo en JavaScript
const API_KEY = "your_scavio_api_key";
async function auditCitations(keywords, myDomain, competitorDomains) {
const allDomains = [myDomain, ...competitorDomains];
const results = {};
for (const d of allDomains) results[d] = { cited: [], notCited: [] };
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 citations = (data.ai_overview?.citations ?? []).map((c) => c.source ?? "");
for (const d of allDomains) {
if (citations.some((c) => c.includes(d))) results[d].cited.push(kw);
else results[d].notCited.push(kw);
}
}
for (const [domain, data] of Object.entries(results)) {
console.log(`${domain}: ${data.cited.length}/${keywords.length} citations (${(data.cited.length / keywords.length * 100).toFixed(1)}%)`);
}
}
await auditCitations(["best search api", "serp api pricing"], "scavio.dev", ["serpapi.com", "tavily.com"]);Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA