Medir SERP con Google Colab y Make

Medición de SERP gratis con servicios de Google Cloud y Google Colab

Descubre cómo transformar la tediosa tarea de monitorear masivamente las SERP (Search Engine Results Page) en un proceso totalmente automatizado, eficiente y económico. A lo largo de este tutorial paso a paso, aprenderás a combinar la potencia gratuita de Google Colab con la programación inteligente de Make (Integromat) para crear tu propio sistema de seguimiento de 200 palabras clave, ejecutándose en ciclos de 10 días, a razón de 20 KWs diarias. Este setup inicial está diseñado para que cualquier persona, sin conocimientos previos de programación, pueda implementarlo y dejarlo funcionando en solo 30 a 60 minutos, dependiendo de tu familiaridad con las herramientas. Lo más impactante es el ahorro: al crear tu propia solución, puedes evitar las costosas suscripciones mensuales a plataformas de rank tracking que, para este volumen de KWs, a menudo superan los 50-100€ al mes, ¡lo que se traduce en un ahorro de más de 600€ a 1200€ al año! Prepárate para tomar el control total de tus datos de posicionamiento y escalar tu estrategia SEO sin sacrificar tu presupuesto.

💡 Conceptos Clave Antes de Empezar

  • SERP: La página de resultados que muestra Google (o cualquier motor de búsqueda) cuando haces una consulta. Medir la SERP es ver en qué posición está tu sitio web para una palabra clave.
  • Google Colab: Un entorno de programación en línea gratuito que te permite escribir y ejecutar código Python a través de tu navegador. Lo usaremos para el scraping (extracción) de SERP.
  • Python: El lenguaje de programación que usaremos. No te preocupes, solo tienes que copiar y pegar el código.
  • Make (Integromat): Una herramienta de automatización que conecta diferentes servicios en la nube. Lo usaremos para programar la ejecución diaria del cuaderno de Colab.
  • Keywords (KW): Las palabras clave que quieres medir.
  • Scraping: El proceso de extraer información de una página web de forma automatizada. Importante: El scraping de Google es un área gris y puede requerir proxies o soluciones de pago para evitar bloqueos si se hace muy a menudo. El código que proporciono es una base sencilla.

🛠️ Paso 1: Configurar el Cuaderno de Google Colab

Este cuaderno contendrá el código Python que hará la medición de las SERP.

1.1 Crear el Cuaderno

  1. Ve a Google Drive y crea una nueva carpeta llamada, por ejemplo, SERP_Monitor.
  2. Dentro de esa carpeta, haz clic derecho y selecciona Más > Google Colaboratory (o ve a colab.research.google.com y haz clic en New notebook).
  3. Nombra el cuaderno como SERP_Masiva_Monitor.

1.2 Preparar tu Lista de Palabras Clave (Keywords)

Necesitas un archivo CSV (como si fuera una hoja de cálculo simple) con tus 200 palabras clave.

  1. Abre Google Sheets (o Excel).
  2. En la columna A, escribe tus 200 palabras clave (una por fila).
  3. Guarda o descarga la hoja como un archivo CSV (Comma Separated Values).
  4. Sube este archivo a la misma carpeta de Google Drive (SERP_Monitor). Llama al archivo keywords_200.csv.
Ejercito de robots a tu servicio

1.3 El Código Python

Copia y pega el siguiente código en la primera celda de código de tu cuaderno de Colab. Este código está diseñado para:

  1. Conectarse a tu Google Drive para leer el archivo de Keywords.
  2. Dividir tus 200 KW en 10 grupos de 20.
  3. Ejecutar el scraping solo para el grupo correspondiente al día de ejecución.
  4. Guardar los resultados en un archivo de resultados en Google Drive.
# ==============================================================================
# 🚀 CÓDIGO DE COLAB PARA MEDICIÓN DE SERP MASIVA
# ==============================================================================

# 1. INSTALACIÓN DE LIBRERÍAS
# Necesitamos la librería 'google-search-results' para hacer el scraping de forma más sencilla
# Descomenta y ejecuta si es la primera vez (quita el # de la línea de abajo)
# !pip install google-search-results pandas numpy

# 2. IMPORTAR LIBRERÍAS
import pandas as pd
import numpy as np
import datetime
import time
from google.colab import drive
from serpapi import GoogleSearch

# ==============================================================================
# ⚠️ CONFIGURACIÓN NECESARIA
# 1. Conecta tu Google Drive
drive.mount('/content/drive')

