OpenSEO: la alternativa open source a Semrush y Ahrefs que conectas a Claude Code
OpenSEO es una herramienta SEO open source que se presenta como alternativa a Semrush y Ahrefs: investigación de palabras clave, seguimiento de posiciones, análisis de competidores, backlinks, auditorías de sitio y visibilidad en respuestas de IA. Tiene licencia MIT, se puede instalar en tu propio equipo con Docker y, lo que la diferencia de verdad, expone un servidor MCP para que Claude Code, Codex, Cursor o ChatGPT trabajen con datos SEO reales en lugar de dar consejos genéricos.
En este artículo leemos el código de la versión v0.1.14 (19 de octubre de 2026) y su documentación para explicarte qué hace, cómo está construida, cuánto cuesta usarla, cómo instalarla y cómo sacarle partido desde Claude Code con ejemplos concretos.

Qué es OpenSEO y quién lo hace
- Repositorio: github.com/every-app/open-seo
- Web y versión alojada: openseo.so
- Versión analizada: v0.1.14, publicada el 19 de octubre de 2026. Saca versiones casi cada semana.
- Licencia: MIT (copyright de Ben Senescu). Puedes usarlo, modificarlo y venderlo como servicio sin publicar tus cambios.
- Modelo de negocio: el código es libre; la versión alojada cuesta 10 $ al mes e incluye 10 $ de uso.
La idea del proyecto se resume en su propio README: "una herramienta SEO para *la gente*". Si Semrush o Ahrefs se te van de precio o te sobran el 80 % de sus menús, OpenSEO ofrece los flujos de trabajo principales con pago por uso y sin suscripción obligatoria.
Hay un matiz importante desde el principio: OpenSEO no tiene un índice propio de la web. Los datos de volumen de búsqueda, dificultad, SERP y backlinks los saca de la API de [DataForSEO](https://dataforseo.com), un proveedor de datos SEO de pago por uso. OpenSEO pone encima la aplicación, los proyectos, el seguimiento programado, las integraciones con Google y el MCP para agentes.
Qué hace: los flujos de trabajo principales
| Flujo | Qué incluye |
|---|---|
| Investigación de palabras clave | Ideas a partir de semillas, volumen, CPC, competencia, dificultad (KD), intención, tendencia de 12 meses y SERP de cada keyword |
| Visión de dominio | Tráfico orgánico estimado, palabras clave por las que posiciona un dominio o una URL, competidores en la SERP |
| Backlinks | Enlaces, dominios de referencia, crecimiento, enlaces nuevos y perdidos, enlaces rotos y puntuación de spam |
| Seguimiento de posiciones | *Rank tracking* en Google por keyword, dispositivo e idioma, y mallas de posiciones locales en Google Maps |
| Auditoría de sitio | Rastreo de tus páginas con incidencias por gravedad: enlaces rotos, metadescripciones, H1, títulos duplicados, páginas huérfanas, `noindex` |
| Visibilidad en IA | Seguimiento de preguntas en ChatGPT, Gemini y Google AI Overviews: si te mencionan, si te citan y qué competidores aparecen |
| Datos propios | Google Search Console y Google Analytics 4 conectados al proyecto |
| Indexación | Envío de URLs nuevas o cambiadas a Bing y otros buscadores con IndexNow (novedad de la v0.1.14) |
| Agentes | Servidor MCP, 12 skills de SEO y un plugin para Claude Code, Codex y Cursor |


Cómo funciona por dentro
El repositorio es una aplicación TypeScript moderna pensada para ejecutarse en Cloudflare Workers, aunque también corre en local dentro de Docker gracias a workerd, el runtime de Workers:
- Frontend y servidor: TanStack Start con React 19 y componentes shadcn (sobre Base UI, no Radix).
- Base de datos: Drizzle ORM con SQLite (D1 en Cloudflare, archivo local en Docker) o Postgres. Todo el esquema se mantiene compatible con los dos.
- Autenticación: tres modos (
AUTH_MODE):local_noauthpara uso personal,cloudflare_accesspara instalaciones en internet yhosted(Better Auth) para la versión de pago. - MCP: el SDK oficial
@modelcontextprotocol/sdk1.30 sobre HTTP en la ruta/mcp, con OAuth o clave API en la versión alojada y sin autenticación en el modo local. - Tareas programadas: un *cron* cada cinco minutos lanza las comprobaciones de posiciones y de visibilidad en IA que tocan.

El servidor MCP es la parte más trabajada. Contamos más de 70 herramientas en src/server/mcp/tools: research_keywords, get_keyword_metrics, get_serp_results, get_ranked_keywords, get_backlinks_overview, run_site_audit, get_search_console_performance, inspect_urls, create_rank_tracker, estimate_rank_tracker_cost, submit_indexnow_urls, get_project_context, save_report y muchas más. Dos decisiones de diseño marcan la diferencia frente a conectar tu agente a la API de DataForSEO a pelo:
- Respuestas recortadas. La herramienta de keywords elimina la tendencia de 12 meses (según el proyecto, cerca del 80 % de cada fila) y la SERP llega como posición, dominio, título, URL y descripción. Menos tokens, menos errores de lectura del agente.
- El agente conoce el precio antes de gastar. Hay herramientas de estimación (
estimate_rank_tracker_cost,estimate_ai_visibility_cost) y las búsquedas de SERP repetidas en el mismo proyecto en 12 horas no se vuelven a cobrar.
A eso se suma el contexto de proyecto: negocio, objetivo, posicionamiento, competidores, páginas clave, preferencias de redacción y un registro de investigaciones. Lo leen todas las skills al empezar, así que no le repites a Claude quién eres en cada sesión ni pagas dos veces la misma investigación.
Cuánto cuesta OpenSEO de verdad
Tienes dos caminos y en los dos pagas los datos que consumes:
| Alojado (openseo.so) | Self-hosting (Docker o Cloudflare) | |
|---|---|---|
| Software | 10 $/mes con 10 $ de uso incluidos | Gratis (MIT) |
| Datos | Precio de DataForSEO + 28 % | Precio de DataForSEO, pagado directamente |
| Search Console, Analytics, contexto, informes | Sin coste de créditos | Gratis |
| Mantenimiento | Ninguno | Tuyo |
En la versión alojada, 1 crédito = 0,001 $. Con las tarifas que el propio proyecto documenta en su calculadora de precios (web/src/routes/_marketing/pricing.tsx):
- Una investigación de palabras clave con 150 resultados: unos 0,042 $ en DataForSEO, 54 créditos en la versión alojada.
- Un perfil de backlinks con un año de historia: 79 créditos.
- Una comprobación de posición (top 40, un dispositivo): unos 0,002 $.
- Una pregunta a un motor de IA para el seguimiento de visibilidad: 2 créditos.
Si haces self-hosting, DataForSEO regala 1 $ de saldo al crear la cuenta para probar, pero la recarga mínima es de 50 $. Para un blog o un negocio pequeño, ese saldo dura meses; para una agencia que vigila muchos clientes, la versión alojada a 10 $ puede salir igual o más barata que montarlo todo tú.
Opción 1: usar OpenSEO en Claude Code con el plugin
Es la vía más rápida si ya usas Claude Code y te vale la versión alojada. El plugin instala de una vez el MCP y las 12 skills. Dentro de Claude Code:
/plugin marketplace add every-app/open-seo
/plugin install openseo@openseoSi la salida dice Run /reload-plugins to activate., ejecuta /reload-plugins. Claude Code te pedirá iniciar sesión en OpenSEO; si no lo hace, abre /mcp, elige OpenSEO y completa el login.
Las skills quedan con el prefijo del plugin:
/openseo:seo-project-setup
/openseo:seo-coach
/openseo:keyword-research
/openseo:keyword-clustering
/openseo:competitive-landscape
/openseo:competitor-analysis
/openseo:seo-audit
/openseo:local-seo
/openseo:link-prospecting
/openseo:ai-prompt-research
/openseo:ai-visibility-audit
/openseo:seo-reportSi solo quieres el MCP, sin skills:
claude mcp add --transport http --scope user openseo https://app.openseo.so/mcpPara entornos sin navegador (CI, servidores), crea una clave en Settings → API keys de la app y pásala como cabecera:
claude mcp add --transport http --scope user openseo https://app.openseo.so/mcp --header "Authorization: Bearer oseo_TU_CLAVE"Si es la primera vez que instalas plugins o skills, te lo explicamos en qué son las skills de Claude Code y cómo instalarlas.
Opción 2: instalar OpenSEO con Docker en tu equipo
Es el camino que el proyecto recomienda para probarlo o para uso personal. Necesitas Docker Desktop (o Docker Engine con Compose) y una cuenta de DataForSEO.
Paso 1: conseguir la clave de DataForSEO
En app.dataforseo.com/api-access pulsa "Send by email" y copia la credencial larga marcada como Base64. Es la codificación en base64 de email:contraseña_api. Si solo tienes el email y la contraseña de la API, puedes generarla tú:
printf 'tu@email.com:TU_PASSWORD_API' | base64En Windows con PowerShell:
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("tu@email.com:TU_PASSWORD_API"))Ojo: no es la "API key" del panel de DataForSEO, es el base64 de usuario y contraseña. Es el error más común.
Paso 2: clonar y configurar
git clone https://github.com/every-app/open-seo.git
cd open-seo
cp .env.example .envEdita .env y descomenta al menos la clave:
DATAFORSEO_API_KEY=ZW1haWxAZWplbXBsby5jb206cGFzc3dvcmQ=
# Opcional: puerto (por defecto 3001)
PORT=3001
# Opcional: desactivar la telemetría anónima
OPENSEO_TELEMETRY_DISABLED=1
# Opcional: funciones de IA (agente SAM, ideas de prompts)
# OPENROUTER_API_KEY=La telemetría envía recuentos agregados (instalaciones, proyectos, uso de funciones) con un ID aleatorio; según su documentación no incluye URLs, keywords, prompts ni correos. Con OPENSEO_TELEMETRY_DISABLED=1 o DO_NOT_TRACK=1 la apagas.
Paso 3: arrancar
docker compose up -d
docker compose logs -fEl compose.yaml usa la imagen ghcr.io/every-app/open-seo:latest. El primer arranque compila la aplicación dentro del contenedor y tarda uno o dos minutos; los siguientes reutilizan la compilación mientras no cambien las variables. Antes de compilar verás un informe de comprobaciones ([ ok ], [warn], [info]) que te dice qué falta.
Abre http://localhost:3001. Para comprobar el estado desde la terminal:
curl http://localhost:3001/api/health
docker compose psPaso 4: conectar Claude Code a tu instalación local
El MCP también está en tu instancia, sin login en modo local:
claude mcp add --transport http --scope user openseo-local http://localhost:3001/mcpY las skills, que en self-hosting no llegan con el plugin (el plugin apunta solo a la versión alojada), se instalan aparte:
npx skills add every-app/open-seo --skill '*' --agent claude-codeAntes de instalar skills de terceros conviene revisarlas; en el post de SkillSpector explicamos cómo escanearlas en busca de instrucciones peligrosas.
Seguridad: no lo publiques tal cual
En Docker, OpenSEO corre con AUTH_MODE=local_noauth: no hay login, todo el que llegue al puerto es administrador. Por eso el compose.yaml publica el puerto solo en 127.0.0.1. Si lo quieres accesible desde fuera, ponlo detrás de un proxy inverso con autenticación (Cloudflare Access, un túnel privado, Tailscale) y añade el dominio:
ALLOWED_HOST=seo.tudominio.com docker compose up -dPara un equipo o varios dispositivos, el README recomienda la instalación en Cloudflare (funciona en el plan gratuito y ya trae Cloudflare Access) antes que Coolify, Railway o Dokploy, al menos hasta que simplifiquen esos despliegues.
Opción 3: OpenSEO en tu propia cuenta de Cloudflare
Resumen de docs/SELF_HOSTING_CLOUDFLARE.md para quien quiera la versión de equipo:
git clone https://github.com/every-app/open-seo.git
cd open-seo
corepack enable
pnpm install
pnpm alchemy login
pnpm alchemy cloudflare bootstrapRequisitos: Node 22.6 o superior, pnpm y una cuenta de Cloudflare con R2 activado (pide un método de pago aunque no pases del plan gratuito). Después creas .env.selfhost con tu clave de DataForSEO y despliegas con pnpm deploy:selfhost --yes, que crea la base de datos, los Workers y la puerta de login de Cloudflare Access. La renderización de JavaScript en las auditorías necesita el plan de pago de Workers.
Ejemplos concretos con Claude Code
Con el MCP conectado, la regla del proyecto es empezar por un flujo concreto en vez de pedir "haz SEO". Estos son cuatro casos con las herramientas que se llaman por debajo.
1. Configurar el proyecto una vez
/openseo:seo-project-setup
Mi web es midominio.com, vendemos software de facturación para pymes en Ecuador.La skill rellena el contexto del proyecto (update_project_context): negocio, objetivo, competidores y páginas clave. Es gratis y todas las demás skills lo reutilizan.
2. Investigación de palabras clave en un mercado concreto
/openseo:keyword-research
Semillas: "facturación electrónica", "software de facturación". Mercado: Ecuador, español.Según su SKILL.md, la skill lee primero el contexto (get_project_context), revisa si ya se investigó lo mismo en los últimos 30 días para no volver a pagarlo, llama a research_keywords con 1-5 semillas y 150 resultados, mira la SERP de las candidatas con get_serp_results y, si tienes Search Console conectado, cruza tus consultas en posiciones 5-20 con get_keyword_metrics. El resultado se guarda como informe en el proyecto con seo-report.
3. Estimar el coste antes de vigilar posiciones

