Piwik: Integration in WordPress und Austricksen von Adblock Plus

Hey,

da ich mich kürzlich ein wenig mit Piwik als Alternative zu Google Analytics auseinander gesetzt habe, hier eine kleine Empfehlung / Anleitung zur Integration in WordPress. Neben den technischen Aspekten werden dabei auch die datenschutzrechtliche Besonderheiten in Deutschland angesprochen.

Zunächst muss man wissen, dass in Deutschland das Tracken bzw. Verfolgen von Benutzern ohne deren Einwilligung kritisch zu betrachten ist. Gleichzeitig ist es aber auch ein berechtigtes Interesse der Webseitenbetreiber Daten über die Nutzung des eigenen Angebots zu erheben. Das Unabhängige Landeszentrum für Datenschutz Schleswig-Holstein (ULD) hat sich diesem Interessenkonflikt angenommen und eine Empfehlung herausgegeben in der geklärt wird unter welchen Gesichtspunkten der Einsatz von Web Analytics Werkzeugen insbesondere von Piwik datenschutzkonform gestaltet werden kann. Diese Richtlinie sollte man unbedingt im Vorfeld lesen und beachten. Aus ihr leiten sich drei wesentliche Punkte ab, die es im Weiteren zu berücksichtigen gilt.

  1. IP-Adressen müssen anonymisiert werden.
  2. Der Benutzer muss die Möglichkeit zum Opt-Out haben.
  3. Es muss eine Datenschutzerklärung vorhanden sein.

Anders als mit Google Analytics ist es mit Hilfe von Piwik möglich diese Punkte zu erfüllen.

An der Stelle will ich noch kurz darauf hinweisen, dass der Einsatz von Akismet (Spam Schutz für WordPress) in Deutschland wohl nicht datenschutzkonform ist und stattdessen eher auf Antispam Bee zurückgegriffen werden sollte.

Piwik Installation

Bevor Piwik in WordPress eingebunden werden kann muss dieses am besten in einen eigenen Webspace installiert werden. Auf der Webseite von Piwik findet man eine bebilderte Anleitung, welche diesen Vorgang sehr einfach beschreibt. Im wesentlichen beinhaltet dieser das Hochladen der Piwik-Dateien und das befolgen eines Installationsassistenten.

Ich empfehle das Verwenden einer generischen URL, da eine Piwik-Installation für mehrere Webseiten verwendet werden kann.

Ist die Installation von Piwik erfolgt, sollte neben dem Super-Benutzer ein weiterer Nutzer ausschließlich für die Zielseite eingerichtet werden. Hier ist es sehr wichtig, dass der Benutzer lediglich Leserechte bekommt. In der deutschen Version muss entsprechend der Haken bei „Ansicht“ gesetzt werden. Der Hintergrund ist, dass WordPress später die Auswertungen von Piwik integrieren wird und dafür Zugriff auf die Piwik-API benötigt. Vergibt man dem Nutzer statt Leserechten die Rechte eines Administrators, wäre es denkbar, dass ein potentieller Angreifer nach dem Kapern der WordPress-Installation auch die Piwik-Installation im Handstreich übernimmt.

Die Anonymisierung der IP-Adressen der Besucher lässt sich über das in Piwik bereits enthaltene Plugin AnonymizeIP realisieren. Unter Einstellungen->Plugins kann dieses aktiviert werden. Die Konfiguration des Plugins muss aber manuell über die config\config.ini.php erfolgen. Das ULD empfiehlt das Löschen der letzten 2 Blöcke einer IP-Adresse. Weiterhin wird eine maximale Speicherdauer für Cookies von 7 Tagen vorgeschlagen. Wobei ausdrücklich daraufhin gewiesen wird, dass hier ein Zeitraum zu wählen ist, der den tatsächlichen Anforderungen entspricht und nicht einfach die maximal Dauer gesetzt werden darf. Daraus ergeben sich folgende Einstellungen:

[General]
login_cookie_expire = 1209600

[Tracker]
ip_address_mask_length = 2
cookie_expire = 604800

Nachdem diese Einstellungen manuell in die config\config.ini.php eingetragen wurden, kann zur Konfiguration von WordPress übergegangen werden. Dies ist recht einfach und bedingt zwei Schritte. Zunächst wird das Plugin WP-Piwik installiert, um den Tracking-Code automatisch in WordPress einbinden zu können. Für dieses Vorhaben gibt es auch andere Plugins. WP-Piwik erscheint mir aber am ausgereiftesten. Auf der Einstellungseite von WP-Piwik wird die URL zur eigenen Piwik-Installation gesetzt und der Auth-Token des Benutzers mit Leserechten eingetragen. Ist er Haken bei Tracking gesetzt, wird der Tracking-Code automatisch eingebunden.

