Google Search Console vous indique où Google pense que vous êtes classé. Les vérifications SERP en direct vous indiquent où vous vous classez réellement à l'instant, y compris les fonctionnalités SERP que GSC ignore. La combinaison des deux révèle des mots-clés où GSC affiche la position 3 mais les résultats en direct montrent la position 8 en raison des AI Overviews qui repoussent les résultats organiques. Ce tutoriel valide les données GSC avec des vérifications Scavio en direct et signale les divergences.
Prérequis
- Python 3.10+
- google-auth et google-api-python-client
- Une clé API Scavio depuis scavio.dev
- Accès à l'API GSC pour votre site
Parcours
Étape 1: Extraire les principales requêtes de GSC
Authentifiez-vous et extrayez les principales requêtes avec les positions signalées.
import os, requests
SK = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': SK, 'Content-Type': 'application/json'}
# Simulated GSC data (replace with real GSC API call)
gsc_data = [
{'query': 'serp api python', 'gsc_position': 3.2, 'clicks': 120},
{'query': 'web scraping api', 'gsc_position': 5.8, 'clicks': 85},
{'query': 'tiktok data api', 'gsc_position': 2.1, 'clicks': 200},
]Étape 2: Valider avec des vérifications SERP en direct
Pour chaque requête GSC, effectuez une vérification en direct et comparez les positions.
def live_rank(query, domain):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': query, 'country_code': 'us'}).json()
for r in data.get('organic_results', []):
if domain in r.get('link', ''): return r['position']
return None
def validate(gsc_data, domain='mysite.com'):
for row in gsc_data:
live = live_rank(row['query'], domain)
diff = live - row['gsc_position'] if live else None
flag = f' MISMATCH ({diff:+.0f})' if diff and abs(diff) >= 3 else ''
print(f" {row['query']:30} GSC: {row['gsc_position']:.1f} Live: {live or 'N/A'}{flag}")
print(f'Cost: ${len(gsc_data) * 0.005:.3f}')
validate(gsc_data)Étape 3: Vérifier les fonctionnalités SERP à l'origine des divergences
Détecter les AI Overviews, les boîtes PAA et les extraits qui repoussent les résultats organiques.
def check_features(query):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': query, 'country_code': 'us'}).json()
features = []
if data.get('answer_box'): features.append('answer_box')
if data.get('ai_overview'): features.append('ai_overview')
if data.get('related_questions'): features.append(f"paa({len(data['related_questions'])})")
return features
for row in gsc_data:
features = check_features(row['query'])
if features: print(f" {row['query']}: {', '.join(features)}")Étape 4: Exécuter le pipeline complet
Combiner l'extraction GSC, la validation et l'analyse des fonctionnalités.
def run_pipeline():
print('Validating GSC data...')
validate(gsc_data)
print('\nSERP features affecting rankings:')
for row in gsc_data:
f = check_features(row['query'])
if f: print(f" {row['query']}: {', '.join(f)}")
print(f'\nTotal cost: ${len(gsc_data) * 2 * 0.005:.3f}')
run_pipeline()Exemple Python
import os, requests
SK = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': SK, 'Content-Type': 'application/json'}
def check(query, domain):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': query, 'country_code': 'us'}).json()
pos = next((r['position'] for r in data.get('organic_results', []) if domain in r.get('link', '')), None)
has_ao = bool(data.get('ai_overview'))
print(f'{query}: pos={pos}, ai_overview={has_ao}')
check('serp api python', 'mysite.com')Exemple JavaScript
const SK = process.env.SCAVIO_API_KEY;
const SH = { 'x-api-key': SK, 'Content-Type': 'application/json' };
async function check(query, domain) {
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH, body: JSON.stringify({ query, country_code: 'us' })
}).then(r => r.json());
const match = (data.organic_results || []).find(r => r.link.includes(domain));
console.log(`${query}: pos=${match?.position || 'N/A'}, ai=${!!data.ai_overview}`);
}
check('serp api python', 'mysite.com').catch(console.error);Sortie attendue
serp api python GSC: 3.2 Live: 4
web scraping api GSC: 5.8 Live: 9 MISMATCH (+3)
tiktok data api GSC: 2.1 Live: 2
Cost: $0.015
web scraping api: ai_overview, paa(4)