Crea un rank tracker para midominio.com con estas 25 keywords, móvil, semanal.
Dime cuánto cuesta al mes antes de activarlo.El agente usa create_rank_tracker y estimate_rank_tracker_cost. Las comprobaciones programadas van por la cola de tareas de DataForSEO, que cuesta en torno a un tercio de la API en directo. En Docker, el propio arranque avisa de que los seguimientos de posiciones programados no se ejecutan solos: lánzalos desde la página Rank Tracking.
4. Ver si las IA te recomiendan
/openseo:ai-prompt-research
¿Qué preguntan en ChatGPT sobre software de facturación en Ecuador y a quién citan?Las herramientas de visibilidad en IA (research_ai_visibility_prompts, run_ai_visibility_check, get_ai_visibility_sources) muestran el coste antes de lanzar nada y luego permiten programar el seguimiento diario, semanal o mensual.

Errores frecuentes
DATAFORSEO_API_KEY: Not set — all SEO data features will be unavailable until it is. El contenedor arranca, pero sin datos. Pon la clave en .env y recrea el contenedor: docker compose up -d --force-recreate open-seo. Un docker compose up -d a secas no siempre recoge los cambios del .env.
Set, but does not decode as base64 of login:password. Has pegado la API key del panel o el texto sin codificar. Genera el base64 con printf 'email:password' | base64.
"Blocked request" al entrar por tu dominio. Lo devuelve Vite cuando accedes por un host que no es localhost. Añade ALLOWED_HOST=tudominio.com y recrea el contenedor.
/reload-plugins dice 0 skills. Es normal: ese resumen solo cuenta la carpeta commands/ del plugin. Prueba una skill directamente, por ejemplo /openseo:seo-audit.
/plugin uninstall openseo@openseo responde "not installed in this project". Lo instalaste en otro ámbito. Usa claude plugin uninstall openseo@openseo --scope user.
Codex: Authorization server response missing required issuer. Afecta a Codex 0.143-0.146. Actualiza a 0.147.0 o superior, o conéctalo con clave API.
Pros y contras
A favor:
- Licencia MIT y código legible: puedes adaptarlo o construir tu propia herramienta encima.
- Pagas por uso. Para un sitio pequeño, unos pocos dólares al mes frente a los 129 $/mes del plan Lite de Ahrefs que cita el proyecto.
- El MCP y las skills están muy cuidados: respuestas recortadas, costes visibles, contexto compartido entre sesiones y entre Claude, Codex, Cursor y ChatGPT.
- Search Console, Analytics, informes y contexto no consumen créditos.
En contra:
- Depende de DataForSEO: sin esa cuenta no hay datos, y la primera recarga es de 50 $.
- Versión 0.1: cambia cada semana y algunas funciones (Search Console en self-hosting, renderizado de JavaScript) piden configuración extra.
- El modo Docker no tiene login; publicarlo en internet requiere poner tú la autenticación.
- La interfaz y las skills están en inglés, aunque puedes investigar cualquier mercado e idioma.
¿Para quién es? Para quien hace SEO de sus propios proyectos o de pocos clientes y ya trabaja con un agente de IA. Si dependes de funciones avanzadas de Semrush (gestión de anuncios, social, bases de datos históricas enormes), no lo sustituye del todo; si lo que haces es investigar keywords, vigilar posiciones y auditar, cubre lo esencial por una fracción del precio.
Preguntas frecuentes
¿OpenSEO es gratis? El software sí (MIT). Los datos no: pagas DataForSEO directamente si lo instalas tú, o 10 $/mes con 10 $ de uso incluido en la versión alojada.
¿Necesito saber programar para usarlo? Para la versión alojada, no. Para instalarlo con Docker basta con copiar los comandos de este artículo.
¿Funciona con datos de España, México o Ecuador? Sí. DataForSEO cubre Google en esos países; en la investigación de keywords eliges país e idioma, y para una ciudad concreta las skills usan search_serp_locations.
¿Puedo usar OpenSEO sin Claude Code? Sí. Tiene panel web completo y el MCP funciona también con Codex, Cursor, Claude Desktop y ChatGPT.
¿Se puede instalar en Coolify? Técnicamente es un contenedor Docker, pero el modo Docker no tiene autenticación y el propio proyecto desaconseja Coolify o Dokploy salvo que ya tengas experiencia. Si lo haces, protégelo con un proxy que pida login.
Conclusión
OpenSEO es la alternativa open source a Semrush y Ahrefs más interesante si trabajas con agentes: el MCP y las skills convierten a Claude Code en un analista SEO con datos reales y costes a la vista. Pruébalo primero con Docker en local y los 1 $ de saldo de DataForSEO; si te convence y no quieres mantener nada, la versión alojada a 10 $/mes es el siguiente paso. Para ampliar tu equipo de skills, mira cómo buscar skills para Claude Code con find-skills.
// código fuente
// implementación
Más sobre Herramientas open source

- Alternativas gratis a apps de pago
- Instálalo en tu servidor

- Diseño, imagen y vídeo
- Alternativas gratis a apps de pago

- Alternativas gratis a apps de pago
- Diseño, imagen y vídeo