Documentación

Guía completa de las interfaces gráfica y de línea de comandos con funciones avanzadas de análisis SEO

Instalación

Requisitos del Sistema

  • Sistemas operativos: Windows 10+, macOS 10.15+, Linux (glibc 2.17+)
  • Arquitectura: x86_64, ARM64 (nativo para Apple Silicon)
  • Memoria: 512MB de RAM mínimo, 2GB+ recomendado para sitios grandes
  • Navegador: Chrome/Chromium (para renderizado de JavaScript)
  • Almacenamiento: 100MB para el binario, espacio adicional para reportes

Instalación de la GUI (Recomendada para la Mayoría de Usuarios)

Windows:

# Descarga e instala el instalador EXE
# Visita: https://download.blackseoanalyzer.com/26.9.16/BlackSEOAnalyzerSetup.exe
# Haz doble clic para instalar

# O mediante PowerShell:
Invoke-WebRequest -Uri https://download.blackseoanalyzer.com/26.9.16/BlackSEOAnalyzerSetup.exe -OutFile BlackSEOAnalyzerSetup.exe
.\BlackSEOAnalyzerSetup.exe

macOS:

# Descarga el instalador DMG (Binario Universal para Intel y Apple Silicon)
curl -L -o Black-SEO-Analyzer.dmg https://download.blackseoanalyzer.com/26.9.16/Black-SEO-Analyzer.dmg

# Abre el DMG y arrástralo a la carpeta Aplicaciones
open Black-SEO-Analyzer.dmg

Inicio de la GUI:

Tras la instalación, inicia "bseoa" desde tu carpeta Aplicaciones (macOS) o el Menú Inicio (Windows).

Instalación de la CLI (para Automatización y Scripting)

CLI de Windows:

# Descarga el binario x86-64
Invoke-WebRequest -Uri https://download.blackseoanalyzer.com/26.9.16/x86_64-win/black-seo-analyzer.exe -OutFile black-seo-analyzer.exe

# Verifica la instalación
.\black-seo-analyzer.exe --version

CLI de macOS (Apple Silicon):

# Descarga el binario ARM64
curl -L -o black-seo-analyzer https://download.blackseoanalyzer.com/26.9.16/aarch64-macos/black-seo-analyzer

# Hazlo ejecutable
chmod +x black-seo-analyzer

# Verifica la instalación
./black-seo-analyzer --version

CLI de Linux:

# Descarga el binario x86-64
curl -L -o black-seo-analyzer https://download.blackseoanalyzer.com/26.9.16/x86_64-linux/black-seo-analyzer

# Hazlo ejecutable
chmod +x black-seo-analyzer

# Verifica la instalación
./black-seo-analyzer --version

Nota: los binarios de la CLI se pueden mover al PATH para acceso global (por ejemplo, /usr/local/bin en sistemas Unix).

Activación de Licencia

Después de la compra, recibirás una clave de licencia por correo electrónico.

Activación en la GUI:

Usa el comando license en la GUI:

> license YOUR_LICENSE_KEY

Activación en la CLI:

./black-seo-analyzer --license-key YOUR_LICENSE_KEY

La licencia se almacena localmente en ~/.black-seo-analyzer/license.key y funciona tanto para la GUI como para la CLI.

Nota: se requiere una clave de licencia para ejecutar cualquier rastreo. Regístrate para una prueba gratis de 14 días en blackseoanalyzer.com/es/free-trial: todos los analizadores, sin límite de páginas y sin tarjeta de crédito.

Uso Básico

Uso de la GUI

La GUI ofrece autocompletado inteligente y selección visual de archivos. Comandos comunes:

# Establecer la URL a rastrear
> set url https://example.com

# Establecer el directorio de salida
> set output-dir ./reports

# Iniciar el rastreo (el formato de salida se elige después, al exportar)
> crawl

# Ver el historial de rastreos
> list crawls

# Exportar un rastreo anterior (usando el ID de sesión de list crawls)
> export crawl_1762367280_8991c20b html-folder

# Cargar una configuración guardada
> load client-config.json

# Guardar la configuración actual
> save my-config.json

Tip: empieza a escribir cualquier comando y presiona Tab para autocompletar. Usa las teclas de flecha para navegar por el historial de comandos.

Estructura de Comandos de la CLI

La CLI sigue este patrón para automatización y scripting:

./black-seo-analyzer [OPTIONS]

Ejemplos:

# Rastreo básico con ajustes predeterminados
./black-seo-analyzer --url-to-begin-crawl https://example.com

# Rastreo con formato de salida específico
./black-seo-analyzer --url-to-begin-crawl https://example.com --output-type json