# 2. RUTA A TU ARCHIVO DE PALABRAS CLAVE (AJUSTA EL NOMBRE SI ES NECESARIO)
KW_FILE_PATH = '/content/drive/MyDrive/SERP_Monitor/keywords_200.csv' 
# Si el archivo tiene encabezado, ajústalo. Aquí asumimos que la columna A son las KW
KW_COLUMN_NAME = 0 # 0 si no tiene encabezado o el nombre de la columna si lo tiene

# 3. TU CLAVE DE SERPAPI - **NECESARIA para hacer el scraping de Google**
# Necesitarás registrarte en Serper.dev o similar y obtener una clave gratuita/de prueba.
SERP_API_KEY = 'TU_CLAVE_DE_SERPAPI_AQUI' 

# 4. DOMINIO A MONITOREAR (Ajusta esto con el dominio de tu proyecto)
TARGET_DOMAIN = 'ejemplo.com' 

# 5. CONFIGURACIÓN DEL PROYECTO
TOTAL_KWS = 200
KWS_PER_DAY = 20
TOTAL_DAYS = 10 
# ==============================================================================

# 3. CÁLCULO DEL DÍA DE EJECUCIÓN
# Calcula el día actual del ciclo de 10 días
# Nota: Esto asume que ejecutas el código una vez al día.
today = datetime.date.today()
start_date = datetime.date(2025, 11, 7) # <<--- 🟢 AJUSTA a la fecha de tu primera ejecución
day_of_cycle = (today - start_date).days % TOTAL_DAYS

# Asegúrate de que el día esté entre 0 y 9 (10 días)
if day_of_cycle < 0:
    day_of_cycle = 0

print(f"✅ Hoy es el Día {day_of_cycle + 1} de un ciclo de {TOTAL_DAYS} días.")

# 4. CARGAR Y PREPARAR DATOS
try:
    if KW_COLUMN_NAME == 0:
        df_kws = pd.read_csv(KW_FILE_PATH, header=None)
    else:
        df_kws = pd.read_csv(KW_FILE_PATH)
        
    kws_list = df_kws[KW_COLUMN_NAME].tolist()
    
    # 5. SELECCIONAR EL SUB-GRUPO DE KWs PARA HOY
    start_index = day_of_cycle * KWS_PER_DAY
    end_index = start_index + KWS_PER_DAY
    
    # Asegura que no se exceda el total de KWs
    kws_to_process = kws_list[start_index:end_index]
    
    print(f"   Procesando KWs desde el índice {start_index} hasta {end_index-1} (Total: {len(kws_to_process)} KWs).")
    
except FileNotFoundError:
    print(f"❌ ERROR: No se encontró el archivo de KWs en la ruta: {KW_FILE_PATH}")
    kws_to_process = []
except Exception as e:
    print(f"❌ ERROR al cargar las KWs: {e}")
    kws_to_process = []


# 6. FUNCIÓN DE SCRAPING DE SERP
def get_rank(keyword, domain, api_key):
    try:
        # Parámetros para la búsqueda en Google (España, idioma español)
        params = {
            "engine": "google",
            "q": keyword,
            "api_key": api_key,
            "hl": "es", # Interfaz en español
            "gl": "es", # Resultados de España
            "num": 100 # Pedimos 100 resultados para asegurar que cubra la mayoría de rankings
        }

        search = GoogleSearch(params)
        results = search.get_dict()

        # Buscar el dominio en los resultados orgánicos
        if 'organic_results' in results:
            for i, result in enumerate(results['organic_results']):
                if domain in result.get('link', ''):
                    # La posición es el índice + 1
                    return i + 1, result.get('link', 'URL No Encontrada')
            return 0, 'No Encontrado en Top 100' # No encontrado
        
        # En caso de error o que no haya resultados orgánicos
        return -1, 'Error/No Orgánicos'

    except Exception as e:
        print(f"⚠️ Error al hacer scraping para '{keyword}': {e}")
        return -2, 'Fallo de API'


# 7. EJECUTAR MEDICIÓN Y ALMACENAR RESULTADOS
results_data = []

