Parte de la semana de un especialista SEO se va en buscar una a una las palabras clave importantes y comprobar en qué posición aparece el sitio. Con cinco palabras clave es una costumbre; con quinientas palabras clave, tres ciudades y dos tipos de dispositivo es un trabajo imposible. Y las comprobaciones manuales engañan: la posición que ves en un navegador con sesión iniciada en Google no es la misma que ve un usuario de Izmir en su teléfono.
En este artículo explicamos qué son una SERP (página de resultados del buscador) y el seguimiento de posiciones, por qué el seguimiento manual no escala y cómo empezar a automatizar con la API de Search Console, con un ejemplo en Python que funciona. Después vemos los datos que no da Search Console, por qué cambian los resultados según la ubicación, las partes de un sistema de seguimiento y los límites de este trabajo según las condiciones de servicio. Una nota importante desde el principio: extraer automáticamente los resultados de Google sin permiso infringe las políticas de Google. Este artículo recomienda primero la vía oficial y después las fuentes de datos con licencia.
¿Qué son las SERP y el seguimiento de posiciones?
Una SERP (Search Engine Results Page) es la página de resultados que devuelve un buscador para una consulta. La SERP actual no son solo diez enlaces azules: en la misma página pueden aparecer anuncios, un mapa con el paquete de negocios locales, resultados de shopping, cuadros de «Otras preguntas de los usuarios», vídeos, imágenes y resúmenes generados con IA.
El seguimiento de posiciones consiste en registrar a intervalos regulares dónde aparece tu sitio en esa página para palabras clave concretas. El objetivo no es conocer la posición de un día, sino ver el cambio a lo largo del tiempo: ¿subió la posición tras actualizar el contenido, qué páginas cayeron tras una actualización del algoritmo, se ve en esa ciudad la nueva página de la ciudad?
Las métricas principales del seguimiento de posiciones:
- Posición: el lugar del resultado en la página. En Search Console, este valor es la media de las impresiones de un periodo.
- Impresiones: cuántas veces se mostró tu sitio en los resultados.
- Clics y tasa de clics (CTR): cuántas impresiones se convirtieron en visitas.
- Tipo de aparición: si el resultado es un enlace normal, un resultado enriquecido o un paquete local.
¿Por qué el seguimiento manual no escala?
Las comprobaciones manuales de posiciones son lentas y engañosas por tres motivos:
- Personalización. Una búsqueda con sesión iniciada en una cuenta de Google puede verse influida por tus búsquedas y visitas anteriores. Si visitas a menudo tu propio sitio, puede que lo veas más arriba de lo que realmente está.
- Ubicación. Los resultados de búsqueda cambian según el país, la ciudad y, en consultas con intención local, el barrio del usuario. El resultado que ves desde tu oficina en Estambul no es el que obtiene un usuario en Ankara.
- Dispositivo e idioma. Los resultados en móvil y en escritorio muestran posiciones distintas por el diseño de la página y las funciones de la SERP. El idioma del navegador también influye en los resultados.
A esto se suma la dimensión temporal: los resultados pueden cambiar a lo largo del día. La comprobación de una persona una mañana muestra una sola combinación de estas variables. Las decisiones necesitan la misma medición repetida en las mismas condiciones a intervalos regulares.
¿Por qué empezar con la API de Search Console?
La forma correcta de empezar a seguir las posiciones de tu propio sitio es Google Search Console, porque los datos vienen directamente de Google y se basan en los resultados que ven los usuarios reales. El informe de Rendimiento de la interfaz basta para análisis pequeños; para un seguimiento regular y detallado se usa el método searchanalytics.query de la API de Search Console.
Los datos que ofrece la API:
| Campo | Descripción |
|---|---|
Dimensiones (dimensions) | date, query, page, country, device, searchAppearance y hour para datos por hora |
| Métricas | clicks, impressions, ctr (0-1), position (media) |
Tipo de búsqueda (type) | web (predeterminado), image, video, news, discover, googleNews |
Límite de filas (rowLimit) | Hasta 25.000 por petición; más se pagina con startRow |
Estado de los datos (dataState) | final (predeterminado, cerrado), all (incluye datos recientes aún no cerrados) |
| Permiso | Basta con el scope webmasters.readonly |
Los puntos fuertes de Search Console son que son datos reales, gratuitos y desglosados por país y dispositivo. También hay que conocer sus límites: la posición es una media, los datos de los últimos días pueden no estar cerrados todavía y algunas consultas muy poco buscadas se excluyen de los informes por privacidad.
¿Cómo se obtienen datos de posiciones con la API de Search Console?
La configuración tiene cuatro pasos:
- Crea un proyecto en Google Cloud y activa la API de Search Console.
- Crea una cuenta de servicio y descarga su archivo de clave (JSON). No añadas este archivo al control de versiones.
- Añade la dirección de correo de la cuenta de servicio como usuario de tu propiedad de Search Console. Basta con acceso de lectura. Si te saltas este paso, la API devuelve un error de permisos.
- Instala las librerías de Python:
pip install google-api-python-client google-authEl script siguiente obtiene los datos de un rango de fechas desglosados por consulta, página, país y dispositivo, los lee en páginas de 25.000 filas y los escribe en una base de datos SQLite:
import sqlite3
from datetime import date, timedelta
from google.oauth2 import service_account
from googleapiclient.discovery import build
SITE = "sc-domain:example.com" # propiedad de dominio; para una propiedad de URL usa "https://example.com/"
SCOPES = ["https://www.googleapis.com/auth/webmasters.readonly"]
PAGE_SIZE = 25_000
credentials = service_account.Credentials.from_service_account_file("service-account.json", scopes=SCOPES)
service = build("searchconsole", "v1", credentials=credentials)
def fetch_rows(start, end):
start_row = 0
while True:
body = {
"startDate": start.isoformat(),
"endDate": end.isoformat(),
"dimensions": ["date", "query", "page", "country", "device"],
"rowLimit": PAGE_SIZE,
"startRow": start_row,
}
response = service.searchanalytics().query(siteUrl=SITE, body=body).execute()
rows = response.get("rows", [])
yield from rows
if len(rows) < PAGE_SIZE:
break
start_row += PAGE_SIZE
db = sqlite3.connect("rankings.db")
db.execute("""
CREATE TABLE IF NOT EXISTS performance (
date TEXT, query TEXT, page TEXT, country TEXT, device TEXT,
clicks REAL, impressions REAL, ctr REAL, position REAL,
PRIMARY KEY (date, query, page, country, device)
)
""")
end = date.today() - timedelta(days=3) # los últimos días pueden no estar cerrados todavía
start = end - timedelta(days=6)
with db:
db.executemany(
"INSERT OR REPLACE INTO performance VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
(
(*row["keys"], row["clicks"], row["impressions"], row["ctr"], row["position"])
for row in fetch_rows(start, end)
),
)
print("Número de filas:", db.execute("SELECT COUNT(*) FROM performance").fetchone()[0])El orden de los valores del array keys coincide con el orden de dimensions en la petición; tenlo en cuenta al escribir en la tabla. Gracias a INSERT OR REPLACE, volver a obtener el mismo día actualiza los datos en lugar de duplicarlos.
Una vez tienes los datos, la consulta más útil es el cambio de posición entre dos periodos. Por ejemplo, para comparar la posición media de las búsquedas móviles en Türkiye durante las dos últimas semanas:
WITH period AS (
SELECT query,
AVG(CASE WHEN date >= date('now', '-10 days') THEN position END) AS this_week,
AVG(CASE WHEN date < date('now', '-10 days') THEN position END) AS last_week,
SUM(impressions) AS impressions
FROM performance
WHERE country = 'tur' AND device = 'MOBILE' AND date >= date('now', '-17 days')
GROUP BY query
)
SELECT query, ROUND(last_week, 1) AS before, ROUND(this_week, 1) AS now,
ROUND(this_week - last_week, 1) AS change, impressions
FROM period
WHERE impressions > 100
ORDER BY change DESC
LIMIT 20;Un número de posición más alto significa que la posición bajó; la consulta pone arriba las palabras clave que más han caído. Los códigos de país son códigos ISO de tres letras (tur para Türkiye).
Datos que no da Search Console
Search Console es una fuente fiable sobre tu propio sitio, pero no cubre algunas necesidades del seguimiento de posiciones:
- Las posiciones de la competencia. Search Console solo muestra los datos de tu propio sitio. No puedes ver qué sitio está primero para una palabra clave ni la subida de un competidor.
- Resultados por ciudad. El desglose es por país. No puedes separar las posiciones en Ankara de las de Izmir.
- La vista completa de la SERP. No se informa de cuántos anuncios, paquetes locales o resúmenes de IA hay por encima de tu resultado, es decir, del diseño de página que influye en los clics.
- Consultas sin impresiones. Para una palabra clave en la que no apareces en las primeras páginas, apenas hay datos.
- El estado actual. Los datos se cierran con unos días de retraso.
Hay dos opciones legítimas para cubrir estas carencias: los servicios de datos SERP que ofrecen datos de resultados de búsqueda con licencia y las comprobaciones manuales de ubicación a escala humana. Recoger automáticamente los resultados de un buscador con tu propio script no es una opción, por los motivos que se explican más abajo.
¿Por qué cambian los resultados según la ubicación?
Los buscadores evalúan si una consulta tiene intención local. En consultas informativas como «qué es un proxy», los resultados son en gran parte iguales dentro de un país. En consultas con intención local, como «clínica dental», «cerrajero», «alquiler de coches» o «oficina de paquetería más cercana», los resultados cambian por completo según la ciudad e incluso el barrio.
En Türkiye, esta diferencia destaca en:
- Negocios con sucursales en varias ciudades. Si la página de cada ciudad aparece en su propia ciudad.
- Negocios con zona de servicio. Si una empresa aparece en los resultados locales de los distritos a los que da servicio.
- Tiendas online nacionales. Páginas de categoría que se posicionan de forma distinta en las grandes ciudades.
- Búsquedas en distintos idiomas. Los resultados que ven los usuarios que buscan en inglés desde Türkiye frente a los que buscan en turco.
Para medir a escala las diferencias por ciudad se usan los parámetros de ubicación de los servicios de datos SERP. Verificar de vez en cuando cómo se ven en ciertas ciudades un número limitado de páginas importantes es un trabajo a escala humana: un especialista SEO busca él mismo unas pocas consultas críticas en un perfil de navegador limpio y sin sesión iniciada, con una dirección IP de la ciudad correspondiente. Para puntos de salida por ciudad en Türkiye, consulta nuestra página de ubicaciones de Türkiye, y para saber cómo se montan estas comprobaciones, nuestra página de solución de proxy SEO.
Comparación de fuentes de datos
| Criterio | API de Search Console | Servicio de datos SERP con licencia | Extraer buscadores con tu propio script |
|---|---|---|---|
| ¿De quién son los datos? | Solo de tu propio sitio | De cualquier consulta y sitio | De cualquier consulta y sitio |
| Origen | Datos reales de usuarios de Google | Páginas de resultados recogidas por el servicio | Consultas automatizadas que envías tú |
| Tipo de posición | Media | Instantánea, medición única | Instantánea, medición única |
| Nivel de ciudad | No, país | Normalmente sí | Técnicamente posible |
| Posiciones de la competencia | No | Sí | Sí |
| Clics e impresiones | Sí | No | No |
| Costo | Gratuito | De pago por consulta | Infraestructura y mantenimiento |
| Condiciones de servicio | Vía oficial | Depende del contrato del servicio | Las consultas automatizadas no autorizadas a Google infringen sus políticas |
| Nuestra recomendación | Primera fuente | Para datos de competencia y por ciudad | No usar |
Partes de la automatización
Un sistema de seguimiento de posiciones tiene cuatro partes, sea cual sea la fuente de datos:
- Lista de palabras clave. Para cada palabra clave: la página objetivo, la prioridad, el país y el dispositivo que se siguen y, si hace falta, la ciudad. La lista se guarda en una hoja de cálculo o una base de datos y se actualiza junto con los objetivos de negocio. Las consultas con muchas impresiones de los datos de Search Console pueden añadirse a la lista como candidatas.
- Programación. Para los datos de Search Console basta con una ejecución diaria; los datos se cierran con unos días de retraso de todos modos. Pueden usarse
cronen Linux, el Programador de tareas en Windows o una tarea programada en un pipeline de CI. - Almacenamiento. Cada medición se guarda con marca de tiempo; los datos antiguos no se borran, porque el valor del seguimiento está en comparar con el pasado. SQLite para proyectos pequeños, PostgreSQL o un almacén de datos para uso en equipo.
- Informes y alertas. Un informe semanal de cambios, alertas para las consultas que caen más allá de un umbral y una vista agrupada por grupos de páginas (categoría, blog, páginas de ciudad).
Para que las alertas tengan sentido, filtra las fluctuaciones de las consultas con pocas impresiones; que una consulta con un puñado de impresiones pase de la posición 3 a la 9 puede no significar nada estadísticamente.
Condiciones de servicio y uso responsable
Esta sección es la parte más importante del artículo.
Las políticas contra el spam de Google, en el apartado «tráfico generado por máquinas», definen como infracción enviar consultas automatizadas a Google y extraer resultados con fines de comprobación de posiciones sin permiso expreso, y señalan que esto también infringe las condiciones de servicio de Google. Las condiciones de servicio de Google incluyen además, entre los ejemplos de abuso, usar medios automatizados para acceder a sus servicios infringiendo instrucciones legibles por máquina como robots.txt.
En la práctica, esto significa:
- No extraigas automáticamente los resultados de Google con tu propio script, ni siquiera con un pool de proxies. Cambiar la dirección IP no te deja fuera de una política.
- Para tu propio sitio, usa primero la API de Search Console. Es oficial, gratuita y se basa en datos de usuarios reales.
- Para datos de competencia y por ciudad, elige un servicio de datos con licencia, y comprueba cómo obtiene los datos el servicio y si su contrato cubre tu uso.
- Mantén las comprobaciones manuales a escala humana. Un especialista que busca unas pocas consultas importantes con una conexión que parece venir de otra ciudad no es lo mismo que un script que envía miles de consultas automáticamente.
- Lee también las condiciones de otros buscadores. Cada buscador, Yandex incluido, tiene sus propias condiciones de uso y herramientas de datos oficiales.
Explicamos el marco legal general de la recogida de datos en la web en ¿Es legal el web scraping?, y cómo se leen las reglas de robots.txt en Qué es robots.txt y cómo leerlo.
Casos de uso
- Informe semanal de un equipo de contenidos: datos diarios de la API de Search Console, guardados en SQLite, y una lista semanal de las 20 consultas que más han bajado y subido.
- Visibilidad local de un negocio en varias ciudades: una tendencia por país con Search Console, medición por ciudad con un servicio SERP con licencia y verificación a escala humana de las páginas de ciudad importantes. Las direcciones Proxies residenciales, que salen por conexiones domésticas reales, permiten a un especialista ver esas páginas como las vería un usuario de esa ciudad.
- Visibilidad en buscadores regionales: comprobar los resultados regionales en buscadores distintos de Google; las páginas relacionadas son nuestras soluciones de proxy para Google y proxy para Yandex.
- Investigación de mercado: comparar con datos con licencia la visibilidad en buscadores de los sitios de un sector. La configuración de investigación está en nuestra página de solución de investigación de mercado.
- Vigilar las páginas públicas de la competencia: no los resultados del buscador, sino los cambios de contenido y de precios en los propios sitios de la competencia. Este trabajo sigue robots.txt y las condiciones de los sitios con un límite de velocidad; puede usarse un Proxies rotativos para repartir la carga. Explicamos las reglas en Cómo hacer web scraping sin que te bloqueen.
Errores comunes
- Comprobar posiciones en un navegador con sesión iniciada. La personalización distorsiona el resultado.
- Confundir la posición de Search Console con una posición instantánea. El valor es la media de todas las impresiones del periodo y además puede mezclar distintos países y dispositivos. Míralo con filtros de país y dispositivo.
- Tomar decisiones con los datos de los dos o tres últimos días. Puede que los datos aún no estén cerrados.
- Olvidar el límite de 25.000 filas. En sitios grandes, sin paginación los datos llegan incompletos en silencio.
- Reaccionar a las fluctuaciones de consultas con pocas impresiones. Fija un umbral de impresiones para considerar un cambio significativo.
- No actualizar nunca la lista de palabras clave. Las páginas nuevas del sitio y los cambios en el comportamiento de búsqueda deben reflejarse en la lista.
- Extraer automáticamente los resultados de los buscadores. Infringe las políticas y no es una solución duradera.
Guía de decisión
| Tu necesidad | Recomendación |
|---|---|
| Posiciones por consulta de tu propio sitio | API de Search Console |
| Clics, impresiones y CTR | API de Search Console |
| Desglose por país y dispositivo | API de Search Console |
| Posiciones de la competencia | Servicio de datos SERP con licencia |
| Medición de posiciones por ciudad | Servicio de datos SERP con licencia |
| Verificar cómo se ven unas pocas páginas críticas desde una ciudad | Comprobación manual a escala humana, IP por ciudad |
| Cambios de contenido y precios en sitios de la competencia | Scraping dentro de las reglas, con límite de velocidad |
| Recoger resultados de Google con tu propio script | No recomendado, infringe las políticas |
Preguntas frecuentes
¿Qué significa la posición media en Search Console?
Es la media de la posición más alta de tu sitio en todas las impresiones que recibió para esa consulta en el periodo elegido. Como mezcla posiciones vistas en días, países y dispositivos distintos, puede no coincidir exactamente con la posición que ve un único usuario.
¿La API de Search Console es de pago?
No, la API de Search Console es gratuita. Tiene cuotas de uso; un script de seguimiento de posiciones que hace una sola descarga masiva al día suele quedar muy por debajo.
¿Por qué no aparecen algunas consultas en Search Console?
Para proteger la privacidad de los usuarios, Google excluye de los informes algunas consultas que busca muy poca gente. Por eso el total de clics del desglose por consultas puede parecer menor que el total general.
¿Cómo sigo las posiciones de mi competencia?
Search Console no ofrece esos datos. Para las posiciones de la competencia se usan servicios que ofrecen datos de resultados de búsqueda con licencia. Al elegir un servicio, comprueba cómo se recogen los datos y si el contrato cubre tu uso.
¿Puedo hacer comprobaciones automáticas de posiciones en Google con un proxy?
Las políticas contra el spam de Google prohíben enviar consultas automatizadas para comprobar posiciones sin permiso expreso; cambiar la dirección IP no cambia eso. El uso legítimo de un proxy en este ámbito es que un especialista verifique a escala humana cómo se ven unas pocas páginas críticas desde distintas ciudades.
¿Con qué frecuencia debo seguir las posiciones?
Para los datos de Search Console basta con una descarga diaria; para tomar decisiones, mira las tendencias semanales y mensuales. Las fluctuaciones diarias a menudo no muestran un cambio significativo.
En resumen
La comprobación manual de posiciones no escala y engaña por la personalización y las diferencias de ubicación y dispositivo. Empieza a automatizar con la API de Search Console: obtén datos a diario desglosados por consulta, página, país y dispositivo, pagina de 25.000 en 25.000 filas, guárdalos en una base de datos e informa de los cambios entre periodos. Usa servicios SERP con licencia para los datos de competencia y por ciudad, y comprobaciones a escala humana para ver cómo se ven localmente las páginas importantes. Extraer los resultados de Google con consultas automatizadas no autorizadas infringe sus políticas. Encontrarás opciones para las comprobaciones manuales por ubicación en nuestros servicios de proxy.