# Generar salida desde una sesión de rastreo existente
./black-seo-analyzer --generate-output --output-type html-folder --output-file ./reports

Parámetros Esenciales

# Opciones principales
--url-to-begin-crawl     # URL del sitio web a analizar (requerido para rastrear)
--output-type           # Formato de salida: json, jsonl, xml, csv, csv-flat, html-folder, json-files
--output-file           # Directorio o archivo de salida
--log-file              # Ruta del archivo de log

# Controles de rastreo
--max-pages              # Número máximo de páginas a rastrear
--concurrent-requests    # Número de solicitudes concurrentes [predeterminado: 20]
--rate-limit              # Límite de velocidad en milisegundos [predeterminado: 50]
--user-agent          # Cadena de User-Agent [predeterminado: "black-seo-analyzer v25.11.28"]

# Modos especiales
--spa                         # Habilitar el modo de renderizado para aplicaciones de una sola página (SPA)
--is-sitemap                  # Tratar la URL como un archivo sitemap.xml
--disable-external-links      # Deshabilitar la verificación de enlaces externos
--locale              # Localización para internacionalización [predeterminado: en]

# Gestión de sesiones
--generate-output             # Generar salida desde la base de datos en lugar de rastrear
--session-id              # ID de sesión de rastreo para generar la salida (usa la última si no se indica)
--db-path               # Ruta del archivo SQLite [predeterminado: crawl.db]

Casos de Uso Comunes

Auditoría completa de un sitio con reporte HTML:

./black-seo-analyzer --url-to-begin-crawl https://example.com --output-type html-folder --output-file ./audit-report

Revisión técnica rápida (primeras 50 páginas):

./black-seo-analyzer --url-to-begin-crawl https://example.com --max-pages 50 --output-type json

Análisis de SPA con JavaScript:

./black-seo-analyzer --url-to-begin-crawl https://spa-site.com --spa

Análisis de un sitemap:

./black-seo-analyzer --url-to-begin-crawl https://example.com/sitemap.xml --is-sitemap

Análisis competitivo con insights de IA:

./black-seo-analyzer --url-to-begin-crawl https://competitor.com --use-openai-analyzer --openai-api-key $OPENAI_API_KEY

Sintaxis de Comandos CLI vs GUI

Referencia rápida que compara los comandos de la interfaz de línea de comandos (CLI) y la interfaz gráfica (GUI). Ambas versiones ofrecen funcionalidades idénticas con sintaxis diferente.

Tarea Sintaxis CLI Sintaxis GUI
Rastreo básico ./black-seo-analyzer --url-to-begin-crawl https://example.com set url https://example.com
crawl
Establecer directorio de salida --output-file ./reports set output-dir
(abre el selector de carpetas)
Establecer tipo de salida --output-type html-folder export <sesión> html-folder
(se elige al exportar, no con set)
Solicitudes concurrentes --concurrent-requests 20 set concurrent-requests 20
Limitación de velocidad --rate-limit 100 set rate-limit 100
Máximo de páginas --max-pages 100 set max-pages 100
Modo SPA --spa set spa true
Análisis de sitemap --is-sitemap set is-sitemap true
User Agent --user-agent "MyBot/1.0" set user-agent MyBot/1.0
Clave de licencia --license-key YOUR_KEY license YOUR_KEY
Analizador OpenAI --use-openai-analyzer --openai-api-key KEY set use-openai true
set openai-key YOUR_KEY
Anthropic Claude --use-anthropic-analyzer --anthropic-api-key KEY set use-anthropic true
set anthropic-key YOUR_KEY
Guardar configuración No disponible save config.json
Cargar configuración No disponible load config.json
Listar rastreos anteriores No disponible list crawls
Exportar rastreo --session-id abc123 --generate-output --output-type html-folder export abc123 html-folder
Mostrar configuración No disponible show config
Ver versión --version version
Ver ayuda --help help

¿Necesitas más ejemplos de la GUI? Consulta la Documentación de la GUI para ver flujos paso a paso, ejemplos reales y funciones avanzadas.

Configuración

Variables de Entorno

Establece las claves de API y datos sensibles mediante variables de entorno:

# Claves de proveedores de IA (se pueden usar en lugar de los flags de línea de comandos)
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
export DEEPSEEK_API_KEY="..."
export GEMINI_API_KEY="..."

Plantillas Personalizadas

Los reportes HTML se generan a partir de plantillas Tera incluidas en el binario. Para modificar una, cópiala a un directorio propio, edítala y apunta --html-templates-dir a ese directorio:

