ScavioScavio
ProductoPreciosDocumentación
Iniciar sesionComenzar
  1. Inicio
  2. Tutoriales
  3. Cómo crear un rastreador de clasificación para los trabajadores de Cloudflare
Tutorial

Cómo crear un rastreador de clasificación para los trabajadores de Cloudflare

Cree un rastreador de clasificación sin servidor utilizando Cloudflare Workers y Scavio API. Seguimiento diario de palabras clave sin infraestructura.

Obtener clave API gratisDocumentacion API

Los rastreadores de clasificación deben ejecutarse a diario, pero no justifican un servidor completo. Este tutorial crea un rastreador de clasificación en Cloudflare Workers que se ejecuta según una programación cron, verifica las posiciones de sus palabras clave a través de la API de Scavio, almacena los resultados en KV y expone un punto final del panel. Infraestructura cero, nivel de trabajadores gratuito, $0,005/palabra clave.

Requisitos previos

  • Nodo.js 18+
  • Wrangler CLI (npm install -g wrangler)
  • Una clave API de Scavio de scavio.dev
  • Cuenta de Cloudflare (el nivel gratuito funciona)

Guia paso a paso

Paso 1: Configurar el trabajador con el activador programado

Cree un trabajador de Cloudflare que se ejecute diariamente mediante un activador cron.

JavaScript
// wrangler.toml config:
// name = "rank-tracker"
// [triggers]
// crons = ["0 6 * * *"]  # Daily at 6 AM UTC
// [[kv_namespaces]]
// binding = "RANKINGS"
// id = "your-kv-namespace-id"

export default {
  async scheduled(event, env, ctx) {
    const keywords = ['search api python', 'mcp search tool', 'serp api alternative', 'web search api pricing'];
    const domain = 'scavio.dev';
    const results = [];
    for (const kw of keywords) {
      const resp = await fetch('https://api.scavio.dev/api/v1/search', {
        method: 'POST',
        headers: { 'x-api-key': env.SCAVIO_API_KEY, 'Content-Type': 'application/json' },
        body: JSON.stringify({ query: kw, country_code: 'us' }),
      });
      const data = await resp.json();
      const organic = data.organic_results || [];
      const pos = organic.findIndex(r => r.link?.includes(domain));
      results.push({ keyword: kw, position: pos >= 0 ? pos + 1 : null, date: new Date().toISOString().split('T')[0] });
    }
    // Store in KV
    const today = new Date().toISOString().split('T')[0];
    await env.RANKINGS.put(`rankings:${today}`, JSON.stringify(results));
    console.log(`Tracked ${results.length} keywords. Cost: $${(keywords.length * 0.005).toFixed(3)}`);
  },

  async fetch(request, env) {
    // Dashboard endpoint
    const url = new URL(request.url);
    if (url.pathname === '/api/rankings') {
      const today = new Date().toISOString().split('T')[0];
      const data = await env.RANKINGS.get(`rankings:${today}`);
      return new Response(data || '[]', { headers: { 'Content-Type': 'application/json' } });
    }
    return new Response('Rank Tracker. GET /api/rankings for today.');
  }
};

Paso 2: Agregar almacenamiento de tendencias históricas

Almacene 30 días de historial de clasificación y calcule tendencias.

JavaScript
async function getHistory(env, days = 30) {
  const history = [];
  for (let i = 0; i < days; i++) {
    const date = new Date(Date.now() - i * 86400000).toISOString().split('T')[0];
    const data = await env.RANKINGS.get(`rankings:${date}`);
    if (data) {
      history.push({ date, rankings: JSON.parse(data) });
    }
  }
  return history.reverse();
}

async function getTrends(env, keyword) {
  const history = await getHistory(env);
  const positions = [];
  for (const day of history) {
    const entry = day.rankings.find(r => r.keyword === keyword);
    if (entry) {
      positions.push({ date: day.date, position: entry.position });
    }
  }
  if (positions.length < 2) return { trend: 'insufficient_data', positions };
  const latest = positions[positions.length - 1].position;
  const previous = positions[positions.length - 2].position;
  let trend = 'stable';
  if (latest && previous) {
    if (latest < previous) trend = 'improving';
    else if (latest > previous) trend = 'declining';
  } else if (latest && !previous) {
    trend = 'new_ranking';
  } else if (!latest && previous) {
    trend = 'lost_ranking';
  }
  return { trend, positions, latest, previous };
}

// Usage in fetch handler:
// const trends = await getTrends(env, 'search api python');
// return new Response(JSON.stringify(trends));
console.log('Trend tracking configured with 30-day KV history');

Paso 3: Implementar y verificar

Implemente el trabajador y pruebe el punto final de clasificación.

JavaScript
// Deploy steps:
// 1. wrangler secret put SCAVIO_API_KEY
// 2. wrangler deploy
// 3. wrangler kv:namespace create RANKINGS

