Riga di comando
Il riferimento completo di node src/cli.mjs - ogni opzione con il suo valore predefinito, gli output (NDJSON, CSV, report HTML), confronto, segmenti, ripresa, sitemap ed estrazione.
Uso
node src/cli.mjs <url> [options]
node src/cli.mjs --list urls.txt [options]
La CLI mostra il punteggio e i problemi nella tua lingua, salva il crawl come NDJSON gzip (che l’interfaccia apre con Importa o dalla cronologia), e con --csv esporta pages.csv e issues.csv, con --report scrive un report di audit HTML con il tuo brand che puoi stampare in PDF. JSON, CSV e report vengono scritti ciascuno in streaming e in modo indipendente: un errore non blocca gli altri, e il codice di uscita è 1 se uno di essi è fallito.
Esempi
node src/cli.mjs https://www.example.com --max 2000 --csv --report --lang en
node src/cli.mjs https://www.example.com --render --ua googlebotMobile --report --client "ACME" --author "Your name"
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
Opzioni
Generate da node src/cli.mjs --help nel repository (3.21.0); i valori predefiniti provengono dal codice.
| Opzione | Descrizione | Predefinito |
|---|---|---|
--max N | Numero massimo di URL | 500 |
--depth N | Profondità massima | 20 |
--concurrency N | Richieste simultanee | 5 |
--delay MS | Pausa tra due richieste per worker, in ms | 0 |
--ua NAME | User agent: arachnide | googlebot | googlebotMobile | chrome | arachnide |
--render | Rendering JavaScript con Chrome / Edge (browser installato) | |
--list FILE | Modalità elenco: scansiona solo gli URL di un file di testo (uno per riga) | |
--external | Verifica i link esterni | |
--images | Verifica il peso e lo stato delle immagini | |
--rate N | URL al secondo al massimo (limite globale) | |
--robots MODE | respect | report (ignora ma segnala) | ignore | respect |
--custom-robots F | Usa questo file robots.txt al posto di quello del sito | |
--per-depth N | URL massimi per livello di profondità | |
--folder-depth N | Profondità massima delle cartelle | |
--max-params N | Numero massimo di parametri URL | |
--max-redirects N | Reindirizzamenti massimi da seguire | 10 |
--path-limit P=N | Limite per percorso URL, es. "/blog/=200" (ripetibile) | |
--remove-params L | Rimuovi parametri URL, es. "utm_*,gclid" | |
--auth USER:PASS | Autenticazione HTTP (siti di staging) | |
--header "K: V" | Header HTTP personalizzato (ripetibile) | |
--extract N=SEL | Estrazione personalizzata (ripetibile): N=SEL (CSS, testo), N=/regex/, N=xpath:EXPR, N=attr:href:SEL, N=html:SEL, N=count:SEL; una colonna per regola in pages.csv | |
--sitemap URL | Modalità elenco da una sitemap o da un indice di sitemap: scansiona esattamente gli URL elencati | |
--keep-params | Mantieni i parametri URL così come sono (per impostazione predefinita: ordinati, parametri di tracciamento utm_*/gclid/fbclid… rimossi) | |
--robots-unavailable allow|disallow | robots.txt in 5xx o irraggiungibile: vieta tutto (RFC 9309, predefinito) o consenti tutto | disallow |
--psi N | PageSpeed Insights + Core Web Vitals (CrUX) per le N pagine più importanti | |
--psi-key KEY | Chiave API di Google (o variabile ARACHNIDE_PSI_KEY) · --psi-strategy mobile|desktop | |
--gsc-key FILE | Search Console: file di chiave JSON dell’account di servizio | |
--gsc-property P | Proprietà Search Console (sc-domain:example.com), rilevata automaticamente se omessa | |
--gsc-days N | Periodo Search Console in giorni | 90 |
--gsc-csv FILE | Importa un’esportazione CSV «Pagine» di Search Console al posto dell’API | |
--ga4-key FILE | Google Analytics 4: file di chiave JSON dell’account di servizio (quello di Search Console funziona se ha accesso) | |
--ga4-property ID | ID della proprietà GA4 (123456789), rilevato dal dominio se omesso | |
--ga4-days N | Periodo GA4 in giorni | 90 |
--ga4-csv FILE | Importa un’esportazione CSV GA4 «Pagine e schermate» (o «Pagina di destinazione») al posto dell’API | |
--alert-email A,B | Invia un avviso via email se il crawl è peggiorato rispetto al precedente (per i job cron) | |
--alert-score-drop N | Soglia di avviso in punti di punteggio | 5 |
--ignore-robots | Ignora il robots.txt (equivale a --robots ignore) | |
--subdomains | Scansiona anche i sottodomini | |
--no-sitemap | Non leggere le sitemap XML | |
--include REGEX | Scansiona solo gli URL che corrispondono alla regex (ripetibile: una regex per opzione) | |
--exclude REGEX | Ignora gli URL che corrispondono alla regex (ripetibile) | |
--stay-in-folder | Non uscire dalla cartella dell’URL di partenza (https://x.com/blog/ → solo /blog/…) | |
--search TEXT | Ricerca personalizzata nel codice sorgente (/regex/ accettata) | |
--segments FILE | Segmenti (JSON esportato dall’app, oppure [{ "name", "match", "rules": [{ "field", "op", "value" }] }]): punteggio, errori e medie per sezione del sito, colonna segmento nel CSV, sezione nel report | |
--segment-folders | Un segmento per directory di primo livello (automatico) | |
--segment ID | Report e CSV solo su questo segmento (es. --segment blog) | |
--lang CODE | en | fr | de | es | it | pt (etichette, CSV, report) | |
--csv | Esporta anche pages.csv e issues.csv | |
--report | Genera anche un report di audit HTML professionale (da stampare in PDF) · --report-title, --client, --author, --company, --contact, --website, --color "#5b8c1e" | |
--compare FILE | Crawl precedente per mostrare l’evoluzione nel report | |
--out DIR | Cartella di output | ./crawls |
--resume FILE | Riprendi un crawl interrotto dal suo diario (<out>/.en-cours/*.ndjson) | |
--no-journal | Non scrivere il diario di ripresa durante il crawl |
Regole di estrazione
--extract NAME=RULE, ripetibile, una colonna per regola in pages.csv:
| Regola | Significato |
|---|---|
price=.price | Selettore CSS, contenuto testuale |
author=attr:content:meta[name=author] | Selettore CSS, valore di un attributo |
menu=html:nav.main | Selettore CSS, HTML interno |
links=count:a[href] | Selettore CSS, numero di corrispondenze |
sku=xpath://meta[@itemprop='sku']/@content | XPath (Chrome in modalità rendering, jsdom altrimenti) |
phone=/\+34 \d{3} \d{3} \d{3}/ | Espressione regolare (timeout di 2 secondi per pagina) |
Output
I file vengono scritti in --out (predefinito ./crawls), con nome <host>_<date>:
<host>_<date>.jsonl.gz: il crawl completo (NDJSON, un oggetto JSON per riga, gzip);<host>_<date>_pages.csve_issues.csvcon--csv(separatore punto e virgola, UTF-8 con BOM, una colonna per estrazione, una colonna Segmento quando sono definiti dei segmenti);<host>_<date>_report_<lang>.htmlcon--report;crawls/.en-cours/<host>_<date>.ndjson: il diario di ripresa mentre un crawl è in esecuzione (conservato dopo Ctrl+C, eliminato al completamento).
Premi Ctrl+C per interrompere un crawl in modo pulito; la CLI mostra allora il comando --resume per riprenderlo più tardi.
Cron e avvisi
--alert-email you@example.com --alert-score-drop 5 confronta il crawl con il crawl precedente dello stesso host nella cartella di output e ti scrive un’email solo se qualcosa è peggiorato (impostazioni SMTP dall’app, oppure ARACHNIDE_SMTP_URL). Vedi Dati Google, crawl pianificati e avvisi.
Altri comandi
| Comando | Scopo |
|---|---|
npm start | L’interfaccia web su http://localhost:4000 (PORT e HOST per cambiarli; ARACHNIDE_NO_SCHEDULER=1 disattiva i crawl pianificati) |
npm run mcp | Il server MCP via stdio (anche arachnide-mcp come bin) |
npm run scheduler | I crawl pianificati senza l’interfaccia |
npm run bench -- --pages 200000 | Il benchmark sul sito sintetico |
npm test | La suite di test (Node 18, 20 e 22) |