Ligne de commande
La référence complète de node src/cli.mjs - chaque option avec sa valeur par défaut, les sorties (NDJSON, CSV, rapport HTML), comparaison, segments, reprise, sitemap et extraction.
Usage
node src/cli.mjs <url> [options]
node src/cli.mjs --list urls.txt [options]
La CLI affiche le score et les problèmes dans votre langue, enregistre le crawl en NDJSON gzip (que l’interface ouvre avec Importer ou depuis l’historique), et avec --csv exporte pages.csv et issues.csv, avec --report écrit un rapport d’audit HTML personnalisé à imprimer en PDF. JSON, CSV et rapport sont chacun écrits en flux et indépendamment : l’échec de l’un ne bloque pas les autres, et le code de sortie est 1 si l’un a échoué.
Exemples
node src/cli.mjs https://www.example.com --max 2000 --csv --report --lang fr
node src/cli.mjs https://www.example.com --render --ua googlebotMobile --report --client "ACME" --author "Votre nom"
node src/cli.mjs --list urls.txt --lang de --csv
node src/cli.mjs --sitemap https://www.example.com/sitemap.xml --extract "prix=.price" --extract "sku=xpath://meta[@itemprop='sku']/@content" --csv
node src/cli.mjs https://www.example.com --report --compare crawls/precedent.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 "prix=.price" --remove-params "utm_*,gclid"
node src/cli.mjs --help
Options
Générées depuis node src/cli.mjs --help dans le dépôt (3.21.0) ; les valeurs par défaut viennent du code.
| Option | Description | Par défaut |
|---|---|---|
--max N | Nombre maximal d’URL | 500 |
--depth N | Profondeur maximale | 20 |
--concurrency N | Requêtes simultanées | 5 |
--delay MS | Délai entre deux requêtes par worker, en ms | 0 |
--ua NAME | Agent utilisateur : arachnide | googlebot | googlebotMobile | chrome | arachnide |
--render | Rendu JavaScript avec Chrome / Edge (navigateur installé) | |
--list FILE | Mode liste : ne crawler que les URL d’un fichier texte (une par ligne) | |
--external | Vérifier les liens externes | |
--images | Vérifier le poids et le statut des images | |
--rate N | URL par seconde au maximum (plafond global) | |
--robots MODE | respect | report (ignorer mais signaler) | ignore | respect |
--custom-robots F | Utiliser ce fichier robots.txt à la place de celui du site | |
--per-depth N | URL maximum par niveau de profondeur | |
--folder-depth N | Profondeur de dossier maximale | |
--max-params N | Nombre maximal de paramètres d’URL | |
--max-redirects N | Redirections suivies au maximum | 10 |
--path-limit P=N | Limite par chemin d’URL, ex. "/blog/=200" (répétable) | |
--remove-params L | Supprimer des paramètres d’URL, ex. "utm_*,gclid" | |
--auth USER:PASS | Authentification HTTP (sites de préproduction) | |
--header "K: V" | En-tête HTTP personnalisé (répétable) | |
--extract N=SEL | Extraction personnalisée (répétable) : N=SEL (CSS, texte), N=/regex/, N=xpath:EXPR, N=attr:href:SEL, N=html:SEL, N=count:SEL ; une colonne par règle dans pages.csv | |
--sitemap URL | Mode liste depuis un sitemap ou un index de sitemaps : crawler exactement les URL listées | |
--keep-params | Garder les paramètres d’URL tels quels (par défaut : triés, paramètres de suivi utm_*/gclid/fbclid… supprimés) | |
--robots-unavailable allow|disallow | robots.txt en 5xx ou injoignable : tout interdire (RFC 9309, par défaut) ou tout autoriser | disallow |
--psi N | PageSpeed Insights + Core Web Vitals (CrUX) pour les N pages les plus importantes | |
--psi-key KEY | Clé API Google (ou variable ARACHNIDE_PSI_KEY) · --psi-strategy mobile|desktop | |
--gsc-key FILE | Search Console : fichier de clé JSON du compte de service | |
--gsc-property P | Propriété Search Console (sc-domain:example.com), détectée automatiquement si omise | |
--gsc-days N | Période Search Console en jours | 90 |
--gsc-csv FILE | Importer un export CSV « Pages » de Search Console à la place de l’API | |
--ga4-key FILE | Google Analytics 4 : fichier de clé JSON du compte de service (celui de Search Console fonctionne s’il a accès) | |
--ga4-property ID | ID de propriété GA4 (123456789), détecté depuis le domaine si omis | |
--ga4-days N | Période GA4 en jours | 90 |
--ga4-csv FILE | Importer un export CSV GA4 « Pages et écrans » (ou « Page de destination ») à la place de l’API | |
--alert-email A,B | Envoyer une alerte par e-mail si le crawl s’est dégradé par rapport au précédent (pour cron) | |
--alert-score-drop N | Seuil d’alerte en points de score | 5 |
--ignore-robots | Ignorer le robots.txt (équivaut à --robots ignore) | |
--subdomains | Crawler aussi les sous-domaines | |
--no-sitemap | Ne pas lire les sitemaps XML | |
--include REGEX | Ne crawler que les URL correspondant à la regex (répétable : une regex par option) | |
--exclude REGEX | Ignorer les URL correspondant à la regex (répétable) | |
--stay-in-folder | Ne pas sortir du dossier de l’URL de départ (https://x.com/blog/ → /blog/… seulement) | |
--search TEXT | Recherche personnalisée dans le code source (/regex/ accepté) | |
--segments FILE | Segments (JSON exporté depuis l’application, ou [{ "name", "match", "rules": [{ "field", "op", "value" }] }]) : score, erreurs et moyennes par section, colonne segment dans le CSV, section dans le rapport | |
--segment-folders | Un segment par répertoire de premier niveau (automatique) | |
--segment ID | Rapport et CSV sur ce segment uniquement (ex. --segment blog) | |
--lang CODE | en | fr | de | es | it | pt (libellés, CSV, rapport) | |
--csv | Exporter aussi pages.csv et issues.csv | |
--report | Générer aussi un rapport d’audit HTML professionnel (à imprimer en PDF) · --report-title, --client, --author, --company, --contact, --website, --color "#5b8c1e" | |
--compare FILE | Crawl précédent pour montrer l’évolution dans le rapport | |
--out DIR | Dossier de sortie | ./crawls |
--resume FILE | Reprendre un crawl interrompu depuis son journal (<out>/.en-cours/*.ndjson) | |
--no-journal | Ne pas écrire le journal de reprise pendant le crawl |
Règles d’extraction
--extract NOM=RÈGLE, répétable, une colonne par règle dans pages.csv :
| Règle | Signification |
|---|---|
prix=.price | Sélecteur CSS, contenu texte |
auteur=attr:content:meta[name=author] | Sélecteur CSS, valeur d’attribut |
menu=html:nav.main | Sélecteur CSS, HTML interne |
liens=count:a[href] | Sélecteur CSS, nombre d’occurrences |
sku=xpath://meta[@itemprop='sku']/@content | XPath (Chrome en mode rendu, jsdom sinon) |
tel=/\+34 \d{3} \d{3} \d{3}/ | Expression régulière (délai de 2 secondes par page) |
Sorties
Les fichiers sont écrits dans --out (par défaut ./crawls), nommés <hôte>_<date> :
<hôte>_<date>.jsonl.gz: le crawl complet (NDJSON, un objet JSON par ligne, gzip) ;<hôte>_<date>_pages.csvet_issues.csvavec--csv(séparateur point-virgule, UTF-8 avec BOM, une colonne par extraction, une colonne Segment quand des segments sont définis) ;<hôte>_<date>_report_<langue>.htmlavec--report;crawls/.en-cours/<hôte>_<date>.ndjson: le journal de reprise pendant le crawl (conservé après Ctrl+C, supprimé à la fin).
Appuyez sur Ctrl+C pour arrêter proprement un crawl ; la CLI affiche alors la commande --resume pour le reprendre plus tard.
Cron et alertes
--alert-email vous@example.com --alert-score-drop 5 compare le crawl au crawl précédent du même hôte dans le dossier de sortie et ne vous écrit que si quelque chose s’est dégradé (réglages SMTP de l’application, ou ARACHNIDE_SMTP_URL). Voir Données Google, crawls planifiés et alertes.
Autres commandes
| Commande | Rôle |
|---|---|
npm start | L’interface web sur http://localhost:4000 (PORT et HOST pour changer ; ARACHNIDE_NO_SCHEDULER=1 désactive les crawls planifiés) |
npm run mcp | Le serveur MCP en stdio (aussi arachnide-mcp comme binaire) |
npm run scheduler | Les crawls planifiés sans l’interface |
npm run bench -- --pages 200000 | Le benchmark sur site synthétique |
npm test | La suite de tests (Node 18, 20 et 22) |