El seguimiento de clasificación SEO requiere verificar periódicamente dónde aparecen sus páginas en los resultados de búsqueda de Google para las palabras clave objetivo. Las herramientas comerciales de SEO cobran cientos de dólares al mes por esta capacidad. La API de Scavio le permite crear su propio rastreador de clasificación con un simple script de Python que almacena posiciones diarias en un CSV o base de datos y le alerta sobre cambios significativos. Este tutorial cubre la creación de un canal de seguimiento de clasificación que verifica hasta 20 palabras clave por ejecución y registra el historial de posiciones.
Requisitos previos
- Python 3.8 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Una lista de palabras clave objetivo y su dominio para realizar un seguimiento
Guia paso a paso
Paso 1: Definir palabras clave y dominio de destino
Cree una lista de cadenas de palabras clave y el dominio que desea rastrear. El script escaneará los resultados en busca de cualquier URL que contenga su dominio.
KEYWORDS = ["python web framework", "fastapi tutorial", "django vs flask"]
TARGET_DOMAIN = "mysite.com"Paso 2: Obtener SERP y encontrar rango
Para cada palabra clave, PUBLICAR en el punto final de Scavio Google y escanear organic_results en busca de una URL que coincida con su dominio. Devuelve la posición si la encuentras.
def get_rank(keyword: str, domain: str) -> int | None:
data = search_google(keyword)
for r in data.get("organic_results", []):
if domain in r.get("link", ""):
return r["position"]
return NonePaso 3: Guardar resultados en CSV
Agregue el resultado de clasificación de cada palabra clave con una marca de tiempo a un archivo CSV para que pueda realizar un seguimiento de las posiciones a lo largo del tiempo.
import csv
from datetime import date
def save_rank(keyword: str, rank: int | None) -> None:
with open("rankings.csv", "a", newline="") as f:
writer = csv.writer(f)
writer.writerow([date.today().isoformat(), keyword, rank or "not ranked"])Paso 4: Ejecute el trabajo de seguimiento diario
Repita todas las palabras clave, obtenga clasificaciones, guarde resultados e imprima un resumen. Programe este script para que se ejecute diariamente con cron o un programador de tareas.
def run_tracker():
for kw in KEYWORDS:
rank = get_rank(kw, TARGET_DOMAIN)
save_rank(kw, rank)
status = f"#{rank}" if rank else "not ranked"
print(f"{kw}: {status}")
run_tracker()Ejemplo en Python
import os
import csv
import requests
from datetime import date
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
KEYWORDS = ["python web framework", "fastapi tutorial"]
TARGET_DOMAIN = "mysite.com"
def search_google(q: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": q, "country_code": "us"})
r.raise_for_status()
return r.json()
def get_rank(keyword: str) -> int | None:
data = search_google(keyword)
for r in data.get("organic_results", []):
if TARGET_DOMAIN in r.get("link", ""):
return r["position"]
return None
def run():
with open("rankings.csv", "a", newline="") as f:
w = csv.writer(f)
for kw in KEYWORDS:
rank = get_rank(kw)
w.writerow([date.today().isoformat(), kw, rank or ""])
print(f"{kw}: {'#' + str(rank) if rank else 'not ranked'}")
if __name__ == "__main__":
run()Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
const fs = require("fs");
const KEYWORDS = ["python web framework", "fastapi tutorial"];
const TARGET_DOMAIN = "mysite.com";
async function getRank(keyword) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: keyword, country_code: "us" })
});
const data = await res.json();
const match = (data.organic_results || []).find(r => r.link.includes(TARGET_DOMAIN));
return match ? match.position : null;
}
async function run() {
const today = new Date().toISOString().slice(0, 10);
for (const kw of KEYWORDS) {
const rank = await getRank(kw);
const line = `${today},${kw},${rank || ""}\n`;
fs.appendFileSync("rankings.csv", line);
console.log(`${kw}: ${rank ? "#" + rank : "not ranked"}`);
}
}
run().catch(console.error);Salida esperada
python web framework: #4
fastapi tutorial: #2
rankings.csv preview:
2026-04-16,python web framework,4
2026-04-16,fastapi tutorial,2