Kommandozeile
Die vollständige Referenz zu node src/cli.mjs - jede Option mit ihrem Standardwert, Ausgaben (NDJSON, CSV, HTML-Bericht), Vergleich, Segmente, Fortsetzen, Sitemap und Extraktion.
Verwendung
node src/cli.mjs <url> [options]
node src/cli.mjs --list urls.txt [options]
Die CLI gibt den Score und die Probleme in Ihrer Sprache aus, speichert den Crawl als gezipptes NDJSON (das die Oberfläche über Importieren oder aus dem Verlauf öffnet), exportiert mit --csv pages.csv und issues.csv und schreibt mit --report einen HTML-Auditbericht in Ihrem Branding, den Sie als PDF drucken können. JSON, CSV und Bericht werden jeweils als Stream und unabhängig voneinander geschrieben: Ein Fehlschlag blockiert die anderen nicht, und der Exit-Code ist 1, wenn einer fehlgeschlagen ist.
Beispiele
node src/cli.mjs https://www.example.com --max 2000 --csv --report --lang de
node src/cli.mjs https://www.example.com --render --ua googlebotMobile --report --client "ACME" --author "Ihr Name"
node src/cli.mjs --list urls.txt --lang de --csv
node src/cli.mjs --sitemap https://www.example.com/sitemap.xml --extract "preis=.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 "preis=.price" --remove-params "utm_*,gclid"
node src/cli.mjs --help
Optionen
Erzeugt aus node src/cli.mjs --help im Repository (3.21.0); die Standardwerte stammen aus dem Code.
| Option | Beschreibung | Standard |
|---|---|---|
--max N | Maximale Anzahl URLs | 500 |
--depth N | Maximale Tiefe | 20 |
--concurrency N | Gleichzeitige Anfragen | 5 |
--delay MS | Pause zwischen zwei Anfragen pro Worker, in ms | 0 |
--ua NAME | User-Agent: arachnide | googlebot | googlebotMobile | chrome | arachnide |
--render | JavaScript-Rendering mit Chrome / Edge (installierter Browser) | |
--list FILE | Listenmodus: nur die URLs einer Textdatei crawlen (eine pro Zeile) | |
--external | Externe Links prüfen | |
--images | Größe und Status der Bilder prüfen | |
--rate N | Maximal URLs pro Sekunde (globale Obergrenze) | |
--robots MODE | respect | report (ignorieren, aber melden) | ignore | respect |
--custom-robots F | Diese robots.txt-Datei anstelle der Datei der Website verwenden | |
--per-depth N | Maximal URLs pro Tiefenebene | |
--folder-depth N | Maximale Ordnertiefe | |
--max-params N | Maximale Anzahl URL-Parameter | |
--max-redirects N | Maximal zu folgende Weiterleitungen | 10 |
--path-limit P=N | Limit pro URL-Pfad, z. B. "/blog/=200" (wiederholbar) | |
--remove-params L | URL-Parameter entfernen, z. B. "utm_*,gclid" | |
--auth USER:PASS | HTTP-Authentifizierung (Staging-Websites) | |
--header "K: V" | Benutzerdefinierter HTTP-Header (wiederholbar) | |
--extract N=SEL | Benutzerdefinierte Extraktion (wiederholbar): N=SEL (CSS, Text), N=/regex/, N=xpath:EXPR, N=attr:href:SEL, N=html:SEL, N=count:SEL; eine Spalte pro Regel in pages.csv | |
--sitemap URL | Listenmodus aus einer Sitemap oder einem Sitemap-Index: genau die aufgeführten URLs crawlen | |
--keep-params | URL-Parameter unverändert lassen (Standard: sortiert, Tracking-Parameter utm_*/gclid/fbclid… entfernt) | |
--robots-unavailable allow|disallow | robots.txt mit 5xx oder unerreichbar: alles verbieten (RFC 9309, Standard) oder alles erlauben | disallow |
--psi N | PageSpeed Insights + Core Web Vitals (CrUX) für die N wichtigsten Seiten | |
--psi-key KEY | Google-API-Schlüssel (oder Variable ARACHNIDE_PSI_KEY) · --psi-strategy mobile|desktop | |
--gsc-key FILE | Search Console: JSON-Schlüsseldatei des Dienstkontos | |
--gsc-property P | Search-Console-Property (sc-domain:example.com), automatisch erkannt, wenn nicht angegeben | |
--gsc-days N | Search-Console-Zeitraum in Tagen | 90 |
--gsc-csv FILE | CSV-Export „Seiten“ aus der Search Console anstelle der API importieren | |
--ga4-key FILE | Google Analytics 4: JSON-Schlüsseldatei des Dienstkontos (die der Search Console funktioniert, wenn sie Zugriff hat) | |
--ga4-property ID | GA4-Property-ID (123456789), aus der Domain erkannt, wenn nicht angegeben | |
--ga4-days N | GA4-Zeitraum in Tagen | 90 |
--ga4-csv FILE | GA4-CSV-Export „Seiten und Bildschirme“ (oder „Landingpage“) anstelle der API importieren | |
--alert-email A,B | E-Mail-Benachrichtigung senden, wenn sich der Crawl gegenüber dem vorherigen verschlechtert hat (für cron) | |
--alert-score-drop N | Alarmschwelle in Score-Punkten | 5 |
--ignore-robots | robots.txt ignorieren (entspricht --robots ignore) | |
--subdomains | Auch Subdomains crawlen | |
--no-sitemap | XML-Sitemaps nicht lesen | |
--include REGEX | Nur URLs crawlen, die zur Regex passen (wiederholbar: eine Regex pro Option) | |
--exclude REGEX | URLs ignorieren, die zur Regex passen (wiederholbar) | |
--stay-in-folder | Den Ordner der Start-URL nicht verlassen (https://x.com/blog/ → nur /blog/…) | |
--search TEXT | Benutzerdefinierte Suche im Quellcode (/regex/ erlaubt) | |
--segments FILE | Segmente (aus der App exportiertes JSON oder [{ "name", "match", "rules": [{ "field", "op", "value" }] }]): Score, Fehler und Mittelwerte je Bereich, Spalte Segment im CSV, Abschnitt im Bericht | |
--segment-folders | Ein Segment pro Verzeichnis der ersten Ebene (automatisch) | |
--segment ID | Bericht und CSV nur für dieses Segment (z. B. --segment blog) | |
--lang CODE | en | fr | de | es | it | pt (Beschriftungen, CSV, Bericht) | |
--csv | Zusätzlich pages.csv und issues.csv exportieren | |
--report | Zusätzlich einen professionellen HTML-Auditbericht erzeugen (als PDF zu drucken) · --report-title, --client, --author, --company, --contact, --website, --color "#5b8c1e" | |
--compare FILE | Vorheriger Crawl, um die Entwicklung im Bericht zu zeigen | |
--out DIR | Ausgabeordner | ./crawls |
--resume FILE | Unterbrochenen Crawl aus seinem Journal fortsetzen (<out>/.en-cours/*.ndjson) | |
--no-journal | Während des Crawls kein Fortsetzungsjournal schreiben |
Extraktionsregeln
--extract NAME=REGEL, wiederholbar, eine Spalte pro Regel in pages.csv:
| Regel | Bedeutung |
|---|---|
preis=.price | CSS-Selektor, Textinhalt |
autor=attr:content:meta[name=author] | CSS-Selektor, Attributwert |
menu=html:nav.main | CSS-Selektor, inneres HTML |
links=count:a[href] | CSS-Selektor, Anzahl der Treffer |
sku=xpath://meta[@itemprop='sku']/@content | XPath (Chrome im Rendering-Modus, sonst jsdom) |
telefon=/\+34 \d{3} \d{3} \d{3}/ | Regulärer Ausdruck (Zeitlimit von 2 Sekunden pro Seite) |
Ausgaben
Die Dateien werden in --out geschrieben (Standard ./crawls) und <host>_<date> benannt:
<host>_<date>.jsonl.gz: der vollständige Crawl (NDJSON, ein JSON-Objekt pro Zeile, gezippt);<host>_<date>_pages.csvund_issues.csvmit--csv(durch Semikolon getrennt, UTF-8 mit BOM, eine Spalte pro Extraktion, eine Spalte Segment, wenn Segmente definiert sind);<host>_<date>_report_<lang>.htmlmit--report;crawls/.en-cours/<host>_<date>.ndjson: das Fortsetzungsjournal, während ein Crawl läuft (nach Ctrl+C erhalten, bei Abschluss gelöscht).
Drücken Sie Ctrl+C, um einen Crawl sauber zu stoppen; die CLI gibt dann den --resume-Befehl aus, um ihn später fortzusetzen.
Cron und Benachrichtigungen
--alert-email you@example.com --alert-score-drop 5 vergleicht den Crawl mit dem vorherigen Crawl desselben Hosts im Ausgabeordner und schreibt Ihnen nur, wenn sich etwas verschlechtert hat (SMTP-Einstellungen aus der App oder ARACHNIDE_SMTP_URL). Siehe Google-Daten, geplante Crawls und Benachrichtigungen.
Weitere Befehle
| Befehl | Zweck |
|---|---|
npm start | Die Weboberfläche auf http://localhost:4000 (PORT und HOST zum Ändern; ARACHNIDE_NO_SCHEDULER=1 deaktiviert geplante Crawls) |
npm run mcp | Der MCP-Server über stdio (auch arachnide-mcp als Bin) |
npm run scheduler | Geplante Crawls ohne die Oberfläche |
npm run bench -- --pages 200000 | Der Benchmark auf der synthetischen Site |
npm test | Die Testsuite (Node 18, 20 und 22) |