Realice un seguimiento de las tendencias de búsqueda de Google consultando las mismas palabras clave diariamente, midiendo la actualidad de los resultados y los cambios de contenido, y detectando cuándo comienzan a aparecer nuevos temas de manera consistente en los resultados de búsqueda. Google Trends proporciona datos de interés agregados, pero no muestra la clasificación real del contenido de un tema. Al realizar un seguimiento directo de los resultados de búsqueda, puede ver qué páginas están aumentando, qué temas están generando contenido nuevo y cómo la composición de SERP cambia con el tiempo, lo que le brinda inteligencia de contenido procesable.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Un conjunto de palabras clave para realizar un seguimiento
Guia paso a paso
Paso 1: Definir palabras clave rastreadas
Configure las palabras clave y categorías que desea monitorear para detectar señales de tendencias.
import os, requests, json, datetime, hashlib
API_KEY = os.environ['SCAVIO_API_KEY']
TRACKED = [
{'keyword': 'ai agent framework', 'category': 'tech'},
{'keyword': 'remote work tools', 'category': 'productivity'},
{'keyword': 'search api', 'category': 'tech'},
{'keyword': 'cold email tools', 'category': 'sales'},
]
TRENDS_FILE = 'trends_history.json'
print(f'Tracking {len(TRACKED)} keywords for trends')Paso 2: Capture una instantánea SERP diaria
Busque cada palabra clave y almacene una instantánea de los resultados para comparar.
def capture_snapshot(keyword: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': keyword}, timeout=15)
data = resp.json()
results = data.get('organic_results', [])
return {
'keyword': keyword,
'date': datetime.date.today().isoformat(),
'result_count': len(results),
'top_5_titles': [r.get('title', '') for r in results[:5]],
'top_5_urls': [r.get('link', '') for r in results[:5]],
'content_hash': hashlib.md5(json.dumps([r.get('title', '') for r in results[:5]]).encode()).hexdigest(),
'has_featured_snippet': 'featured_snippet' in data or 'answer_box' in data,
'paa_count': len(data.get('people_also_ask', [])),
}
snap = capture_snapshot('ai agent framework')
print(f"{snap['keyword']}: {snap['result_count']} results, hash={snap['content_hash'][:8]}")Paso 3: Detectar la velocidad del contenido
Mida qué tan rápido cambian los resultados de la búsqueda para identificar temas de tendencia.
def load_history() -> list:
try:
with open(TRENDS_FILE) as f:
return json.load(f)
except FileNotFoundError:
return []
def save_history(history: list):
with open(TRENDS_FILE, 'w') as f:
json.dump(history, f, indent=2)
def content_velocity(keyword: str, history: list) -> dict:
entries = [h for h in history if h['keyword'] == keyword]
entries.sort(key=lambda x: x['date'])
if len(entries) < 2:
return {'velocity': 'unknown', 'changes': 0}
recent = entries[-5:] if len(entries) >= 5 else entries
changes = 0
for i in range(1, len(recent)):
if recent[i]['content_hash'] != recent[i-1]['content_hash']:
changes += 1
velocity = changes / (len(recent) - 1)
return {
'velocity': 'high' if velocity > 0.6 else 'medium' if velocity > 0.3 else 'low',
'changes': changes,
'days_tracked': len(recent),
}
history = load_history()
vel = content_velocity('ai agent framework', history)
print(f"Velocity: {vel['velocity']} ({vel['changes']} changes)")Paso 4: Ejecutar seguimiento diario
Ejecute la rutina de seguimiento diaria y almacene los resultados.
import time
def daily_track(tracked: list) -> list:
history = load_history()
snapshots = []
for item in tracked:
snap = capture_snapshot(item['keyword'])
snap['category'] = item['category']
snapshots.append(snap)
history.append(snap)
vel = content_velocity(item['keyword'], history)
print(f" {item['keyword']}: velocity={vel['velocity']}")
time.sleep(0.3)
save_history(history)
return snapshots
snapshots = daily_track(TRACKED)Paso 5: Generar informe de tendencias
Genere un informe que muestre qué temas tienen tendencia en función de la velocidad del contenido y los cambios de SERP.
def trends_report(tracked: list) -> str:
history = load_history()
lines = [f'Trends Report - {datetime.date.today().isoformat()}', '']
trending = []
for item in tracked:
vel = content_velocity(item['keyword'], history)
entries = [h for h in history if h['keyword'] == item['keyword']]
latest = entries[-1] if entries else {}
status = 'TRENDING' if vel['velocity'] == 'high' else 'STABLE' if vel['velocity'] == 'low' else 'WATCH'
lines.append(f"[{status}] {item['keyword']} ({item['category']})")
lines.append(f" Velocity: {vel['velocity']}, Top: {latest.get('top_5_titles', [''])[0][:50]}")
if vel['velocity'] == 'high':
trending.append(item['keyword'])
lines.append(f'\nTrending topics: {len(trending)}')
report = '\n'.join(lines)
print(report)
return report
trends_report(TRACKED)Ejemplo en Python
import requests, os, hashlib, json
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def serp_hash(keyword):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': keyword}).json()
titles = [r.get('title', '') for r in data.get('organic_results', [])[:5]]
return hashlib.md5(json.dumps(titles).encode()).hexdigest()[:8]
print(serp_hash('ai agent framework'))Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function serpHash(keyword) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: keyword})
});
const titles = ((await r.json()).organic_results || []).slice(0, 5).map(r => r.title);
return titles.join('|').slice(0, 40);
}
serpHash('ai agent framework').then(console.log);Salida esperada
A daily trend tracking system that monitors SERP changes, measures content velocity, and identifies trending topics based on how fast search results are shifting.