sitemap-tracker
Features CLI Verantwortung Installation GitHub
Open Source TUI Tool · v2.9.0

Sitemap
Tracker

Crawlt Websites, generiert standardkonforme sitemap.xml Dateien — und trackt tote Links, Last-Modified-Dates und SEO-Probleme direkt im Terminal.

GitHub Repository Installation
Ein Crawl erzeugt Last. Der Crawler folgt Links bis zur eingestellten Tiefe, mit --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.
Features

Was es kann

Ein vollwertiger Website-Crawler mit interaktiver Terminal-Oberfläche.

Dual-Modus

httpx für schnelles HTML-Crawling oder Playwright für JavaScript-Rendering — je nach Bedarf wechselbar.

🖥️

Live-TUI

Interaktive Terminal-Oberfläche mit Echtzeit-Fortschritt, URL-Tabelle, Statistiken und Tastenkürzel.

🌳

Seitenbaum

Hierarchische Baumansicht aller gecrawlten URLs mit HTTP-Status — eingebettet als Tab neben der Ergebnis-Tabelle, der Tabellen-Filter wirkt auf den Baum mit.

🤖

robots.txt

Respektiert standardmäßig die robots.txt — mit Option zum Deaktivieren für autorisierte Analysen.

🔗

Tote Links erkennen

Findet 404er und andere HTTP-Fehler automatisch beim Crawlen — inklusive der Quellseite, die den toten Link enthält.

📋

Fehlerberichte

Exportiert gefundene Fehler als JSON-Report oder JIRA-kompatible Tabelle — direkt in die Zwischenablage oder als Datei.

🎨

Themes

Anpassbare Farbthemen über textual-themes — die TUI-Oberfläche lässt sich visuell individualisieren.

📊

Auto-Split

Bei über 50.000 URLs automatisch Sitemap-Index mit Teil-Sitemaps. Priority und lastmod werden automatisch gesetzt.

↗️

Redirect-Ziele auflösen (Alias auf gleichem Host)

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.

📝

Formular-Erkennung

Erkennt <form>-Tags auf jeder Seite, markiert sie in der Tabelle und exportiert sie als JSON.

🔍

Seiten-Details

Pro ausgewählter Seite: erkannter Tech-Stack (CMS, Frameworks, Server-Software), SEO-/Meta-Daten und HTTP-Header — übersichtlich in Panels gruppiert.

⚠️

Problem-Erkennung

Markiert typische Schwachstellen pro Seite: HTTP-Fehler, fehlende SEO-Elemente, fehlende Mobil-Optimierung, langsame oder zu große Seiten.

🖼️

Seiten-Vorschau

Optionaler Screenshot der ausgewählten Seite, direkt im Terminal gerendert (Kitty-Grafik/Sixel mit Half-Block-Fallback) — abschaltbar in den Einstellungen.

💬

Footer-Tooltips

Zu jedem Tastenkürzel erscheint beim Hovern ein ausführlicher Tooltip — auch zu den kryptischen wie JIRA-Tabelle, Sitemap-Diff oder Formular-Report.

🕘

Crawl-History

Vergangene Crawls mit Datum, URL, Parametern und finalen Statistiken (gecrawlt / 200er / Fehler) — wieder aufrufbar und übernehmbar; Datum im Format der UI-Sprache.

↕️

Sortierbare Ergebnisse

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.

🔗

Klickbare Links

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.

📅

Datum & Größe direkt sichtbar

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.

🔎

Dead-Link-Quelltext-Viewer

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.

🖱️

Kontextmenü auf der Tabelle

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.

Tech Stack

Gebaut mit

Die Technologien hinter dem Projekt.

Python 3
Textual
Playwright
Chromium
httpx
BeautifulSoup
CLI

Parameter

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)
Verantwortung

Nutzung auf eigene Verantwortung

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:

  1. Sie setzen das Programm ausschließlich gegen Systeme ein, für die Ihnen eine ausdrückliche Berechtigung des Betreibers vorliegt.
  2. Sie tragen die alleinige Verantwortung für den Einsatz, die gewählten Einstellungen und alle daraus entstehenden Folgen.
  3. Vor einem Lauf gegen ein Produktivsystem prüfen Sie, ob die eingestellten Grenzwerte für dieses System angemessen sind.

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.

Installation

Schnellstart

One-Liner Installation — kein Python nötig.

Linux / macOS

curl -fsSL https://raw.githubusercontent.com/michaelblaess/sitemap-tracker/main/install.sh | bash

Windows (PowerShell)

irm https://raw.githubusercontent.com/michaelblaess/sitemap-tracker/main/install.ps1 | iex
Windows
Linux
macOS