if kws_to_process:
    print("\n🚀 Iniciando medición de SERP...")
    
    for i, kw in enumerate(kws_to_process):
        # Muestra el progreso
        print(f"   [{i+1}/{len(kws_to_process)}] - Midiento: {kw}")
        
        # Obtener la posición (rank) y URL
        rank, url = get_rank(kw, TARGET_DOMAIN, SERP_API_KEY)
        
        # Almacenar el resultado
        results_data.append({
            'Fecha': today.strftime("%Y-%m-%d"),
            'Keyword': kw,
            'Dominio': TARGET_DOMAIN,
            'Dia_Ciclo': day_of_cycle + 1,
            'Posicion': rank,
            'URL_Encontrada': url
        })
        
        # Pequeña pausa para no saturar la API (ajustar si es necesario)
        time.sleep(0.5) 

    # 8. GUARDAR RESULTADOS EN GOOGLE DRIVE
    new_results_df = pd.DataFrame(results_data)

    # Ruta del archivo de resultados consolidado
    RESULTS_FILE_PATH = '/content/drive/MyDrive/SERP_Monitor/SERP_Monitor_Resultados.csv'

    try:
        # Cargar el archivo de resultados existente (si existe)
        existing_df = pd.read_csv(RESULTS_FILE_PATH)
        # Combinar los nuevos resultados con los existentes
        final_df = pd.concat([existing_df, new_results_df], ignore_index=True)
    except FileNotFoundError:
        # Si no existe, los nuevos resultados son el archivo final
        final_df = new_results_df
        print("   Creando archivo de resultados nuevo.")
    
    # Guardar el archivo consolidado en Drive
    final_df.to_csv(RESULTS_FILE_PATH, index=False)
    print(f"\n✅ Medición completa para el Día {day_of_cycle + 1}. Resultados guardados en: {RESULTS_FILE_PATH}")
    print(f"   Total de entradas en el archivo final: {len(final_df)}.")

else:
    print("🛑 No hay KWs para procesar. Revisa el archivo y la configuración.")

# ==============================================================================

1.4 Primeras Pruebas en Colab

  1. Ajustar Configuración: Reemplaza los valores de configuración en el código con tu información:
    • SERP_API_KEY: Clave de tu servicio de scraping (SerpApi, Serper.dev, etc.). Esta clave es esencial para obtener datos de Google de forma programática sin ser bloqueado.
    • TARGET_DOMAIN: Tu dominio, por ejemplo, misitioweb.com.
    • start_date: La fecha en la que ejecutarás el código por primera vez.
  2. Ejecutar la primera celda:
    • Haz clic en el botón de Play (▶️) de la primera celda.
    • Cuando te lo pida, haz clic en Connect to Google Drive y permite el acceso.
    • Verifica que te muestre el mensaje: Hoy es el Día 1 de un ciclo de 10 días. y que procese las primeras 20 KWs.
  3. Revisar los resultados: Ve a tu carpeta en Google Drive y comprueba que se haya creado el archivo SERP_Monitor_Resultados.csv.

📅 Paso 2: Programación con Make (Integromat)

Ahora necesitas que Colab se ejecute automáticamente cada día. Usaremos Make para enviar una señal a Colab.

2.1 Configuración de Make

  1. Regístrate en Make (si no lo has hecho ya).
  2. Crea un nuevo Scenario (Escenario).
  3. Elige el módulo Google Colaboratory.
  4. Selecciona la acción Run a Notebook.

2.2 Conectar Google Drive a Make

  1. Connection: Haz clic en Add para conectar tu cuenta de Google Drive/Google Colab.
  2. Notebook: Busca y selecciona tu cuaderno SERP_Masiva_Monitor en tu Google Drive.
  3. Runbook: Déjalo vacío o usa la opción predeterminada.

2.3 Programar la Ejecución

  1. En la parte inferior de la interfaz de Make, haz clic en el icono de Clock/Scheduling.
  2. Configura la programación para que se ejecute Every Day (Cada Día) a la hora que desees (ej. 10:00 AM).
  3. Guarda el escenario y actívalo.

💡 Funcionamiento del Ciclo

  • Cada día, a la hora programada, Make enviará la orden de ejecución al cuaderno de Colab.
  • El código Python leerá la fecha actual, calculará a qué día del ciclo de 10 corresponde, y solo medirá las 20 KWs asignadas a ese día.
  • En 10 días, habrás medido la totalidad de tus 200 KWs.
  • Al final de cada día, el archivo SERP_Monitor_Resultados.csv tendrá las nuevas 20 mediciones agregadas.

📈 Paso 3: Análisis de Resultados

Una vez que el archivo SERP_Monitor_Resultados.csv se consolida, puedes analizarlo:

  1. Abre el CSV en Google Sheets (haz clic derecho > Abrir con > Hojas de cálculo de Google).
  2. Verás todas las mediciones con la columna Posicion y Dia_Ciclo.
  3. Puedes crear una Tabla Dinámica para ver el ranking promedio de cada palabra clave o filtrar para ver la evolución de tu proyecto.