Suivez les tendances de recherche Google en interrogeant les mêmes mots-clés quotidiennement, en mesurant la fraîcheur des résultats et les changements de contenu, et en détectant quand de nouveaux sujets commencent à apparaître de manière constante dans les résultats de recherche. Google Trends fournit des données d'intérêt agrégées, mais il ne montre pas le classement réel du contenu pour un sujet. En suivant directement les résultats de recherche, vous pouvez voir quelles pages montent, quels sujets génèrent du nouveau contenu et comment la composition du SERP évolue au fil du temps, vous offrant ainsi une intelligence de contenu exploitable.
Prérequis
- Python 3.8+ installé
- bibliothèque requests installée
- Une clé API Scavio depuis scavio.dev
- Un ensemble de mots-clés à suivre
Parcours
Étape 1: Définir les mots-clés suivis
Configurez les mots-clés et catégories que vous souhaitez surveiller pour les signaux de tendance.
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')Étape 2: Capturer un instantané quotidien du SERP
Recherchez chaque mot-clé et stockez un instantané des résultats pour comparaison.
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]}")Étape 3: Détecter la vélocité du contenu
Mesurez la vitesse à laquelle les résultats de recherche changent pour identifier les sujets tendance.
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)")Étape 4: Exécuter le suivi quotidien
Exécutez la routine de suivi quotidien et stockez les résultats.
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)Étape 5: Générer un rapport de tendances
Produisez un rapport indiquant quels sujets sont en hausse en fonction de la vélocité du contenu et des changements du 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)Exemple 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'))Exemple 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);Sortie attendue
A daily trend tracking system that monitors SERP changes, measures content velocity, and identifies trending topics based on how fast search results are shifting.