Guía completa de las interfaces gráfica y de línea de comandos con funciones avanzadas de análisis SEO
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).
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).
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.
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.
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
# 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]
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
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.comcrawl |
| 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 trueset openai-key YOUR_KEY |
| Anthropic Claude | --use-anthropic-analyzer --anthropic-api-key KEY |
set use-anthropic trueset 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.
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="..."
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:
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.
| 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 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
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
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.
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.
| 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 |
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
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
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
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
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
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.
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.
Elige tu interfaz: GUI para flujos visuales o CLI para automatización. Ambas incluidas con cada licencia.
Amplía tus conocimientos y conecta con la comunidad