Las descripciones generales de IA de Google ahora aparecen para una gran parte de consultas informativas, y ser citado en ellas genera un tráfico significativo. Los rastreadores de clasificación tradicionales cobran cientos de dólares por monitorear las citas de AI Overview. Puede crear su propio rastreador con una API de búsqueda que devuelva datos de descripción general de AI en su respuesta SERP. Este tutorial crea un canal de monitoreo de citas que verifica sus palabras clave objetivo, registra qué dominios se citan y realiza un seguimiento de su porcentaje de citas a lo largo del tiempo. Cada cheque cuesta $0.005 a través de la API de Scavio.
Requisitos previos
- Python 3.9+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Una lista de palabras clave de las que espera descripciones generales de IA
Guia paso a paso
Paso 1: Comprobar si una consulta desencadena una descripción general de IA
Busque una palabra clave y verifique si la respuesta SERP incluye una sección de descripción general de AI. No todas las consultas activan una, por lo que este paso filtra su lista de palabras clave.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def check_ai_overview(query: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us'})
data = resp.json()
ai_overview = data.get('ai_overview', {})
has_overview = bool(ai_overview and ai_overview.get('text'))
citations = ai_overview.get('citations', []) if has_overview else []
return {
'query': query,
'has_ai_overview': has_overview,
'citation_count': len(citations),
'cited_domains': [c.get('domain', '') for c in citations]
}
result = check_ai_overview('what is the best crm for startups')
print(f'AI Overview: {result["has_ai_overview"]}, Citations: {result["citation_count"]}')Paso 2: Verifique por lotes palabras clave y encuentre patrones de citas
Revise su lista de palabras clave y recopile datos de citas. Identifique qué dominios se citan con más frecuencia en sus palabras clave objetivo.
import time
from collections import Counter
def batch_citation_check(keywords: list) -> dict:
results = []
domain_counts = Counter()
for kw in keywords:
data = check_ai_overview(kw)
results.append(data)
for domain in data['cited_domains']:
domain_counts[domain] += 1
time.sleep(0.3)
return {
'total_keywords': len(keywords),
'with_ai_overview': sum(1 for r in results if r['has_ai_overview']),
'top_cited_domains': domain_counts.most_common(10),
'details': results
}
keywords = [
'what is the best crm for startups',
'how to choose a crm 2026',
'crm software comparison',
'best free crm tools'
]
report = batch_citation_check(keywords)
print(f'{report["with_ai_overview"]}/{report["total_keywords"]} keywords have AI Overviews')Paso 3: Realice un seguimiento del porcentaje de citas de su dominio
Calcule la frecuencia con la que aparece su dominio en las citas de AI Overview en comparación con la competencia. Esta es su participación en la descripción general de la IA.
def citation_share(report: dict, your_domain: str) -> dict:
total_citations = sum(count for _, count in report['top_cited_domains'])
your_citations = sum(count for domain, count in report['top_cited_domains']
if your_domain in domain)
share = (your_citations / max(total_citations, 1)) * 100
# Find keywords where you are cited
your_keywords = [r['query'] for r in report['details']
if any(your_domain in d for d in r['cited_domains'])]
# Find keywords where you are NOT cited
missing_keywords = [r['query'] for r in report['details']
if r['has_ai_overview'] and
not any(your_domain in d for d in r['cited_domains'])]
return {
'your_domain': your_domain,
'citation_share': round(share, 1),
'your_citations': your_citations,
'total_citations': total_citations,
'cited_keywords': your_keywords,
'missing_keywords': missing_keywords
}
share = citation_share(report, 'yoursite.com')
print(f'Citation share: {share["citation_share"]}% ({share["your_citations"]}/{share["total_citations"]})')
print(f'Missing from: {share["missing_keywords"]}')Paso 4: Almacenar datos históricos para seguimiento de tendencias
Guarde datos de citas diarias para realizar un seguimiento de si sus esfuerzos de OEA están funcionando a lo largo del tiempo. Un archivo JSON simple almacena la serie temporal.
import json
from datetime import date
def save_citation_history(report: dict, your_domain: str) -> None:
history_file = 'citation_history.json'
try:
with open(history_file) as f:
history = json.load(f)
except FileNotFoundError:
history = []
share = citation_share(report, your_domain)
history.append({
'date': date.today().isoformat(),
'citation_share': share['citation_share'],
'your_citations': share['your_citations'],
'total_citations': share['total_citations'],
'keywords_checked': report['total_keywords'],
'keywords_with_overview': report['with_ai_overview']
})
with open(history_file, 'w') as f:
json.dump(history, f, indent=2)
print(f'Saved citation data for {date.today()}')
if len(history) > 1:
prev = history[-2]['citation_share']
curr = share['citation_share']
delta = curr - prev
print(f'Trend: {prev}% -> {curr}% ({delta:+.1f}%)')Paso 5: Calcular los costos de seguimiento
Presupuesta el seguimiento de tu descripción general de IA en función del recuento de palabras clave y la frecuencia de comprobación. Las comprobaciones diarias de 100 palabras clave cuestan 15 dólares al mes.
def monitoring_budget(num_keywords: int, checks_per_day: int = 1) -> dict:
daily_credits = num_keywords * checks_per_day
monthly_credits = daily_credits * 30
monthly_cost = monthly_credits * 0.005
return {
'keywords': num_keywords,
'daily_checks': checks_per_day,
'monthly_credits': monthly_credits,
'monthly_cost': f'${monthly_cost:.2f}',
'plan': '$30/7K' if monthly_credits <= 7000
else '$100/28K' if monthly_credits <= 28000
else '$250/85K',
'vs_semrush': f'Semrush Position Tracking: $139.95+/mo'
}
for n in [50, 100, 500]:
b = monitoring_budget(n)
print(f'{b["keywords"]} keywords: {b["monthly_cost"]}/mo ({b["plan"]} plan)')
print(f'Comparison: Semrush starts at $139.95/mo for similar tracking')Ejemplo en Python
import os, requests, time, json
from collections import Counter
from datetime import date
API_KEY = os.environ['SCAVIO_API_KEY']
def check_ai_overview(query):
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us'})
data = resp.json()
aio = data.get('ai_overview', {})
citations = aio.get('citations', []) if aio.get('text') else []
return {'query': query, 'has_aio': bool(aio.get('text')),
'domains': [c.get('domain', '') for c in citations]}
def main():
keywords = ['best crm startups', 'crm comparison 2026', 'free crm tools']
domain_counts = Counter()
for kw in keywords:
result = check_ai_overview(kw)
print(f'{"+AIO" if result["has_aio"] else "-AIO"} {kw}: {len(result["domains"])} citations')
for d in result['domains']:
domain_counts[d] += 1
time.sleep(0.3)
print(f'\nTop cited domains:')
for domain, count in domain_counts.most_common(5):
print(f' {domain}: {count}')
print(f'Cost: ${len(keywords) * 0.005:.3f}')
if __name__ == '__main__':
main()Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
async function checkAiOverview(query) {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query, country_code: 'us' })
});
const data = await resp.json();
const aio = data.ai_overview || {};
return {
query,
hasAio: Boolean(aio.text),
domains: (aio.citations || []).map(c => c.domain || '')
};
}
async function main() {
const keywords = ['best crm startups', 'crm comparison 2026'];
const domainCounts = {};
for (const kw of keywords) {
const r = await checkAiOverview(kw);
console.log(`${r.hasAio ? '+AIO' : '-AIO'} ${kw}: ${r.domains.length} citations`);
r.domains.forEach(d => { domainCounts[d] = (domainCounts[d] || 0) + 1; });
}
console.log('Top domains:', Object.entries(domainCounts).sort((a,b) => b[1]-a[1]).slice(0,5));
}
main().catch(console.error);Salida esperada
+AIO what is the best crm for startups: 4 citations
+AIO how to choose a crm 2026: 3 citations
+AIO crm software comparison: 5 citations
-AIO best free crm tools: 0 citations
3/4 keywords have AI Overviews
Citation share: 8.3% (1/12)
Missing from: ['crm software comparison']
50 keywords: $7.50/mo ($30/7K plan)
100 keywords: $15.00/mo ($30/7K plan)
500 keywords: $75.00/mo ($100/28K plan)