sitemap-tracker
Crawlt Websites, generiert standardkonforme sitemap.xml Dateien — und trackt tote Links, Last-Modified-Dates und SEO-Probleme direkt im Terminal.
--render zusätzlich an den Zwischenspeichern des Servers vorbei. Er ist deshalb
von Haus aus auf 60 Requests pro Minute gedrosselt. Setze ihn nur gegen Systeme
ein, für die Du eine Berechtigung hast — Einzelheiten
unter Verantwortung.
Ein vollwertiger Website-Crawler mit interaktiver Terminal-Oberfläche.
httpx für schnelles HTML-Crawling oder Playwright für JavaScript-Rendering — je nach Bedarf wechselbar.
Interaktive Terminal-Oberfläche mit Echtzeit-Fortschritt, URL-Tabelle, Statistiken und Tastenkürzel.
Hierarchische Baumansicht aller gecrawlten URLs mit HTTP-Status — eingebettet als Tab neben der Ergebnis-Tabelle, der Tabellen-Filter wirkt auf den Baum mit.
Respektiert standardmäßig die robots.txt — mit Option zum Deaktivieren für autorisierte Analysen.
Findet 404er und andere HTTP-Fehler automatisch beim Crawlen — inklusive der Quellseite, die den toten Link enthält.
Exportiert gefundene Fehler als JSON-Report oder JIRA-kompatible Tabelle — direkt in die Zwischenablage oder als Datei.
Anpassbare Farbthemen über textual-themes — die TUI-Oberfläche lässt sich visuell individualisieren.
Bei über 50.000 URLs automatisch Sitemap-Index mit Teil-Sitemaps. Priority und lastmod werden automatisch gesetzt.
Eine Sitemap listet nur gecrawlte HTTP-200-Seiten — reine Weiterleitungen (301/302) bleiben draußen. Sonderfall: Zeigt ein Redirect auf eine Seite auf demselben Host, die sonst nicht gelistet ist (ein interner Alias, z.B. /alter-pfad → /neuer-pfad), würde dieses Ziel durchs Raster fallen. Der Writer nimmt deshalb das aufgelöste Ziel in die Sitemap auf. Drei Regeln halten das sauber und standardkonform: (1) ein bereits als 200 gelistetes Ziel wird übersprungen (kein Doppel-Scan), (2) mehrere Redirects auf dasselbe Ziel ergeben einen Eintrag, (3) nur Ziele auf exakt demselben Host — eine sitemap.xml ist laut Standard host-gebunden, also werden Schwester-Subdomains (z.B. www.enviam.de, www.solar.enviam.de) und fremde Domains ausgeschlossen. Der finale Status des Ziels wird nicht erneut geprüft, ein defektes Alias-Ziel taucht also als Fehler im nachgelagerten Scan auf.
Erkennt <form>-Tags auf jeder Seite, markiert sie in der Tabelle und exportiert sie als JSON.
Pro ausgewählter Seite: erkannter Tech-Stack (CMS, Frameworks, Server-Software), SEO-/Meta-Daten und HTTP-Header — übersichtlich in Panels gruppiert.
Markiert typische Schwachstellen pro Seite: HTTP-Fehler, fehlende SEO-Elemente, fehlende Mobil-Optimierung, langsame oder zu große Seiten.
Optionaler Screenshot der ausgewählten Seite, direkt im Terminal gerendert (Kitty-Grafik/Sixel mit Half-Block-Fallback) — abschaltbar in den Einstellungen.
Zu jedem Tastenkürzel erscheint beim Hovern ein ausführlicher Tooltip — auch zu den kryptischen wie JIRA-Tabelle, Sitemap-Diff oder Formular-Report.
Vergangene Crawls mit Datum, URL, Parametern und finalen Statistiken (gecrawlt / 200er / Fehler) — wieder aufrufbar und übernehmbar; Datum im Format der UI-Sprache.
Klick auf eine Spaltenüberschrift sortiert die Tabelle (Status, HTTP, Tiefe, Größe, Datum, URL …). Zweiter Klick kehrt die Richtung um, die aktive Spalte bekommt einen ▲/▼-Pfeil.
URLs im Log, Header und Detail-Panel öffnen mit einem einzelnen Klick ohne festgehaltenes Strg — mit Hover-Highlight. Lokale Ergebnisdateien (sitemap.xml, JSON-Reports) öffnen sich im OS-Standardprogramm.
Das Last-Modified-Datum und die Seitengröße stehen als eigene Spalten neben der URL — sortierbar, um z.B. die ältesten oder größten Seiten auf einen Blick zu finden.
Bei jeder 4xx/5xx-Seite öffnet sich auf Klick der HTML-Quelltext der verweisenden Seite — Pygments-eingefärbt, die Zeile mit dem defekten Link in warmem Gold hervorgehoben. Drei Aktions-Buttons: Im Browser öffnen, paste-fertiges Snippet kopieren, HTML als Beweisstück speichern.
Rechtsklick auf eine Ergebnis-Zeile öffnet die fünf Bulk-Aktionen (Nur-Fehler-Toggle, Sitemap/XML, Fehler-JSON, JIRA-Tabelle, Formular-Report). Bei 4xx/5xx-Zeilen zusätzlich ein direkter Einstieg in den Quelltext-Viewer.
Die Technologien hinter dem Projekt.
Alle Optionen für die Kommandozeile.
| Parameter | Beschreibung | Default |
|---|---|---|
URL |
Start-URL der Website | — |
--output -o |
Ausgabe-Pfad für sitemap.xml | sitemap_<host>.xml |
--max-depth -d |
Maximale Crawl-Tiefe | 10 |
--concurrency -c |
Parallele Requests | 8 |
--rate-limit |
Max. Requests pro Minute (0 = ohne Limit) | 60 |
--timeout -t |
Timeout pro Seite (Sekunden) | 30 |
--render |
JavaScript mit Playwright rendern | aus |
--ignore-robots |
robots.txt ignorieren | aus |
--cookie |
Cookie setzen (NAME=VALUE, mehrfach) | — |
Was ein Crawl auf dem Zielsystem anrichtet - und wer dafür geradesteht.
Ein Crawl folgt Links bis zur eingestellten Tiefe - die Zahl der Seiten steht also
vorher nicht fest, anders als beim Scan einer festen Sitemap. Mit
--render läuft jede Seite zusätzlich durch ein echtes Chromium und damit an
den Zwischenspeichern des Servers vorbei, was ein Vielfaches der Last eines normalen
Besuchers erzeugt. Auf einer großen Website kommen so schnell mehrere hundert Requests
pro Minute zusammen - genug, um ein Produktivsystem spürbar zu verlangsamen.
Deshalb ist der Crawler voreingestellt gedrosselt: 60 Requests pro
Minute. Zwei Punkte dazu: --concurrency ist kein Rate-Limit, sondern
begrenzt nur die Gleichzeitigkeit. Und mit --render werden ausschließlich
die Seitenaufrufe gedrosselt - was der Browser danach an Skripten, Schriften und Bildern
nachlädt, zählt nicht mit, die tatsächliche Last liegt also höher als die eingestellte
Zahl.
Mit der Nutzung erklären Sie:
Die Software wird unentgeltlich und ohne jede Gewährleistung bereitgestellt ("as is"), wie in Abschnitt 7 der Apache-Lizenz 2.0 beschrieben. Eine Haftung des Autors (Michael Blaess) für Schäden, die aus der Nutzung entstehen, ist ausgeschlossen, soweit dies gesetzlich zulässig ist. Unberührt bleibt die Haftung für Vorsatz und grobe Fahrlässigkeit, für Schäden aus der Verletzung des Lebens, des Körpers oder der Gesundheit sowie nach dem Produkthaftungsgesetz.
Beim ersten Start fragt das Programm diesen Hinweis ab; ohne Zustimmung startet es nicht. Die Sprache richtet sich dabei nach der Systemumgebung.
One-Liner Installation — kein Python nötig.