Matomo Analytics: Datenschutz und Einwilligung
Was Matomo Analytics für OXID eShop 7 aus den Datenschutz-Einstellungen im Tracking-Code macht: Cookieless, Do-Not-Track, Consent-Cookies, Klaro, Opt-Out. Mit dem, was das Modul nicht tut.
Matomo Analytics: Datenschutz und Einwilligung
Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net
Diese Seite beschreibt genau, was das Modul aus den Datenschutz-Einstellungen macht, und was es nicht tut. Die Einstellungen selbst stehen unter Konfiguration.
Das Modul setzt die Einstellung "IP-Anonymisierung" nicht um. Sie wird zwar eingelesen und im Admin angezeigt, aber nirgends in den Tracking-Code übernommen. Die Stufe 2 (Standard) schützt deshalb keine IP-Adressen. Stelle die Anonymisierung in deiner Matomo-Installation selbst ein.
Was die Einstellungen im Tracking-Code bewirken
| Einstellung | Wirkung |
|---|---|
| Cookieless Tracking | Gibt _paq.push(["disableCookies"]) aus. Matomo setzt dann keine Tracking-Cookies. |
| Do-Not-Track respektieren | Gibt _paq.push(["setDoNotTrack", true]) aus. Zusätzlich liefert das Modul ohne Klaro-Integration gar keinen Tracking-Code aus, wenn der Browser den Header DNT: 1 sendet. |
| Consent erforderlich | Gibt _paq.push(["requireConsent"]) aus. Zusätzlich prüft das Modul ohne Klaro-Integration und ohne Cookieless Tracking serverseitig ein Consent-Cookie. |
| Klaro Integration aktivieren | Bindet das Tracking-Script als type="text/plain" ein, das Klaro erst nach Einwilligung ausführt. Ergänzt einen Event-Handler, der setConsentGiven bzw. forgetConsentGiven an Matomo meldet. |
| IP-Anonymisierung | Keine Wirkung. |
Weitere Aufrufe (Heartbeat, Link-Tracking, E-Commerce) haben mit dem Datenschutz-Verhalten nichts zu tun und stehen auf der Seite Technische Details.
Wann der Tracking-Code ausgeliefert wird
Für jede Seite entscheidet isMatomoEnabled() in dieser Reihenfolge:
graph TD
A["Seitenaufruf"] --> B{"Tracking aktiviert, HTTPS-URL gültig, Site-ID größer 0?"}
B -->|"Nein"| X["Kein Tracking-Code"]
B -->|"Ja"| C{"Klaro Integration aktiv?"}
C -->|"Ja"| K["Tracking-Code als text/plain, Klaro entscheidet"]
C -->|"Nein"| D{"DNT respektieren und Header DNT 1?"}
D -->|"Ja"| X
D -->|"Nein"| E{"Cookieless Tracking aktiv?"}
E -->|"Ja"| Y["Tracking-Code ausgeliefert"]
E -->|"Nein"| F{"Consent erforderlich?"}
F -->|"Nein"| Y
F -->|"Ja"| G{"Consent-Cookie vorhanden?"}
G -->|"Ja"| Y
G -->|"Nein"| X
Wichtige Folgen:
- Mit aktiver Klaro-Integration wird die Serverprüfung übersprungen. Auch der
DNT-Header wird dann nicht serverseitig ausgewertet; es bleibt dersetDoNotTrack-Aufruf im Tracking-Code. - Bei aktivem Cookieless Tracking (Standard) wird die Consent-Cookie-Prüfung übersprungen, auch wenn "Consent erforderlich" an ist. Der
DNT-Header wird weiterhin zuerst geprüft. - Die Consent-Cookie-Prüfung läuft nur bei ausgeschaltetem Cookieless Tracking, ausgeschalteter Klaro-Integration und eingeschaltetem "Consent erforderlich".
Consent-Cookies ohne Klaro
Die Prüfung erkennt diese Cookies:
| Cookie | Gilt als Einwilligung bei den Werten |
|---|---|
matomo_consent |
1, true, yes, accepted, allow |
CookieConsent |
wie oben |
CookieControl |
wie oben |
cookie-agreed |
wie oben |
Der Wert wird ohne Beachtung der Groß- und Kleinschreibung verglichen. Jeder andere Wert zählt als keine Einwilligung. Hat eines der vier Cookies einen passenden Wert, wird der Code ausgeliefert.
Mit "Consent erforderlich" gibt das Modul
requireConsentaus, ruft aber ohne Klaro-Integration niesetConsentGivenauf. Matomo bleibt dadurch im Zustand "Einwilligung ausstehend", bis dein eigenes Skript_paq.push(["setConsentGiven"])aufruft. Ohne Klaro-Integration signalisiert das Modul also nie selbst eine erteilte Einwilligung.
Klaro-Integration
Mit aktiver Klaro-Integration passiert Folgendes:
- Tracking-Code und E-Commerce-Code stehen in
<script type="text/plain" data-type="text/javascript" data-name="...">. Der Wert fürdata-nameist der eingestellte Klaro Service-Name. Der Browser führt sie nicht aus, bis Klaro sie freigibt. - Ein normales Script (nicht blockiert) hört auf das Event
klaro-consent-change. Steht die Einwilligung für den Service-Namen auftrue, ruft es_paq.push(["setConsentGiven"])auf, nimmt die Einwilligung zurück mit_paq.push(["forgetConsentGiven"]). Aufgerufen wird nur bei einer Änderung gegenüber dem zuletzt gemeldeten Zustand. - Zusätzlich liest das Script nach dem Laden der Seite (mit 100 ms Verzögerung) den aktuellen Zustand über
klaro.getManager().getConsent(...), falls Klaro bis dahin verfügbar ist. - Solange Klaro den Tracking-Code nicht ausgeführt hat, existiert
_paqnicht und der Handler tut nichts.
Auf der Bestätigungsseite wird auch das Order-Tracking mit type="text/plain" ausgegeben.
Was an Matomo übertragen wird
Das Modul gibt folgende Daten an den Tracking-Code, sofern die jeweiligen Schalter aktiv sind:
| Bereich | Daten |
|---|---|
| Seitenaufruf | Standard-Seitenaufruf von Matomo (trackPageView). Die IP-Adresse des Besuchers sieht der Matomo-Server bei jeder Anfrage. |
| Produktansicht | Artikelnummer, Titel, Kategoriepfad, Bruttopreis |
| Warenkorb | je Position Artikelnummer, Titel, Brutto-Einzelpreis, Menge; Brutto-Gesamtwert |
| Bestellung | Bestellnummer, Umsatz, Zwischensumme, Steuer, Versandkosten, je Position Artikelnummer, Titel, Preis, Menge |
Das Modul selbst übermittelt keine Kundendaten wie Name, Adresse oder E-Mail-Adresse.
Opt-Out für Besucher
Besucher können über die Seite index.php?cl=matomo_optout oder über das Widget einem Tracking widersprechen. Beides bindet das Opt-Out-iFrame deiner Matomo-Installation ein. Details stehen unter Storefront und Templates.
Rechtlicher Hinweis
Ob für Analytics eine Einwilligung nötig ist, hängt von deiner Rechtslage und deiner Konfiguration ab. Das Modul liefert die technischen Schalter, trifft aber keine rechtliche Bewertung. Lass dich dazu rechtlich beraten.