Google Search Console te dice dónde cree Google que estás clasificado. Las comprobaciones SERP en vivo le indican dónde se ubica realmente en este momento, incluidas las características SERP que GSC ignora. La combinación de ambas revela palabras clave en las que GSC muestra la posición 3, pero los resultados en vivo muestran la posición 8 debido a que las descripciones generales de IA reducen los resultados orgánicos. Este tutorial valida los datos de GSC con comprobaciones en vivo de Scavio y discrepancias de indicadores.
Requisitos previos
- Python 3.10+
- google-auth y google-api-python-client
- Una clave API de Scavio de scavio.dev
- Acceso a la API de GSC para su sitio
Guia paso a paso
Paso 1: Extraiga las consultas principales de GSC
Autentique y obtenga consultas principales con posiciones informadas.
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},
]Paso 2: Validar con comprobaciones SERP en vivo
Para cada consulta de GSC, ejecute una verificación en vivo y compare posiciones.
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)Paso 3: Verifique las características de SERP que causan discrepancias
Detecte resúmenes de IA, cuadros de PAA y fragmentos que impulsen lo orgánico hacia abajo.
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)}")Paso 4: Ejecutar todo el proceso
Combine extracción, validación y análisis de características de GSC.
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()Ejemplo en 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')Ejemplo en 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);Salida esperada
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)