mis-plantillas/
├── index_file.html            # index.html, el resumen del rastreo
├── page_file.html             # documento contenedor de cada archivo en pages/
├── page.html                  # el cuerpo del reporte de cada página
├── sitemap_graph.html         # --output-type sitemap
└── topic_cluster_graph.html   # --output-type topic-cluster

Úsalas con:

./black-seo-analyzer --url-to-begin-crawl https://example.com --output-type html-folder --html-templates-dir ./mis-plantillas

La misma opción funciona al regenerar la salida de una sesión ya rastreada, así que puedes volver a generarla con una plantilla modificada sin rastrear de nuevo:

./black-seo-analyzer --generate-output --session-id abc123 --output-type html-folder --html-templates-dir ./mis-plantillas

Algunas reglas importantes:

  • Solo se reconocen esos cinco nombres de archivo. Incluye únicamente los que quieras cambiar — los que falten se toman de la copia incluida en el binario.
  • Un directorio que no exista, o que no contenga ninguno de esos nombres, se rechaza con un error en lugar de ignorarse.
  • Una plantilla que no se pueda analizar detiene la exportación e indica el archivo de origen.
  • No hay procesamiento de recursos. Incrusta tu CSS, JavaScript e imágenes, o enlázalos con una URL absoluta.
  • sitemap_graph.html y topic_cluster_graph.html no son plantillas Tera — se copian tal cual salvo por el literal {json_data}, que se reemplaza con los datos del grafo en JSON.

Las plantillas usan Tera 2, muy parecido a Jinja2 pero no idéntico: los argumentos de los filtros son argumentos con nombre ({{ score | round(precision=1) }}) y el corte de listas se escribe {% for k in keyword_analysis[:50] %} en lugar de usar un filtro slice. La lista completa de variables que recibe cada plantilla está en el README de las plantillas.

Integración con IA

Proveedores de IA Compatibles

Proveedor Modelo Predeterminado Ideal Para
OpenAI gpt-4o Análisis general, optimización de contenido
Anthropic claude-3-haiku-20240307 Análisis técnico profundo, revisión de código
DeepSeek deepseek-chat Análisis masivo a bajo costo
Google Gemini gemini-1.5-flash-latest Análisis multimodal con capturas de pantalla

Configuración del Análisis con IA

Configuración de OpenAI:

# Usar OpenAI para análisis SEO
./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --use-openai-analyzer \
  --openai-api-key $OPENAI_API_KEY \
  --openai-model gpt-4o \
  --openai-prompt-file ./prompts/seo-analysis.txt

Configuración de Anthropic Claude:

# Usar Anthropic Claude para el análisis
./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --use-anthropic-analyzer \
  --anthropic-api-key $ANTHROPIC_API_KEY \
  --anthropic-model claude-3-haiku-20240307 \
  --anthropic-prompt-file ./prompts/technical-review.txt

Configuración de DeepSeek:

# Usar DeepSeek para análisis económico
./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --use-deepseek-analyzer \
  --deepseek-api-key $DEEPSEEK_API_KEY \
  --deepseek-model deepseek-chat

Configuración de Google Gemini:

# Usar Google Gemini para el análisis
./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --use-gemini-analyzer \
  --gemini-api-key $GEMINI_API_KEY \
  --gemini-model gemini-1.5-flash-latest \
  --gemini-prompt-file ./prompts/content-analysis.txt

Prompts Personalizados de IA

Crea archivos de prompts personalizados para necesidades de análisis específicas. Guarda tu prompt como un archivo de texto:

# seo-analysis-prompt.txt
Analyze this page content for:
1. Keyword density and semantic relevance
2. Content structure and readability
3. Missing topics based on search intent
4. Internal linking opportunities
5. Schema.org markup recommendations

Provide specific, actionable recommendations for improvement.

Usa prompts personalizados con cualquier proveedor de IA:

./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --use-openai-analyzer \
  --openai-prompt-file ./seo-analysis-prompt.txt

Funciones Avanzadas

Motor de Análisis Semántico

El análisis semántico se ejecuta en el propio equipo (modelo integrado all-MiniLM-L12-v2, sin llamadas a APIs externas) y se activa con una sola opción. Impulsa automáticamente la detección de contenido duplicado y de relevancia temática durante el rastreo:

# Activar el análisis semántico durante un rastreo
./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --enable-semantic-analysis

Buscar páginas similares a una frase o tema:

# Buscar en un rastreo ya completado páginas semánticamente similares
./black-seo-analyzer \
  --enable-semantic-analysis \
  --semantic-query "política de devoluciones y reembolsos" \
  --query-limit 20

Los umbrales de similitud (0.95 para duplicados, 0.7 para relevancia temática) son fijos internamente y no se pueden configurar mediante opciones de la CLI.