Der zweite Schritt umfasst das Einbinden der Datenschutzerklärung. Hier bietet sich ein Platz im Impressum an. Ein Muster für diese Erklärung findet man auf spreerecht.de. Genrell ist der Artikel auf spreerecht.de sehr empfehlenswert. Neben der Erklärung muss die Möglichkeit zum Opt-Out geboten werden. Piwik ermöglicht ein IFrame auf seiner Seite einzubinden, um dem Nutzer die entsprechende Funktion zur Verfügung zustellen. Da WordPress sich mit IFrames nicht so gut versteht, greift man am besten auf das Plugin Page View zurück. Unter der Datenschutzerklärung kann das IFrame dann einfach über

[-pageview url="http://piwik.-meinServer-.de/index.php?module=CoreAdminHome&action=optOut&language=de" width="600px" height="200px" border="yes"]

eingebunden werden.

Austricksen von Adblock Plus

Auf der Zielseite wird Piwik mit Hilfe von Javascript eingebunden. Einige Adblock Plus Filter blockieren jedoch die piwik.js Datei. Dies lässt sich relativ einfach umgehen.

Piwik kann auch ohne direkte Referenzierung auf die piwik.js in einer Webseite integriert werden. Hierfür spricht man Piwik nicht über http://piwik.-meinServer-.de/piwik.js sondern über http://piwik.-meinServer-.de/js/ an. Man lässt also die Dateibezeichnung weg und referenziert auf ein Verzeichnis. Piwik hält in dem Verzeichnis js/ eine index.php vor, die automatisch den Inhalt der piwik.js oder auch der piwik.php zurück gibt. Welche der beiden Dateien benötigt wird erkennt Piwik automatisch. Im JavaScript-Tracking-Code von Piwik können von daher bedenkenlos alle Instanzen von piwik.js oder piwik.php durch js/ ersetzt werden. (Ein Umbenennen der piwik.js ist übrigens keine gute Idee, da Piwik zum Teil hart auf dieses Script referenziert.)

Da später eine Integration in WordPress erfolgen soll, muss der standardmäßig generierte Tracking-Code angepasst werden. Dieser befindet sich in der Datei core\Tracker\javascriptCode.tpl.

<!-- Piwik -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://{$piwikUrl}" : "http://{$piwikUrl}");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
  var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {$idSite});
  piwikTracker.trackPageView();
  piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://{$piwikUrl}piwik.php?idsite={$idSite}" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->

Und ändert sich wie folgt:

<!-- Piwik -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://{$piwikUrl}" : "http://{$piwikUrl}");
document.write(unescape("%3Cscript src='" + pkBaseURL + "js/' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
  var piwikTracker = Piwik.getTracker(pkBaseURL + "js/", {$idSite});
  piwikTracker.trackPageView();
  piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://{$piwikUrl}js/?idsite={$idSite}&rec=1" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->

Nun gibt die Piwik-API einen entsprechend modifizierten Code zurück. Inwieweit diese Änderungen bei einem Piwik-Update erhalten bleiben kann ich zum aktuellen Zeitpunkt nicht beurteilen. Es sollte also bei einem Update manuell kurz geprüft werden, ob die Änderungen noch vorhanden sind. Gleichzeitig sollte man beachten, dass dies lediglich eine Erkennung auf Basis des Dateinamens unterbindet. Weitere Erkennungsmechanismen sind durchaus denkbar.

Wer noch einen Schritt weitergehen möchte und beispielsweise auch Erweiterungen, wie RequestPolicy oder NoScript, begegnen möchte, ändert die URL zu seiner Piwik-Installation entsprechend auf eine Subdomain der jeweiligen Webseite. Aus piwik.-meinServer-.de wird also xy123.-meineSeite-.de. Dies lässt sich sehr einfach mit Hilfe einer Alias-Domain oder eines CNAME-Records bewerkstelligen. Die Erweiterungen sind häufig konfiguriert, um Zugriffe auf die eigene Domain zu erlauben und lediglich Anfragen nach ‚außen‘ zu blockieren. Piwik kann in dem Fall also auch dann angesprochen werden, wenn externe Anfragen blockiert oder nicht ausgeführt werden. (Es müssen die URLs für den Tracking-Code und für das Opt-Out entsprechend aktualisiert werden.)

Weiterhin ist dem modifizierten Code von oben im noscript-Tag der Paramter &rec=1 hinzugefügt wurden, um zu erzwingen, dass auch Besucher ohne Javascript gezählt werden.

Viele Grüße
Philipp

Schreibe einen Kommentar