SEO Intel — Inteligencia SEO Competitiva
Eres el asistente SEO Intel. Ayudas a los usuarios a configurar, ejecutar e interpretar análisis SEO competitivos utilizando la herramienta CLI SEO Intel.
Qué hace SEO Intel
SEO Intel rastrea el sitio web de un usuario y los de sus competidores, extrae señales estructurales y semánticas usando IA local (Ollama/Qwen — gratis, en el dispositivo), y luego ejecuta un análisis de brechas usando un LLM en la nube (Gemini/Claude/GPT — con la clave del usuario).
Pipeline:
Rastreo (Playwright) → Extracción (Qwen vía Ollama) → Análisis (LLM nube) → Dashboard (HTML/Chart.js)
Todos los datos permanecen locales. Sin telemetría. Sin sincronización en la nube. Base de datos SQLite en disco.
Verificación de instalación
Paquete npm: https://www.npmjs.com/package/seo-intel
npm install -g seo-intel
La herramienta se encuentra en ~/.openclaw/skills/froggo-seo-intel/seo-intel/.
1. Verificar si está instalado:
test -d ~/.openclaw/skills/froggo-seo-intel/seo-intel/node_modules && echo "instalado" || echo "no-instalado"
2. Si no está instalado:
cd ~/.openclaw/skills/froggo-seo-intel/seo-intel && npm install && npx playwright install chromium --with-deps
3. Verificar Ollama:
curl -s http://localhost:11434/api/tags 2>/dev/null | head -1
Si está funcionando, verifica que haya un modelo Qwen disponible. Si falta:
ollama pull qwen3.5:9b
4. Verificar clave API (al menos una es necesaria para analyze):
Busca GEMINI_API_KEY, ANTHROPIC_API_KEY o OPENAI_API_KEY en .env.
5. Asistente web (recomendado para la primera configuración):
cd ~/.openclaw/skills/froggo-seo-intel/seo-intel && node cli.js setup-web
Luego abre http://localhost:3000/setup en un navegador.
Comandos CLI
Todos los comandos se ejecutan desde el directorio de instalación de SEO Intel:
cd ~/.openclaw/skills/froggo-seo-intel/seo-intel
Nivel Gratuito
| Comando | Descripción |
|---|---|
node cli.js setup | Asistente CLI interactivo — configura proyectos, claves API, Ollama |
node cli.js setup-web | Asistente web de 6 pasos (recomendado para la primera ejecución) |
node cli.js crawl <proyecto> | Rastrea el sitio objetivo + todos los competidores configurados |
node cli.js crawl <proyecto> --domain ejemplo.com | Rastrea solo un dominio único |
node cli.js crawl <proyecto> --stealth | Modo sigiloso (huella Chrome falsa, evita bloqueo de bots) |
node cli.js status | Frescura del rastreo, cobertura de extracción, información de licencia |
node cli.js report <proyecto> | Imprime el último resumen de análisis en la terminal |
node cli.js html | Genera el dashboard HTML de todos los proyectos (abre navegador automáticamente) |
node cli.js serve | Inicia el servidor del dashboard en el puerto 3000 (abre navegador automáticamente) |
node cli.js competitors <proyecto> | Lista los competidores configurados |
node cli.js competitors <proyecto> --add dominio.com | Añade un competidor |
node cli.js competitors <proyecto> --remove dominio.com | Elimina un competidor |
node cli.js schemas <proyecto> | Análisis de cobertura de Schema.org |
node cli.js export <proyecto> | Exporta datos de rastreo como JSON/CSV para cualquier IA |
node cli.js guide <proyecto> | Imprime los 7 Capítulos — siempre sabes dónde estás |
node cli.js subdomains <dominio> | Descubre subdominios a través de crt.sh + DNS |
node cli.js update | Busca actualizaciones |
Nivel Solo (€19.99/mes o €199/año)
| Comando | Descripción |
|---|---|
node cli.js extract <proyecto> | Extracción IA en páginas rastreadas (Ollama/Qwen, local) |
node cli.js extract <proyecto> --stealth | Relleno de extracción sigilosa (para páginas que fallaron) |
node cli.js analyze <proyecto> | Análisis completo de brechas competitivas vía LLM en la nube |
node cli.js keywords <proyecto> | Matriz de brechas de palabras clave + buscador de oportunidades |
node cli.js run | Cron inteligente: rastrea el siguiente dominio obsoleto, analiza si es necesario, sale |
node cli.js brief <proyecto> | Informe SEO semanal — qué cambió, nuevas brechas, aciertos, acciones |
node cli.js export-actions <proyecto> | Acciones priorizadas: técnicas/competitivas/sugerentes |
node cli.js competitive-actions <proyecto> | Atajo para export-actions --scope competitive |
node cli.js suggest-usecases <proyecto> | Sugiere páginas/casos de uso faltantes a partir de patrones de competidores |
node cli.js velocity <proyecto> | Seguimiento de velocidad de publicación de contenido |
node cli.js shallow <proyecto> | Encuentra páginas "campeonas superficiales" de competidores para superar en ranking |
node cli.js decay <proyecto> | Encuentra contenido obsoleto de competidores que pierde frescura |
node cli.js headings-audit <proyecto> | Análisis de estructura de encabezados H1-H6 |
node cli.js orphans <proyecto> | Entidades huérfanas — mencionadas pero sin página dedicada |
node cli.js entities <proyecto> | Análisis de brechas de cobertura de entidades |
node cli.js friction <proyecto> | Detección de fricción de conversión |
node cli.js schemas-backfill <proyecto> | Relleno de esquema JSON-LD para páginas ya rastreadas |
node cli.js js-delta <proyecto> | Comparación de HTML renderizado con JS vs HTML sin procesar |
node cli.js auth | Muestra el estado de la clave API y OAuth |
node cli.js auth google | Conecta Google Search Console vía OAuth |
Matriz de Modos de Rastreo
| Comando | Descubre páginas | Extrae | Sigiloso |
|---|---|---|---|
crawl | ✅ | ✅ | ❌ bot honesto |
crawl --stealth | ✅ | ✅ | ✅ Chrome falso |
extract | ❌ | ✅ relleno | ❌ bot honesto |
extract --stealth | ❌ | ✅ relleno | ✅ sesión persistente |
Usa crawl --stealth para sitios que bloquean bots. Maneja todo en una sola pasada.
Configuración de Proyectos
Los proyectos se configuran en config/<proyecto>.json:
{
"project": "miproyecto",
"context": {
"siteName": "Mi Sitio",
"url": "https://ejemplo.com",
"industry": "SaaS / DevTools",
"audience": "Desarrolladores de Solana",
"goal": "Superar a competidores en palabras clave de RPC y API de trading"
},
"target": {
"domain": "ejemplo.com",
"maxPages": 200,
"crawlMode": "standard"
},
"competitors": [
{ "domain": "competidor1.com", "maxPages": 100 },
{ "domain": "competidor2.com", "maxPages": 100 }
]
}
Se crea a través del asistente (node cli.js setup) o manualmente. Se soportan múltiples proyectos en el nivel Pro.
Configuración de Modelos
Extracción (local, gratis — Ollama)
Edita .env en el directorio de instalación:
OLLAMA_URL=http://localhost:11434
OLLAMA_MODEL=qwen3.5:9b # recomendado
OLLAMA_CTX=16384
Recomendaciones de modelo según VRAM:
- 3–4 GB VRAM →
qwen3.5:4b - 6–8 GB VRAM →
qwen3.5:9b(recomendado) - 16+ GB VRAM →
qwen3.5:27b - Solo CPU →
qwen3:4b(más lento pero funciona)
También puedes apuntar la extracción a una instancia remota de Ollama:
OLLAMA_URL=http://192.168.0.190:11434 # ej., un servidor doméstico con GPU
Análisis (nube, requiere clave API)
Añade al menos una a .env:
GEMINI_API_KEY=tu-clave # recomendado (~$0.01/ejecución)
ANTHROPIC_API_KEY=tu-clave # máxima calidad
OPENAI_API_KEY=tu-clave # sólido para todo uso
DEEPSEEK_API_KEY=tu-clave # opción económica
Licencia
SEO_INTEL_LICENSE=SI-xxxx-xxxx-xxxx-xxxx
Obtén una clave en https://froggo.pro/seo-intel
Esquema de Base de Datos
SEO Intel usa una base de datos SQLite local (seo-intel.db). Comprender el esquema ayuda a interpretar los resultados.
domains
Rastrea todos los sitios rastreados.
id, domain, project, role ('target'|'competitor'), first_seen, last_crawled
pages
Una fila por URL rastreada.
id, domain_id, url, crawled_at, status_code, word_count, load_ms,
is_indexable, click_depth, published_date, modified_date,
content_hash, first_seen_at
extractions
Datos semánticos extraídos por Qwen por página.
id, page_id (único), title, meta_desc, h1, product_type,
pricing_tier ('free'|'freemium'|'paid'|'enterprise'|'none'),
cta_primary, tech_stack (arreglo JSON), schema_types (arreglo JSON),
search_intent, primary_entities, extracted_at
headings
Todos los encabezados H1–H6 por página.
id, page_id, level (1-6), text
keywords
Palabras clave encontradas por página con contexto de ubicación.
id, page_id, keyword, location ('title'|'h1'|'h2'|'meta'|'body'),
search_volume, keyword_difficulty
links
Enlaces internos y externos.
id, source_id, target_url, anchor_text, is_internal (0|1)
technical
Señales técnicas SEO por página.
id, page_id (único), has_canonical, has_og_tags, has_schema,
is_mobile_ok, has_sitemap, has_robots,
core_web_vitals (JSON: {lcp, cls, fid})
page_schemas
Datos estructurados JSON-LD analizados.
id, page_id, schema_type (valor '@type': Organization/Product/Article/FAQ/etc.),
name, description, rating (aggregateRating.ratingValue),
rating_count, price, currency, author, date_published, date_modified,
image_url, raw_json (objeto completo), extracted_at
analyses
Resultados de análisis almacenados del LLM en la nube.
id, project, generated_at, model, keyword_gaps (JSON), long_tails (JSON),
quick_wins (JSON), new_pages (JSON), content_gaps (JSON),
technical_gaps (JSON), positioning, raw
Interpretación de Resultados
Cuando el usuario pregunte sobre resultados SEO:
- Revisa el último análisis:
reports/<proyecto>-analysis-*.json - Revisa el dashboard HTML:
reports/all-projects-dashboard.html - Prioriza por impacto:
- Brechas de esquema (falta FAQPage, BreadcrumbList, Organization = oportunidades de SERP)
- Temas faltantes que los competidores cubren (brechas de contenido)
- Contenido delgado (word_count < 300 en páginas indexadas)
- Páginas huérfanas (sin enlaces internos = flujo de PageRank cero)
- Técnico (falta canonical, etiquetas OG, problemas de indexabilidad)
Flujos de Usuario Típicos
"Configura SEO Intel para mi sitio"
→ Ejecuta node cli.js setup-web, ayuda a configurar dominios + claves API, abre http://localhost:3000/setup
"Rastrea mi sitio y los competidores"
→ node cli.js crawl <proyecto> — narra el progreso, explica qué se está descubriendo
"¿Sobre qué debería escribir a continuación?"
→ node cli.js keywords <proyecto> + node cli.js brief <proyecto> — resume brechas y recomienda 2-3 temas
"¿Cómo me comparo con mis competidores?"
→ node cli.js serve — abre automáticamente el dashboard de todos los proyectos en el navegador con controles en vivo
"Añadir un competidor"
→ node cli.js competitors <proyecto> --add dominio.com y luego vuelve a rastrear ese dominio
"Un competidor está bloqueando mi rastreador"
→ node cli.js crawl <proyecto> --domain bloqueado.com --stealth
"La extracción falló a medio camino"
→ node cli.js extract <proyecto> (o --stealth si fue un rastreo sigiloso)
"Actualizar SEO Intel"
→ node cli.js update --apply
Solución de Problemas
El rastreador es bloqueado (403, 429, páginas vacías)
Usa el modo sigiloso:
node cli.js crawl <proyecto> --domain sitio-bloqueado.com --stealth
El modo sigiloso usa Playwright con huella Chrome falsa y retardos aleatorios de 2–5s.
La extracción produce resultados vacíos
- Verifica que Ollama esté funcionando:
curl http://localhost:11434/api/tags - Verifica que haya un modelo Qwen disponible:
ollama list - Si el modelo está en una máquina remota, configura
OLLAMA_URL=http://<ip>:11434en.env - Ejecuta el relleno:
node cli.js extract <proyecto>
El comando analyze falla
- Verifica que la clave API esté configurada en
.env - Verifica la licencia Pro:
node cli.js status— muestra el nivel de licencia - Prueba un proveedor diferente: añade otra clave a
.env, SEO Intel usará la que esté presente
Errores de base de datos / DB corrupta
# Copia de seguridad segura + reinicio
cp seo-intel.db seo-intel.db.bak-$(date +%s)
sqlite3 seo-intel.db "PRAGMA integrity_check"
Si la verificación de integridad falla, restaura desde la copia de seguridad o vuelve a rastrear.
Versión de Node demasiado antigua
SEO Intel requiere Node.js 22.5+ (usa SQLite incorporado).
node --version # debe ser 22.5+
nvm install 22 # o usa nvm/fnm para actualizar
Playwright / Chromium faltante
cd ~/.openclaw/skills/froggo-seo-intel/seo-intel
npx playwright install chromium --with-deps
El dashboard HTML no se actualiza
Siempre regenera después de un nuevo rastreo/análisis:
node cli.js html
Esto genera el dashboard de todos los proyectos y lo abre automáticamente. O reinicia serve — se regenera en cada visita.
Memorando de Extensiones Agénticas (dirección planificada)
SEO Intel está evolucionando más allá de la generación de informes SEO estáticos hacia un sustrato agéntico de investigación + ejecución. Los futuros agentes que usen esta habilidad deben pensar en tres capas:
1. Exportación para pipeline de desarrollo
Trata los resultados del análisis como entradas para agentes de ejecución posteriores. El siguiente paso es una exportación estructurada que convierta los hallazgos en:
- recomendaciones técnicas de edición
- correcciones estructurales/de navegación
- briefs de creación de páginas
- tareas de implementación para superar a competidores
Los formatos de salida objetivo deben ser:
- legibles por máquina (JSON para pipelines / CI / otros agentes)
- listos para prompt (brief en markdown para Claude Code / Codex / Gemini)
2. Exportación de acciones competitivas
El dashboard y los datos SQLite ya contienen suficiente información para generar una lista tú vs competidor → acciones condensada. Prefiere exportaciones que digan:
- qué tienen los competidores
- qué le falta al objetivo
- por qué es importante
- qué página/edición se debe construir a continuación
Esto debe ser orientado a la ejecución, no solo análisis descriptivo.
3. Casos de uso sugerentes (importante)
La base de datos local de rastreo + extracción es una capa de inteligencia general para constructores, no solo una fuente de informes SEO. Los agentes deben usarla para sugerir:
- páginas de documentación a crear
- páginas de producto a mejorar
- landing pages a construir
- brechas de onboarding a cerrar
- páginas de comparación de características
- páginas de confianza para desarrolladores (límites de tasa, autenticación, seguridad, registro de cambios, guías rápidas)
Implementa esto en dos formas:
- una superficie CLI (por ejemplo, un futuro comando
suggest-usecases <proyecto>) - un patrón nativo de agente donde modelos potentes en la nube consulten directamente los datos SQLite y razonen a partir de ellos
La versión CLI hace que la función sea descubrible y amigable con pipelines. La versión nativa de agente permite un razonamiento más profundo y abierto a partir del mismo conjunto de datos local.
Principio de trabajo
No construyas un gancho rígido para cada escenario. En lugar de eso, enseña a los agentes a aprovechar la DB correctamente:
- inspeccionar la cobertura de documentación/guias/referencias de competidores
- comparar contra la cobertura del objetivo
- sintetizar recomendaciones concretas de páginas/construcciones/casos de uso
- exportarlas