Eigenes Grav-Plugin für kleine datenschutzkonforme Besucherstatistik

23.05.2023 13:15 Uhr

Anmerkung: Der Artikel entstand bevor ich die Website mit Kirby neu aufgebaut hab und bezieht sich auf Grav.

Beim Neuaufbau des Blogs und Einarbeiten in Grav als CMS hab ich das Thema Webanalyse und Besucherstatisitk erstmal bewusst außen vor gelassen. Vor allem aus Datenschutzgründen. Von Haus aus bekommt man im Admin das Popularity-Feature, wenn man Sessions aktiviert, was ich aber nicht möchte.

Für die ganzen Platzhirsche, wie Google Analytics, Matomo usw., die ich im Job einsetze, sollte man einen Cookie-Consent-Banner einsetzen. Ich versuche aber weiterhin bei allen Entwicklungen hier um das Speichern von personenbezogenen Daten und Cookies generell rumzukommen (siehe). Umami würde ich gern mal testen, geht aber in meiner aktuellen Serverumgebung nicht. Page-Stats hab ich mir angesehen, speichert aber z.B. IP-Nummern.

So hab ich gestern ein eigenes kleines Plugin geschrieben, dass ein paar wenige Daten in eine Textdatei speichert. IP-Nummer und User-Agent (Browser/Betriebssystem) werden hierbei maskiert und sind für niemanden, auch mich nicht einsehbar.

Eine Zeile im Logfile sieht z.B. so aus:

2023-05-22 22:40:36;/blog;ff51d36ff407aa70e0ab10158304fafa;5f41cee19ed9a634fc721192d0580d11;https://assbach.de/blog.rss;

Werte: Datum und Uhrzeit; Seite die aufgerufen wurde; Hash der IP-Nummer; Hash des User-Agents; Woher kam der Aufruf (Referer)

Die Daten reichen mir aus und ich kann so z.B. ermitteln:

  • wieviele Aufrufe eine Seite oder ein Blogartikel hatte
  • wieviele verschiedene Nutzer es waren (anonym)
  • welche Seiten am häufigsten besucht wurden
  • zu welchen Tageszeiten oder Wochentagen
  • usw.

Damit nicht eine Textdatei komplett vollläuft und die Auswertung auf Monatsbasis einfacher wird, speichere ich die Daten in einer Datei pro Monat.
Die zwei betreffenden Zeilen im Plugin sehen so aus

$filename = DATA_DIR . $pluginname. '/gravstats.'.date("Ym").'.txt';
$file = file_put_contents($filename, $logLine.PHP_EOL , FILE_APPEND | LOCK_EX);

Die Dateien sind von außen nicht erreichbar. Hab überlegt ob ich die Daten lieber in eine Datenbank schicke oder strukturiert als JSON oder YAML speichere, aber das ist in meinen Augen zuviel Overhead. Das Plugin wird nur beim Laden von Seiten initialisiert, so sind auch nicht massenweise 404er enthalten. Demnächst kümmere ich mich vielleicht noch um eine simple Auswertung, die dann als eigene Seite im Admin erscheint und um das Rausfiltern von Bots. Ich hab sehr viel nutzlosen Traffic über uralte Blogeinträge von 2007 usw., die gar nicht mehr online sind.

Wenn ihr Fragen, Anregungen, Bedenken, Kritik oder Verbesserungsvorschläge habt, gern her damit.

Das Beitragsbild wurde mit ray.so erstellt.

teilen mit Elk
Sascha
von
Antworten, Likes, Boosts.
« Vorheriger Artikel Nächster Artikel »