Was Matomo beim Seitenaufruf tut
Matomo besteht aus einem Skript im Browser, matomo.js (früher piwik.js), und einem Endpunkt auf dem Server,
matomo.php (früher piwik.php), der die Messung annimmt. Für die Datenschutzfrage zählt die Trennung:
Das Laden des Skripts ist etwas anderes als das Senden einer Messung.
Wir haben das nachgestellt. Der Prüfstand ist eine lokale Testseite ohne Cookie-Banner, die nichts bedient und damit den
Zustand "vor jeder Entscheidung" abbildet. Gegenstelle war ein echter Matomo-Server in Version 5.14.2 im Docker,
Standardinstallation ohne angepasste Einstellungen. Skript und Tracker kommen von diesem Server, die Testseite lag auf einem anderen Host
(pruefstand.localhost) als der Tracker (localhost). Gemessen wurde am 30. Oktober 2026
mit Chromium 153 in einem frischen Kontext ohne Cookies und Storage, drei Läufe je Konfiguration, zwölf Sekunden Wartezeit
nach dem Laden mit Mausbewegung, Scroll und Klick. Als Befund gilt nur, was in allen drei Läufen gleich auftrat.
Die Browserseite entsprach dem früheren Lauf mit lokalem Stub (29. Oktober), neu ist die Serverseite, die wir direkt nach jedem Lauf aus der Datenbank gelesen haben.
| Konfiguration (vor trackPageView gesetzt) | Skriptabruf | Tracking-Anfrage | Cookies |
|---|---|---|---|
| Standard-Tracking-Code, nichts ergänzt | ja | ja, matomo.php, rund 20 ms nach Seitenstart | _pk_id (393 Tage), _pk_ses (Sitzung) |
requireConsent | ja | nein | keine |
requireCookieConsent | ja | ja | keine |
disableCookies | ja | ja | keine |
Mit requireConsent war der Skriptabruf (matomo.js) die einzige Anfrage der Seite überhaupt, dazu kein Cookie und kein
Eintrag im lokalen oder im Session-Speicher. Beim Selbst-Hosting liegt der Tracker meist auf der eigenen Domain oder einer Subdomain, deshalb sieht eine Liste bekannter Tracker-Domains Matomo oft nicht.
Was der Server speicherte
Die Anfrage trägt nach den Parameternamen unter anderem Seiten-URL (url), Seitentitel (action_name), Auflösung (res), Site-ID (idsite) und eine Kennung _id,
die auch ohne Cookies gesendet wird. Serverseitig lasen wir nach jedem Lauf die Tabellen für Besuche und Aktionen aus (Tabellen zwischen den Läufen nicht zurückgesetzt):
| Konfiguration | Browseranfrage | Cookies | Besuch gespeichert | IP-Muster | Fingerabdruck (config_id) |
|---|---|---|---|---|---|
| Standard | Skript + 1 Ping | _pk_id, _pk_ses | ja, mit Aktion | 4 Bytes, letzte 2 Bytes 0 (x.x.0.0) | ja, über alle Läufe identisch |
requireConsent | nur Skript | keine | nein, 0 Zeilen | nicht vorhanden | nicht vorhanden |
requireCookieConsent | Skript + Ping | keine | ja, mit Aktion | wie Standard | ja, identisch |
disableCookies | Skript + Ping | keine | ja, mit Aktion | wie Standard | ja, identisch |
Gespeichert wurden außerdem Auflösung (1280x800), Browser, Betriebssystem, Land und Referrer-Typ ("direkt"). Das Maskierungsmuster mit zwei Bytes beobachteten wir in unserer Standardinstallation; andere Installationen können anders eingestellt sein, das ist von außen nicht zu sehen.
Befund: "cookielos" heißt nicht "ohne Übertragung" und nicht "ohne Speicherung". Eine verbreitete Darstellung lautet, bei richtiger Konfiguration,
vor allem ohne Cookies, brauche Matomo weder Banner noch Einwilligung. Der Eigenversuch stützt das nicht. disableCookies und
requireCookieConsent unterdrücken die Cookies, die Tracking-Anfrage ging in beiden Fällen sofort hinaus, und der Server speicherte einen Besuch mit Fingerabdruck.
Nur requireConsent verhinderte Anfrage und Speicherung (0 Zeilen). Die Cookie-Frage ist damit
gelöst, die Frage nach Anfrage und Speicherung nicht. Ob das ohne Einwilligung zulässig ist, entscheidet nicht die Cookie-Einstellung, sondern die Rechtsgrundlage (siehe unten).
Besucherkennung ohne Cookie: Die Besucherkennung (idvisitor) übernahm der Server aus der vom Skript gesendeten _id, auch ohne Cookies,
nicht aus dem Fingerabdruck. Der Fingerabdruck (config_id) war über alle Läufe identisch. Cookielose Aufrufe mit gleichem Fingerabdruck landeten alle im selben Besuch
und überschrieben dessen idvisitor mit der jeweils neuen _id. Neue Browserkontexte mit gleichem Fingerabdruck waren serverseitig also nicht zu trennen.
Das ist ein Messbefund zum Verhalten der Standardinstallation; ob das in einem Einzelfall rechtlich relevant ist, bewerten wir hier nicht.
Grenzen dieses Versuchs: Gemessen ist das Browser-Skript zusammen mit einer Standardinstallation von Matomo 5.14.2 im Docker, in einer Momentaufnahme. Server-Einstellungen anderer Installationen (IP-Maskierung, Besuchszusammenführung, Aufbewahrung, Opt-out), Plugins und Tag Manager sind nicht gemessen.
Drei Dinge, die bei Matomo oft in einen Topf fallen
Der Befund "Matomo vor der Einwilligung" meint in Auswertungen häufig drei sehr verschiedene Dinge. Complianty zählt sie getrennt.
| Beobachtung | Was sie beweist | Was sie nicht beweist | Einstufung im Scanner |
|---|---|---|---|
Tracking-Anfrage an matomo.php oder piwik.php vor dem Klick | Es wurde eine Messung ausgelöst und an den Tracker gesendet | Ob der Server die IP kürzt, was gespeichert wird, ob Cookies gesetzt wurden | Einwilligung nötig (requires_consent = yes), Priorität kritisch |
Loader-Datei matomo.js, piwik.js, Matomo-Tag-Manager-Container, matomo.cloud | Das Skript wurde geladen | Dass je eine Messung stattfand. Mit requireConsent lädt das Skript und schweigt | Einwilligungsbedarf offen (requires_consent = unknown), Priorität wichtig, nicht kritisch |
DOM-Signal ohne erkannte Adresse (_paq, Matomo-Variable, _pk_*-Cookies) | Matomo läuft vermutlich unter eigener oder umgeleiteter Adresse | Dass vor der Einwilligung gesendet wird | Wahrscheinlich-Befund, nie automatisch kritisch, in keiner Hauptzahl enthalten |
Die Loader-Datei lädt in allen vier Konfigurationen, und mit requireConsent ist sie
das Einzige, was vor der Entscheidung passiert. Wer jeden Loader-Treffer als Verstoß wertet, beschuldigt auch Seiten, die Matomo zurückhaltend konfiguriert haben.
Wer Loader-Treffer ignoriert, übersieht den Standardfall, in dem der Loader sofort misst. Bei Loader-Treffern liest der Scanner im Browser zusätzlich aus, ob der Tracker mit
disableCookies oder requireConsent arbeitet. Das ist eine Hilfe, kein Urteil.
Wie häufig Matomo vor der Einwilligung auftaucht
Wir nennen eine Spanne, weil beide Enden eine ehrliche Aussage sind. Alle Werte in diesem Abschnitt gehören zu Stand B: 2.188.885 Websites, letzter erfolgreicher Scan ab 1. Oktober 2026, zu 91 % .de-Seiten. Davon haben 1.049.885 Seiten ein erkanntes Cookie-Banner und 1.139.000 Seiten kein erkanntes. Jeder Prozentwert bezieht sich auf alle Seiten des jeweiligen Segments.
| Kennzahl, Stand B | alle (2.188.885) | mit erkanntem Banner (1.049.885) | ohne erkanntes Banner (1.139.000) |
|---|---|---|---|
| Matomo erkannt (Anfrage gesehen, vor oder nach Einwilligung) | 5,02 % (109.782) | nicht ausgewiesen | nicht ausgewiesen |
| Vor Einwilligung, Obergrenze (Loader eingerechnet) | 3,73 % (81.555) | 4,05 % (42.489) | 3,43 % (39.066) |
Vor Einwilligung, Untergrenze (Tracking-Anfrage matomo.php oder piwik.php) | 0,29 % (6.324) | 0,20 % (2.093) | 0,37 % (4.231) |
| Matomo Cloud vor Einwilligung (Teil der Obergrenze, kein Beacon-Befund) | 0,09 % (2.041) | 0,15 % (1.560) | 0,04 % (481) |
| Erkannte cookielose oder einwilligungsgesteuerte Konfiguration | 1,49 % (32.723) | 1,62 % (16.979) | 1,38 % (15.744) |
Der Abstand zwischen Ober- und Untergrenze ist der eigentliche Befund. Von den 81.555 Seiten der Obergrenze sind 6.324 durch eine Tracking-Anfrage belegt (7,8 %). Bei den übrigen 75.231 Seiten (rund 92 %) lag nur ein Loader vor, ohne dass eine Messung sichtbar wurde. Das kann bedeuten, dass der Tracker korrekt auf die Einwilligung wartet. Es kann auch bedeuten, dass der Scanner die Messung nicht sah, etwa weil sie über einen umgeleiteten Pfad lief. Welcher Fall zutrifft, entscheidet die Prüfung der einzelnen Seite, nicht die Statistik.
Ein Banner ändert am Loader wenig. Die Obergrenze liegt mit erkanntem Banner (4,05 %) nicht niedriger als ohne (3,43 %). Bei der Tracking-Anfrage ist es umgekehrt: 0,20 % mit Banner, 0,37 % ohne. Beides sind Anteile an allen Seiten des jeweiligen Segments, und die Segmente unterscheiden sich auch in anderen Merkmalen. Ein Wirkungsnachweis des Banners ist das nicht.
Die Konfigurationszahl ist ein Hinweis, kein Entwarnungswert. Bei 1,49 % der Seiten (32.723) erkennt der Scanner eine cookielose oder
einwilligungsgesteuerte Matomo-Konfiguration. Der Eigenversuch zeigt, dass beides verschiedene Dinge sind: Nur requireConsent hält die Anfrage zurück,
disableCookies nicht. Die Zahl sagt nicht, dass auf diesen Seiten vor der Einwilligung nichts gesendet wird.
Zur Einordnung: Matomo kommt vor der Einwilligung auf 3,73 % der Seiten (Obergrenze), Plausible auf 0,33 % und Google Analytics 4 auf 6,85 %, jeweils Stand B und strenge Zählweise. Das sagt etwas über Verbreitung auf deutschen Websites, nicht über die Produkte.
Ein Teil der Seiten bleibt in allen Zahlen oben unsichtbar, weil Matomo über die eigene Domain oder einen umgeleiteten Pfad laufen kann. Hier erkennt Complianty Matomo an Spuren im Browser, zählt sie aber nicht in die Hauptzahlen. Im Gesamtkorpus (Stand A, 4.920.998 Seiten, nicht mit Stand B vergleichbar) waren es 28.489 Seiten (0,58 %), auf denen Matomo allein am Signal im Browser erkannt wurde, bei 18.079 davon mit erkennbar umgeleitetem Aufbau. Das ist ein Hinweis auf die Größenordnung des blinden Flecks, kein Befund über diese Seiten.
Cookies und Loader: was zusammen vor der Einwilligung auftrat
Dieser Abschnitt gehört zu Stand A (Gesamtkorpus 4.920.998 Seiten, gemischte Scanner-Stände), weil der Cookie-Befund nur dort ausgewertet ist. Auf den 158.940 Seiten, auf denen Matomo
vor der Einwilligung lädt (Obergrenze in Stand A: 3,23 %), stand bei 66,7 % mindestens ein Cookie schon vor der Einwilligung. Ein eigenes Matomo-Cookie (_pk_id, _pk_ses, ähnliche)
war es nur bei 38,2 %. Bei rund 62 % der Seiten mit Matomo-Treffer entsteht also vor der Einwilligung kein Matomo-Cookie, entweder weil der Loader nichts sendet oder weil Cookies abgeschaltet sind.
Die übrigen Cookies stammen von anderen Tools. Welche Namen als "eigen" gelten, ist eine Annahme unseres Auswertungsskripts.
Zur Größenordnung der Dateien: In Stand A (4.920.998 Seiten) kommt matomo.js vor der Einwilligung auf 104.956 Seiten vor, die Tracking-Anfrage matomo.php auf 8.662, also auf etwa zwölfmal weniger.
Rechtliche Einordnung
Zwei Rechtsfragen laufen bei Matomo parallel und werden oft vermischt.
Erste Frage: Speichern und Auslesen auf dem Gerät (§ 25 TDDDG)
§ 25 Abs. 1 TDDDG verlangt eine Einwilligung, wenn Informationen auf dem Endgerät gespeichert oder von dort ausgelesen werden, unabhängig davon, ob die Informationen personenbezogen sind. Das stellt die Orientierungshilfe Digitale Dienste der Datenschutzkonferenz (DSK, Version 1.2, Stand November 2024) in Rn. 26 ausdrücklich fest, und der EuGH hat es für Cookies im Urteil Planet49 (C-673/17) bestätigt. Ausnahmen gibt es für Vorgänge, die für den ausdrücklich gewünschten Dienst unbedingt erforderlich sind (§ 25 Abs. 2 Nr. 2 TDDDG).
Die Cookies _pk_id und _pk_ses sind ein Speichervorgang auf dem Gerät. Ob ein Reichweiten-Cookie unter die Ausnahme fällt, beantwortet die DSK nicht pauschal.
In Rn. 87 bis 90 der Orientierungshilfe erklärt sie, warum sie keine allgemeine Aussage zur Reichweitenmessung trifft. Die Begriffe seien zu unbestimmt. Eine Festlegung könne "allenfalls für eine genau definierte
Konfiguration und Zweckbestimmung" getroffen werden, und sie gelte nicht mehr, wenn weitere Informationen oder Auswertungsergebnisse hinzukommen (Rn. 89).
Selbst die einfache Messung von Besucherzahlen sei nicht per se Teil des Basisdienstes (Rn. 90).
Interessant ist die Grenze zur Tracking-Anfrage ohne Cookie. Rn. 24 der Orientierungshilfe wertet es als Zugriff auf das Endgerät, wenn per JavaScript aktiv
Eigenschaften ausgelesen und für einen Fingerabdruck an einen Server übermittelt werden. Die Matomo-Anfrage trägt nach unserem Versuch Parameter wie
Bildschirmauflösung und Browserdaten. Ob das im Einzelfall ein solcher Zugriff ist, ist nicht geklärt und gehört in die Prüfung durch eine Rechtsberatung.
disableCookies löst das Cookie-Problem, nicht automatisch das der Anfrage.
Zweite Frage: die Verarbeitung der Daten (DSGVO)
Was nach dem Zugriff mit den Daten geschieht, richtet sich nach der DSGVO. Die DSK trennt das in Rn. 14 und 15: Für Vorgänge, die nur unter das TDDDG fallen, gilt die DSGVO nicht. Wo personenbezogene Daten verarbeitet werden, geht § 25 TDDDG für das Speichern und Auslesen vor, für die nachfolgende Verarbeitung gelten die allgemeinen Vorgaben der DSGVO. Als Rechtsgrundlage kommt neben der Einwilligung (Art. 6 Abs. 1 lit. a) das berechtigte Interesse (Art. 6 Abs. 1 lit. f) in Betracht, die DSK beschreibt dazu eine dreistufige Prüfung (Rn. 107 f.). Sie hält im Kontext des Trackings die Voraussetzungen des berechtigten Interesses allerdings nur in wenigen Konstellationen für erfüllt (Rn. 109).
Unsere Einordnung für die Rollen: Bei selbst gehostetem Matomo ist der Betreiber der Website zugleich der Verantwortliche und der Betreiber des Servers, es gibt keinen externen Empfänger. Dann ist weder ein Auftragsverarbeitungsvertrag noch ein Drittlandtransfer zu erwarten, solange der Server in der EU steht. Eine Agentur, die Matomo im Auftrag von Kunden betreibt, verarbeitet in der Regel weisungsgebunden für diese und ist dann typischerweise Auftragsverarbeiter (Art. 28 Abs. 3 DSGVO verlangt einen Vertrag je Kunde). Bei Matomo Cloud ist der Hersteller (InnoCraft) nach seiner eigenen Vereinbarung Auftragsverarbeiter (Matomo Cloud DPA, Version 3.0 vom 9. Oktober 2025). Nach dieser Vereinbarung läuft das Hosting bei AWS in Frankfurt mit Backups in Dublin. Der Anbieter sitzt in Neuseeland, Übermittlungen dorthin stützt er auf den Angemessenheitsbeschluss der EU-Kommission (Herstellerangaben).
Die französische Ausnahme und ihre Reichweite
Die französische Datenschutzbehörde CNIL lässt Reichweitenmessung unter engen Bedingungen ohne Einwilligung zu. Nach ihrer Seite vom 4. Juli 2025 (Art. 82 des französischen Datenschutzgesetzes) muss der Zweck strikt auf die Messung der Reichweite der eigenen Website beschränkt sein, es dürfen nur anonyme statistische Daten entstehen, ein Abgleich mit anderen Verarbeitungen und ein übergreifendes Tracking sind ausgeschlossen. Als Empfehlung nennt die CNIL eine Laufzeit der Kennungen von etwa 13 Monaten und eine Aufbewahrung von höchstens 25 Monaten. Das ältere CNIL-Merkblatt Sheet 16 von 2020 nennt zusätzlich die Information der Nutzer, eine Widerspruchsmöglichkeit und das Kürzen des letzten Bytes der IP-Adresse. Matomo bietet dafür nach eigener Aussage einen CNIL-Modus an und erklärt auf Grundlage einer Selbstbewertung, damit die CNIL-Kriterien zu erfüllen. Laut Matomo-Dokumentation setzt der Modus die Aufbewahrung auf 759 Tage, maskiert die IP um zwei Bytes, schaltet Heatmaps, Sitzungsaufzeichnungen, Besucherprofile und User-ID ab und schließt Marketingmessung aus. Das sind Herstellerangaben, keine Bestätigung der CNIL. Die Ausnahme ist französisches Recht; die DSK trifft keine entsprechende allgemeine Aussage (siehe oben).
Drei Wege im Vergleich
| Weg | Was vor der Entscheidung passiert | Was der Scanner sieht |
|---|---|---|
requireConsent plus Einwilligung über das Banner | nur der Skriptabruf, serverseitig 0 Zeilen (Versuch) | Loader, Einwilligungsbedarf offen, Priorität wichtig |
| Matomo erst nach der Einwilligung laden | nichts (nach Konstruktion, nicht im Prüfstand gemessen) | kein Treffer vor dem Klick, Treffer danach |
requireCookieConsent oder disableCookies, Tracking ohne Einwilligung | Skriptabruf und Tracking-Anfrage, keine Cookies, Besuch mit Fingerabdruck serverseitig gespeichert (Versuch) | Tracking-Anfrage vor dem Klick, als einwilligungspflichtig eingestuft |
In der dritten Zeile können Scanner und Rechtslage auseinanderliegen. Ein Scanner sieht nur, dass die Anfrage hinausgeht, nicht, ob der Betreiber das berechtigte Interesse geprüft und dokumentiert hat. Complianty weist die Seite deshalb als Befund aus, nicht als festgestellte Rechtswidrigkeit, und die Agentur kann eine Ausnahme dokumentieren.
requireConsent im Code
Nach der Matomo-Entwicklerdokumentation sendet der Tracker mit requireConsent keine Tracking-Anfrage und setzt keine Cookies, bis die Einwilligung
bestätigt ist. Der Eigenversuch bestätigt das für Version 5.14.2, auch serverseitig. Die Reihenfolge zählt: Der Aufruf muss vor trackPageView stehen.
var _paq = window._paq = window._paq || [];
_paq.push(['requireConsent']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
/* ... Tracker-URL, Site-ID, Skript laden wie im Standardcode ... */
/* Aufruf aus dem Consent-Tool, wenn der Besucher zustimmt: */
_paq.push(['rememberConsentGiven']);
rememberConsentGiven speichert die Zustimmung in einem eigenen Cookie (mtm_consent). Auch das ist ein Speichervorgang und gehört in die Cookie-Liste.
Widerruf läuft über forgetConsentGiven.
Serverseitig sind IP-Maskierung und Aufbewahrung die Stellschrauben. In unserer Standardinstallation beobachteten wir die Maskierung um zwei Bytes (x.x.0.0). Laut Herstellerdokumentation
lässt sich das in der Verwaltung unter Datenschutz erhöhen, und für Rohdaten empfiehlt der Hersteller automatische Löschung nach drei bis sechs Monaten (Herstellerangabe, nicht gemessen). Der Scanner sieht davon nichts, es muss im Betrieb geprüft werden.
Wer ohne Einwilligung arbeitet, braucht außerdem einen Widerspruchsweg: In der französischen Ausnahme ist er Bedingung (CNIL Sheet 16), und bei berechtigtem Interesse gibt Art. 21 DSGVO ein Widerspruchsrecht.
Was wir bei Matomo nicht sagen können
- Wie viele Seiten mit Loader wirklich messen. Der Scanner erfasst die Anfragen bis zum Klick. Ein Tracker, der nach drei Sekunden oder erst beim Scrollen sendet, kann herausfallen. Der Prüfstand wartete zwölf Sekunden.
- Wie viele Instanzen die IP kürzen. Das ist eine Servereinstellung ohne Spur im Browser. Wir sahen nur unsere Standardinstallation.
- Wie sich Matomo in Safari und Firefox verhält. Wir haben nur mit Chromium gemessen.
- Matomo-Tag-Manager-Container und Plugins. Im Prüfstand lief nur der Standard-Tracker. Auch die Aufbewahrung der gespeicherten Besuche haben wir nicht beobachtet.
Schnellprüfung und Agenturen
Läuft Matomo unter eigener Adresse, zeigt der Netzwerk-Reiter keinen matomo-Treffer. Dann hilft in der Konsole window._paq: Ist das Objekt vorhanden, läuft Matomo.
Eine Tracking-Anfrage erkennen Sie an matomo.php mit dem Parameter rec=1. Prüfen Sie Zustimmen und Ablehnen getrennt, denn ein Banner, das nur andere Tools blockiert, lässt Matomo laufen.
Wo Matomo in Complianty auftaucht
Ein Treffer auf die Tracking-Anfrage wird als Befund "Tool vor Einwilligung" mit der Priorität Kritisch angelegt, ein reiner Loader-Treffer als wichtig. Matomo, das nur an Signalen im Browser erkannt wird, erscheint als Wahrscheinlich-Befund und wird nie automatisch kritisch. Im Verarbeitungsverzeichnis erscheint Matomo einmal je Mandant. Der Beweis-Block zeigt die geschwärzte Anfrage, den Zeitpunkt relativ zum Klick und die Phase.