La optimización del motor generativo (GEO) consiste en hacer que su contenido sea citado como fuente en las respuestas generadas por IA. Las descripciones generales de IA de Google son la superficie GEO más mensurable: muestran citas explícitas que puedes rastrear mediante programación. Este tutorial crea una herramienta que analiza qué páginas se citan para sus palabras clave objetivo, identifica patrones en el contenido citado y sugiere optimizaciones para sus propias páginas.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Una lista de palabras clave objetivo
Guia paso a paso
Paso 1: Analizar fuentes de descripción general de IA para palabras clave objetivo
Para cada palabra clave, verifique qué dominios y tipos de páginas se citan.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def analyze_citations(keyword: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': keyword}, timeout=10)
data = resp.json()
ai_overview = data.get('ai_overview', {})
sources = ai_overview.get('sources', [])
return {
'keyword': keyword,
'has_ai_overview': bool(ai_overview),
'source_count': len(sources),
'sources': [{'domain': s.get('link', '').split('/')[2] if '//' in s.get('link', '') else '',
'title': s.get('title', ''), 'url': s.get('link', '')} for s in sources],
}Paso 2: Identificar patrones de citas
Agregue datos de origen de todas las palabras clave para encontrar qué tipos de páginas se citan más.
from collections import Counter
def find_patterns(analyses: list) -> dict:
all_domains = []
all_titles = []
for a in analyses:
for s in a['sources']:
all_domains.append(s['domain'])
all_titles.append(s['title'].lower())
domain_counts = Counter(all_domains).most_common(10)
# Look for content type patterns in titles
patterns = {'comparison': 0, 'review': 0, 'guide': 0, 'list': 0, 'how_to': 0}
for title in all_titles:
if 'vs' in title or 'comparison' in title: patterns['comparison'] += 1
if 'review' in title: patterns['review'] += 1
if 'guide' in title: patterns['guide'] += 1
if 'best' in title or 'top' in title: patterns['list'] += 1
if 'how to' in title: patterns['how_to'] += 1
return {'top_domains': domain_counts, 'content_patterns': patterns}Paso 3: Generar sugerencias de optimización
Según los patrones de citación, sugiera tipos de contenido y estructuras que tengan más probabilidades de ser citadas.
def suggest_optimizations(patterns: dict, my_domain: str) -> list:
suggestions = []
content_patterns = patterns['content_patterns']
top_type = max(content_patterns, key=content_patterns.get)
suggestions.append(f'Most cited content type: {top_type} ({content_patterns[top_type]} citations). Prioritize publishing {top_type} content.')
top_domains = [d for d, _ in patterns['top_domains']]
if my_domain in top_domains:
rank = top_domains.index(my_domain) + 1
suggestions.append(f'Your domain ranks #{rank} in citation frequency. Focus on keywords where you are not yet cited.')
else:
suggestions.append(f'Your domain does not appear in top 10 cited domains. Focus on structured content with clear headings, tables, and FAQ sections.')
suggestions.append('Add FAQ schema markup to improve extraction by AI systems.')
suggestions.append('Include comparison tables with clear column headers for product/feature comparisons.')
return suggestionsPaso 4: Ejecute el análisis completo
Procese todas las palabras clave y genere un informe completo de optimización GEO.
KEYWORDS = ['best crm 2026', 'project management tool comparison', 'invoice software for freelancers']
def geo_report(keywords: list, my_domain: str) -> dict:
analyses = [analyze_citations(kw) for kw in keywords]
patterns = find_patterns(analyses)
suggestions = suggest_optimizations(patterns, my_domain)
return {
'keywords_analyzed': len(keywords),
'with_ai_overview': sum(1 for a in analyses if a['has_ai_overview']),
'patterns': patterns,
'suggestions': suggestions,
'details': analyses
}
report = geo_report(KEYWORDS, 'mydomain.com')
for s in report['suggestions']: print(f'- {s}')Ejemplo en Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def geo_analyze(keywords):
for kw in keywords:
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': kw}, timeout=10).json()
sources = data.get('ai_overview', {}).get('sources', [])
domains = [s.get('link', '').split('/')[2] for s in sources if '//' in s.get('link', '')]
print(f'{kw}: {len(sources)} AI Overview sources: {domains}')Ejemplo en JavaScript
async function geoAnalyze(keywords) {
for (const kw of keywords) {
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'google', query: kw})
}).then(r => r.json());
const sources = data.ai_overview?.sources || [];
console.log(`${kw}: ${sources.length} sources`);
}
}Salida esperada
A GEO analysis report showing citation patterns across target keywords with actionable optimization suggestions.