Línea de comandos
La referencia completa de node src/cli.mjs - cada opción con su valor por defecto, las salidas (NDJSON, CSV, informe HTML), comparación, segmentos, reanudación, sitemap y extracción.
Uso
node src/cli.mjs <url> [options]
node src/cli.mjs --list urls.txt [options]
La CLI muestra la puntuación y los problemas en tu idioma, guarda el rastreo en NDJSON gzip (que la interfaz abre con Importar o desde el historial), y con --csv exporta pages.csv e issues.csv, y con --report escribe un informe de auditoría HTML con tu marca que puedes imprimir en PDF. JSON, CSV e informe se escriben cada uno en flujo y de forma independiente: el fallo de uno no bloquea a los demás, y el código de salida es 1 si alguno falló.
Ejemplos
node src/cli.mjs https://www.example.com --max 2000 --csv --report --lang es
node src/cli.mjs https://www.example.com --render --ua googlebotMobile --report --client "ACME" --author "Tu nombre"
node src/cli.mjs --list urls.txt --lang de --csv
node src/cli.mjs --sitemap https://www.example.com/sitemap.xml --extract "price=.price" --extract "sku=xpath://meta[@itemprop='sku']/@content" --csv
node src/cli.mjs https://www.example.com --report --compare crawls/previous.jsonl.gz
node src/cli.mjs --resume crawls/.en-cours/www.example.com_2026-10-21T09-00-00.ndjson --csv
node src/cli.mjs https://www.example.com --max 20000 --segments segments.json --csv --report
node src/cli.mjs https://www.example.com --ga4-key ga4-key.json --ga4-property 123456789 --csv
node src/cli.mjs https://staging.example.com --auth user:pass --rate 2 --robots report --path-limit "/blog/=200" --extract "price=.price" --remove-params "utm_*,gclid"
node src/cli.mjs --help
Opciones
Generadas desde node src/cli.mjs --help en el repositorio (3.21.0); los valores por defecto vienen del código.
| Opción | Descripción | Por defecto |
|---|---|---|
--max N | Número máximo de URL | 500 |
--depth N | Profundidad máxima | 20 |
--concurrency N | Peticiones simultáneas | 5 |
--delay MS | Pausa entre dos peticiones por worker, en ms | 0 |
--ua NAME | User-agent: arachnide | googlebot | googlebotMobile | chrome | arachnide |
--render | Renderizado JavaScript con Chrome / Edge (navegador instalado) | |
--list FILE | Modo lista: rastrear solo las URL de un archivo de texto (una por línea) | |
--external | Comprobar los enlaces externos | |
--images | Comprobar el peso y el estado de las imágenes | |
--rate N | URL por segundo como máximo (límite global) | |
--robots MODE | respect | report (ignorar pero informar) | ignore | respect |
--custom-robots F | Usar este archivo robots.txt en lugar del del sitio | |
--per-depth N | URL máximas por nivel de profundidad | |
--folder-depth N | Profundidad de carpetas máxima | |
--max-params N | Número máximo de parámetros de URL | |
--max-redirects N | Redirecciones seguidas como máximo | 10 |
--path-limit P=N | Límite por ruta de URL, p. ej. "/blog/=200" (repetible) | |
--remove-params L | Eliminar parámetros de URL, p. ej. "utm_*,gclid" | |
--auth USER:PASS | Autenticación HTTP (sitios de preproducción) | |
--header "K: V" | Cabecera HTTP personalizada (repetible) | |
--extract N=SEL | Extracción personalizada (repetible): N=SEL (CSS, texto), N=/regex/, N=xpath:EXPR, N=attr:href:SEL, N=html:SEL, N=count:SEL; una columna por regla en pages.csv | |
--sitemap URL | Modo lista desde un sitemap o un índice de sitemaps: rastrear exactamente las URL listadas | |
--keep-params | Conservar los parámetros de URL tal cual (por defecto: ordenados, parámetros de seguimiento utm_*/gclid/fbclid… eliminados) | |
--robots-unavailable allow|disallow | robots.txt en 5xx o inaccesible: prohibirlo todo (RFC 9309, por defecto) o permitirlo todo | disallow |
--psi N | PageSpeed Insights + Core Web Vitals (CrUX) para las N páginas más importantes | |
--psi-key KEY | Clave de API de Google (o variable ARACHNIDE_PSI_KEY) · --psi-strategy mobile|desktop | |
--gsc-key FILE | Search Console: archivo de clave JSON de la cuenta de servicio | |
--gsc-property P | Propiedad de Search Console (sc-domain:example.com), detectada automáticamente si se omite | |
--gsc-days N | Periodo de Search Console en días | 90 |
--gsc-csv FILE | Importar una exportación CSV «Páginas» de Search Console en lugar de la API | |
--ga4-key FILE | Google Analytics 4: archivo de clave JSON de la cuenta de servicio (la de Search Console sirve si tiene acceso) | |
--ga4-property ID | ID de propiedad GA4 (123456789), detectado desde el dominio si se omite | |
--ga4-days N | Periodo de GA4 en días | 90 |
--ga4-csv FILE | Importar una exportación CSV de GA4 «Páginas y pantallas» (o «Página de destino») en lugar de la API | |
--alert-email A,B | Enviar una alerta por correo electrónico si el rastreo ha empeorado respecto al anterior (para cron) | |
--alert-score-drop N | Umbral de alerta en puntos de puntuación | 5 |
--ignore-robots | Ignorar el robots.txt (equivale a --robots ignore) | |
--subdomains | Rastrear también los subdominios | |
--no-sitemap | No leer los sitemaps XML | |
--include REGEX | Rastrear solo las URL que coinciden con la regex (repetible: una regex por opción) | |
--exclude REGEX | Ignorar las URL que coinciden con la regex (repetible) | |
--stay-in-folder | No salir de la carpeta de la URL de inicio (https://x.com/blog/ → solo /blog/…) | |
--search TEXT | Búsqueda personalizada en el código fuente (se admite /regex/) | |
--segments FILE | Segmentos (JSON exportado desde la aplicación, o [{ "name", "match", "rules": [{ "field", "op", "value" }] }]): puntuación, errores y medias por sección, columna de segmento en el CSV, sección en el informe | |
--segment-folders | Un segmento por directorio de primer nivel (automático) | |
--segment ID | Informe y CSV solo de este segmento (p. ej. --segment blog) | |
--lang CODE | en | fr | de | es | it | pt (etiquetas, CSV, informe) | |
--csv | Exportar también pages.csv e issues.csv | |
--report | Generar también un informe de auditoría HTML profesional (para imprimir en PDF) · --report-title, --client, --author, --company, --contact, --website, --color "#5b8c1e" | |
--compare FILE | Rastreo anterior para mostrar la evolución en el informe | |
--out DIR | Carpeta de salida | ./crawls |
--resume FILE | Retomar un rastreo interrumpido desde su diario (<out>/.en-cours/*.ndjson) | |
--no-journal | No escribir el diario de reanudación durante el rastreo |
Reglas de extracción
--extract NOMBRE=REGLA, repetible, una columna por regla en pages.csv:
| Regla | Significado |
|---|---|
price=.price | Selector CSS, contenido de texto |
author=attr:content:meta[name=author] | Selector CSS, valor de un atributo |
menu=html:nav.main | Selector CSS, HTML interno |
links=count:a[href] | Selector CSS, número de coincidencias |
sku=xpath://meta[@itemprop='sku']/@content | XPath (Chrome en modo renderizado, jsdom en caso contrario) |
phone=/\+34 \d{3} \d{3} \d{3}/ | Expresión regular (tiempo límite de 2 segundos por página) |
Salidas
Los archivos se escriben en --out (por defecto ./crawls), con el nombre <host>_<fecha>:
<host>_<fecha>.jsonl.gz: el rastreo completo (NDJSON, un objeto JSON por línea, gzip);<host>_<fecha>_pages.csvy_issues.csvcon--csv(separados por punto y coma, UTF-8 con BOM, una columna por extracción, una columna Segmento cuando hay segmentos definidos);<host>_<fecha>_report_<idioma>.htmlcon--report;crawls/.en-cours/<host>_<fecha>.ndjson: el diario de reanudación mientras se ejecuta un rastreo (se conserva tras Ctrl+C, se elimina al terminar).
Pulsa Ctrl+C para detener un rastreo limpiamente; la CLI muestra entonces el comando --resume para retomarlo más tarde.
Cron y alertas
--alert-email you@example.com --alert-score-drop 5 compara el rastreo con el rastreo anterior del mismo host en la carpeta de salida y te envía un correo solo cuando algo ha empeorado (ajustes SMTP de la aplicación, o ARACHNIDE_SMTP_URL). Consulta Datos de Google, rastreos programados y alertas.
Otros comandos
| Comando | Función |
|---|---|
npm start | La interfaz web en http://localhost:4000 (PORT y HOST para cambiarlos; ARACHNIDE_NO_SCHEDULER=1 desactiva los rastreos programados) |
npm run mcp | El servidor MCP por stdio (también arachnide-mcp como binario) |
npm run scheduler | Los rastreos programados sin la interfaz |
npm run bench -- --pages 200000 | El benchmark sobre el sitio sintético |
npm test | La suite de pruebas (Node 18, 20 y 22) |