// Test locally:
// wrangler dev
// curl http://localhost:8787/api/rankings

// Test the scheduled trigger:
// wrangler dev --test-scheduled

// Verify in production:
async function verifyDeployment() {
  const resp = await fetch('https://rank-tracker.your-subdomain.workers.dev/api/rankings');
  const data = await resp.json();
  console.log(`Rankings for today: ${data.length} keywords`);
  for (const r of data) {
    const pos = r.position ? `#${r.position}` : 'not found';
    console.log(`  ${r.keyword.padEnd(30)} | ${pos}`);
  }
}

// Cost breakdown:
// Cloudflare Workers: Free tier (100K req/day)
// Scavio API: 4 keywords x $0.005 = $0.020/day
// Monthly: $0.60/month for daily tracking
// vs. Ahrefs: $99/mo, SEMrush: $129/mo
console.log('Deployed. $0.020/day for 4 keywords.');
console.log('Monthly: $0.60 vs Ahrefs $99/mo');

Ejemplo en Python

Python
import os, requests
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}

def track(keyword, domain):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SH, json={'query': keyword, 'country_code': 'us'}, timeout=10).json()
    pos = next((i+1 for i, r in enumerate(data.get('organic_results', [])) if domain in r.get('link', '')), None)
    print(f'{keyword[:30]:30} | {f"#{pos}" if pos else "absent"}')

for kw in ['search api python', 'mcp search tool']:
    track(kw, 'scavio.dev')

Ejemplo en JavaScript

JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
for (const kw of ['search api python', 'mcp search tool']) {
  const data = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST', headers: SH,
    body: JSON.stringify({ query: kw, country_code: 'us' })
  }).then(r => r.json());
  const pos = (data.organic_results || []).findIndex(r => r.link?.includes('scavio.dev'));
  console.log(`${kw}: ${pos >= 0 ? '#' + (pos+1) : 'absent'}`);
}

Salida esperada

JSON
Tracked 4 keywords. Cost: $0.020

Rankings for today: 4 keywords
  search api python              | #3
  mcp search tool                | #2
  serp api alternative           | #5
  web search api pricing         | #4

Deployed. $0.020/day for 4 keywords.
Monthly: $0.60 vs Ahrefs $99/mo

Tutoriales relacionados

  • Cómo utilizar Scavio como fuente de datos para OpenSEO
  • Cómo crear un panel de SEO con Retool y Scavio
  • Cómo crear un rastreador de clasificación de palabras clave hecho por usted mismo

Preguntas frecuentes

La mayoria de los desarrolladores completan este tutorial en 15 a 30 minutos. Necesitaras una clave API de Scavio (el plan gratuito funciona) y un entorno de Python o JavaScript.

Nodo.js 18+. Wrangler CLI (npm install -g wrangler). Una clave API de Scavio de scavio.dev. Cuenta de Cloudflare (el nivel gratuito funciona). Una clave API de Scavio te da 50 creditos gratuitos al registrarte.

Si. El plan gratuito incluye 50 creditos al registrarte, mas que suficiente para completar este tutorial y crear un prototipo funcional.

Scavio tiene un paquete nativo de LangChain (langchain-scavio), un servidor MCP y una API REST simple que funciona con cualquier cliente HTTP. Este tutorial usa the raw REST API, pero puedes adaptarlo al framework que prefieras.

Recursos relacionados

Best Of

Las mejores fuentes de datos de SEO para trabajadores de Cloudflare (2026)

Read more
Best Of

La mejor API para informes SEO de agencias en 2026

Read more
Solution

Cree una capa API de SEO de costo predecible

Read more
Comparison

Search APIs (Scavio, Tavily, SerpAPI) vs Headless Browser (Playwright, Puppeteer, Browserbase)

Read more
Glossary

Panorama de proveedores de API de búsqueda (2026)

Read more
Glossary

Informes API de SEO para agencias

Read more

Empieza a construir

Cree un rastreador de clasificación sin servidor utilizando Cloudflare Workers y Scavio API. Seguimiento diario de palabras clave sin infraestructura.

Obtener clave API gratuitaLeer la documentacion
ScavioScavio

API de busqueda en tiempo real para agentes de IA. Busca en todas las plataformas, no solo en Google.

Producto

  • Funciones
  • Precios
  • Panel
  • Afiliados

Desarrolladores

  • Documentacion
  • Referencia de API
  • Inicio rapido
  • Integracion MCP
  • Python SDK

Alternativas

  • Alternativa a Tavily
  • Alternativa a SerpAPI
  • Alternativa a Firecrawl
  • Alternativa a Exa

Herramientas

  • Formateador JSON
  • cURL a codigo
  • Contador de tokens
  • Todas las herramientas

© 2026 Scavio. Todos los derechos reservados.

Featured on TAAFT
Terminos de servicioPolitica de privacidad