Rendimiento y Datos Estructurados

Las comprobaciones de rendimiento (Core Web Vitals, tiempos de carga) y de datos estructurados (Schema.org) son analizadores integrados que se ejecutan automáticamente en cada rastreo; no existe una opción separada para activarlos. Lo que sí puedes controlar es cuánto se ejecuta, mediante --audit-profile:

# Ejecutar todos los analizadores, incluidos rendimiento y datos estructurados (por defecto)
./black-seo-analyzer --url-to-begin-crawl https://example.com --audit-profile full

# Ejecutar solo las comprobaciones críticas de Nivel 1 (técnicas y de indexación)
./black-seo-analyzer --url-to-begin-crawl https://example.com --audit-profile critical

# Niveles 1 + 2: problemas críticos más contenido básico y duplicado
./black-seo-analyzer --url-to-begin-crawl https://example.com --audit-profile core

# Niveles 1-3: todo excepto las comprobaciones más avanzadas
./black-seo-analyzer --url-to-begin-crawl https://example.com --audit-profile standard

# Pase rápido que cubre solo los problemas más comunes
./black-seo-analyzer --url-to-begin-crawl https://example.com --audit-profile quick

No existe una opción en la CLI para establecer umbrales personalizados de Core Web Vitals ni para activar de forma selectiva solo las comprobaciones de compresión, caché o CDN; esos resultados se incluyen siempre que los analizadores de Rendimiento y Recursos se ejecutan bajo el perfil elegido.

Formatos de Salida

Comparación de Formatos

Formato Caso de Uso Ejemplo
json Integración con APIs, procesamiento programático --output-type json --output-file report.json
jsonl Streaming, grandes conjuntos de datos --output-type jsonl --output-file report.jsonl
jsonl-summary Resúmenes de una línea por problema para rastreos grandes --output-type jsonl-summary --output-file summary.jsonl
xml Sistemas empresariales, ingestión de feeds --output-type xml --output-file report.xml
csv Análisis en hojas de cálculo, ciencia de datos --output-type csv --output-file report.csv
csv-flat Métricas simplificadas, dashboards --output-type csv-flat --output-file report-flat.csv
html-folder Reportes visuales, entregables para clientes --output-type html-folder --output-file ./report
json-files Procesamiento distribuido, archivado --output-type json-files --output-file ./report
sitemap Regenerar un sitemap XML a partir de un rastreo --output-type sitemap --output-file sitemap.xml
topic-cluster Agrupar páginas por similitud semántica --output-type topic-cluster --output-file clusters.json
broken-links Reporte aislado solo de enlaces 4xx/5xx --output-type broken-links --output-file broken.csv

Ejemplos de Procesamiento de Salida

La CLI siempre escribe su reporte en un archivo (o carpeta) en lugar de la salida estándar, así que los flujos basados en tuberías leen el archivo resultante después de que termina el rastreo:

Extraer problemas críticos con jq:

./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --output-type json --output-file report.json

jq '.issues[] | select(.severity == "critical") | {url: .url, issue: .type}' report.json

Generar directamente un reporte solo de enlaces rotos:

./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --output-type broken-links --output-file broken-pages.csv

Usar el resumen compacto por problema para sitios grandes:

./black-seo-analyzer --url-to-begin-crawl https://large-site.com \
  --max-pages 10000 --output-type jsonl-summary --output-file summary.jsonl

Automatización y CI/CD

Integración con GitHub Actions

name: SEO Audit
on:
  push:
    branches: [main]
  schedule:
    - cron: '0 0 * * 0'  # Weekly

