Blog-Statistiken Ohne Tracking — Mit GoAccess Und Nginx
Das Problem mit Web-Analytics
Wer einen Blog betreibt, will natürlich wissen: Liest das überhaupt jemand? Welche Beiträge kommen an? Woher kommen die Besucher?
Die Standardantwort der Branche lautet seit Jahren: Google Analytics. Oder eines der dutzend Tracking-Tools, die alle dasselbe tun — ein JavaScript-Snippet in jede Seite einbauen, das den Besucher verfolgt. IP-Adresse, Browser-Fingerprint, Verweildauer, Scrollverhalten, manchmal sogar Mausbewegungen.
Dafür braucht man dann ein Cookie-Banner. Und eine ausufernde Datenschutzerklärung. Und ein schlechtes Gewissen.
Die Alternative: Server-Logs auswerten
Die Sache ist: Der Webserver weiß bereits alles, was ich wissen muss. Jeder Seitenaufruf erzeugt einen Eintrag im Access-Log:
192.168.x.x - - [11/Mar/2026:19:30:00 +0100] "GET /posts/stryker-cyberangriff-2026/ HTTP/2.0" 200 12345 "https://example.com/" "Mozilla/5.0 ..."Da steht drin: Wann, welche Seite, welcher Browser, woher verlinkt. Ohne JavaScript, ohne Cookies, ohne dass der Besucher irgendetwas davon mitbekommt.
GoAccess: Das unterschätzte Werkzeug
GoAccess ist ein Open-Source Log-Analyzer, der genau das tut. Geschrieben in C, extrem schnell, läuft komplett auf dem Server. Es liest die vorhandenen nginx-Logfiles und generiert daraus ein übersichtliches HTML-Dashboard.
Was ich damit sehe:
- Eindeutige Besucher pro Tag — wie viele verschiedene Leute waren hier?
- Meistbesuchte Seiten — welche Beiträge werden gelesen?
- Referrer — woher kommen die Besucher? (Suchmaschine, Social Media, Direktaufruf)
- Browser und Betriebssysteme — brauche ich mir über IE11-Kompatibilität Sorgen machen? (Spoiler: Nein.)
- HTTP-Statuscodes — gibt es kaputte Links oder Fehler?
- Zeitverteilung — wann wird der Blog gelesen?
Das Setup
Die Einrichtung ist erfrischend simpel:
1. Eigenes Logfile für den Blog
In der nginx-Konfiguration bekommt der Blog sein eigenes Access-Log, getrennt von anderen Seiten auf demselben Server:
| |
2. GoAccess installieren und konfigurieren
Auf Debian/Ubuntu:
| |
Ein kleines Script liest die Logs und generiert einen statischen HTML-Report:
| |
Was die Flags tun:
| Flag | Funktion |
|---|---|
--persist / --restore | Speichert Daten dauerhaft in einer lokalen DB — historische Statistiken bleiben erhalten, auch wenn Logfiles rotiert werden |
--anonymize-ip | IP-Adressen werden gekürzt, bevor sie gespeichert werden |
--ignore-crawlers | Bots und Crawler werden aus der Statistik gefiltert |
3. Cron-Job für stündliche Updates
0 * * * * /opt/blog/stats-update.sh >/dev/null 2>&14. Zugang absichern
Das Stats-Dashboard wird per Basic Auth geschützt. Kein öffentlicher Zugang:
| |
Was ich NICHT brauche
- ❌ Kein JavaScript-Tracking auf der Seite
- ❌ Keine Cookies
- ❌ Kein Cookie-Banner
- ❌ Keine externe Datenübertragung an Drittanbieter
- ❌ Keine DSGVO-Einwilligung für Analytics nötig
- ❌ Keine Datenbank (MySQL/PostgreSQL) für ein Analytics-Tool
- ❌ Keine PHP-Runtime
Das Ergebnis
Ein sauberes Dashboard, das mir alles zeigt was ich wissen will — und den Besucher komplett in Ruhe lässt. Kein Tracking-Script, das die Seite verlangsamt. Kein “Wir verwenden Cookies”-Popup. Keine Daten, die an Google oder sonst wen fließen.
Die Daten bleiben auf meinem Server. Die IP-Adressen werden anonymisiert. Und das Ganze läuft mit einem 50-Kilobyte-Binary, das in Millisekunden fertig ist.
Fazit
Wenn man sich fragt, warum so viele Websites ein Cookie-Banner vor den eigentlichen Inhalt schieben: Das muss nicht sein. Die Logfiles, die der Webserver sowieso schreibt, enthalten alles was man für sinnvolle Blog-Statistiken braucht. Man muss sie nur auswerten.
GoAccess macht genau das. Einfach, schnell, ohne Ballast. Und der Besucher merkt nichts — so wie es sein sollte.