jobs:
  seo-audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Download bseoa
        run: |
          curl -L https://github.com/sethblack/black-seo-analyzer/releases/latest/download/black-seo-analyzer-linux-x64.tar.gz | tar xz
          chmod +x black-seo-analyzer

      - name: Run SEO Audit
        env:
          LICENSE_KEY: ${{ secrets.BLACK_SEO_LICENSE }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        run: |
          ./black-seo-analyzer --store-license $LICENSE_KEY
          ./black-seo-analyzer \
            --url-to-begin-crawl https://staging.example.com \
            --max-pages 100 \
            --use-openai-analyzer --openai-api-key $OPENAI_API_KEY \
            --output-type json --output-file audit.json

      - name: Check for Critical Issues
        run: |
          CRITICAL_COUNT=$(jq '[.issues[] | select(.severity == "critical")] | length' audit.json)
          if [ $CRITICAL_COUNT -gt 0 ]; then
            echo "Found $CRITICAL_COUNT critical SEO issues!"
            exit 1
          fi

      - name: Upload Report
        uses: actions/upload-artifact@v3
        with:
          name: seo-audit-report
          path: audit.json

Script de Monitoreo

Crea un script de monitoreo para revisiones periódicas:

#!/bin/bash
# seo-monitor.sh

SITES=(
  "https://example.com"
  "https://blog.example.com"
  "https://shop.example.com"
)

WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

for site in "${SITES[@]}"; do
  echo "Auditing $site..."

  OUTFILE="audit-$(date +%Y%m%d)-${site//https:\/\//}.json"
  ./black-seo-analyzer \
    --url-to-begin-crawl "$site" \
    --max-pages 50 \
    --output-type json --output-file "$OUTFILE"

  # Check for issues
  CRITICAL=$(jq '[.issues[] | select(.severity == "critical")] | length' "$OUTFILE")
  HIGH=$(jq '[.issues[] | select(.severity == "high")] | length' "$OUTFILE")

  if [ $CRITICAL -gt 0 ] || [ $HIGH -gt 5 ]; then
    curl -X POST $WEBHOOK_URL \
      -H 'Content-Type: application/json' \
      -d "{\"text\":\"⚠️ SEO Alert for $site: $CRITICAL critical, $HIGH high priority issues found\"}"
  fi
done

Integración con Docker

Ejecuta bseoa dentro de un contenedor:

# Dockerfile
FROM debian:bullseye-slim

RUN apt-get update && apt-get install -y \
    curl \
    jq \
    chromium \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

RUN curl -L https://github.com/sethblack/black-seo-analyzer/releases/latest/download/black-seo-analyzer-linux-x64.tar.gz | tar xz

ENV CHROME_PATH=/usr/bin/chromium

ENTRYPOINT ["./black-seo-analyzer"]

Compila y ejecuta:

# Construir la imagen
docker build -t black-seo-analyzer .

# Ejecutar el análisis
docker run --rm \
  -v $(pwd)/reports:/app/reports \
  -e LICENSE_KEY=$BLACK_SEO_LICENSE \
  black-seo-analyzer \
  --url-to-begin-crawl https://example.com \
  --output-type html-folder --output-file /app/reports

Resolución de Problemas

Problemas Comunes

El sitio depende de JavaScript y las páginas aparecen vacías en el reporte:

# Activa el navegador sin interfaz para aplicaciones de una sola página
./black-seo-analyzer --url-to-begin-crawl https://example.com --spa

Sin --spa, las páginas se obtienen con una simple solicitud HTTP y no se ejecuta JavaScript; ese es el comportamiento correcto por defecto para sitios estáticos o renderizados en el servidor, y el que debes activar para SPAs.

Recibes limitaciones de velocidad o bloqueos:

# Reduce la velocidad y la concurrencia (rate-limit son milisegundos entre solicitudes)
./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --rate-limit 1000 --concurrent-requests 2

Problemas de memoria en sitios grandes:

# Limita el total de páginas rastreadas y usa el formato de resumen compacto
./black-seo-analyzer --url-to-begin-crawl https://large-site.com \
  --max-pages 10000 --output-type jsonl-summary --output-file summary.jsonl

Registro (Logging)

El registro siempre está activo (nivel info) y se envía a la salida estándar por defecto. Envíalo a un archivo con --log-file:

./black-seo-analyzer --url-to-begin-crawl https://example.com --log-file crawl.log

Hoy no existe una opción de verbosidad independiente ni interruptores de depuración por componente; el nivel y el detalle del registro son fijos.

Ajuste de Rendimiento

Optimizar para velocidad (omite el navegador sin interfaz y aumenta la concurrencia; sé respetuoso con el sitio de destino):

./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --concurrent-requests 50 --rate-limit 20

Optimizar para precisión en sitios con mucho JavaScript (renderiza con el navegador sin interfaz, con menor concurrencia):

./black-seo-analyzer --url-to-begin-crawl https://example.com \
  --spa --concurrent-requests 5

No existe una opción para omitir selectivamente tipos de recursos específicos ni para forzar capturas de pantalla completas en cada página; eso no es configurable actualmente.

¿Listo para dominar el análisis SEO profesional?

Elige tu interfaz: GUI para flujos visuales o CLI para automatización. Ambas incluidas con cada licencia.

Recursos Adicionales

Amplía tus conocimientos y conecta con la comunidad

Repositorio en GitHub

Código fuente, issues y contribuciones de la comunidad

Ver en GitHub →

Tutoriales en Video

Guías paso a paso y técnicas avanzadas

Ver tutoriales →

Foro de la Comunidad

Obtén ayuda, comparte consejos y discute funciones

Unirse a la discusión →