Messen

Matomo Tag Manager: Container, Tags, Trigger und Variablen

Der Matomo Tag Manager steuert, welcher Code wann auf Ihrer Website läuft: den Matomo-Tracker, Ereignisse und Ziele, auf Wunsch auch Dienste anderer Anbieter. Er gehört zu Matomo, und die Container-Datei kommt von Ihrer eigenen Instanz. Hier steht, wie die Teile zusammenspielen und wie Sie Änderungen sicher live bringen.

Ein Tag Manager trennt zwei Dinge: Die Website lädt nur noch einen Container, und was darin passiert, legen Sie in Matomo fest. Neue Ereignisse, ein Ziel oder ein geänderter Datenschutz-Schalter brauchen dann keinen Eingriff in den Quelltext mehr. Der Matomo Tag Manager kann dabei vieles, was man vom Google Tag Manager kennt. Der Unterschied: Er läuft in Ihrer Matomo-Instanz, und die Daten bleiben dort.

Die vier Bausteine

Baustein Frage Beispiel
Container Wo? eine Website, eine Datei container_AbC123xY.js
Tag Was passiert? Matomo zählt eine Seitenansicht oder ein Ereignis
Trigger Wann? Seitenansicht, Klick auf einen Download, Formularübertragung
Variable Mit welchen Werten? Seiten-URL, Klick-Text, ein Wert aus dem Datenlayer

Ein Tag löst aus, sobald einer seiner Trigger zutrifft. Variablen liefern die Werte, die ein Tag braucht, und schränken Trigger ein, etwa „Klick auf alle Links, wenn die Klick-Ziel-URL /kontakt/ enthält“. Im Formular verweisen Sie mit doppelten geschweiften Klammern auf eine Variable, zum Beispiel {{PageUrl}}.

Eine Variable ist besonders: Matomo-Konfiguration. Sie enthält die Adresse Ihrer Instanz, die Website-ID und alle Einstellungen zu Cookies und Einwilligung. Jeder Tag vom Typ Matomo Analytics nutzt sie. Welche Schalter dort für Cookies wichtig sind, steht unter Matomo-Cookies.

Den Container einbauen

Unter Code installieren zeigt Matomo den Einbaucode für jede Umgebung. Er gehört so weit oben wie möglich in den <head> jeder Seite:

<!-- Matomo Tag Manager -->
<script>
  var _mtm = window._mtm = window._mtm || [];
  _mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'});
  (function() {
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src='https://matomo.example.de/js/container_AbC123xY.js'; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Matomo Tag Manager -->

Die Container-Datei schreibt Matomo beim Veröffentlichen in sein Verzeichnis js/. Dafür braucht Matomo dort Schreibrechte, die Systemprüfung meldet es, wenn sie fehlen. Für Live heißt die Datei container_ID.js. Für andere Umgebungen hängt Matomo einen zufälligen Teil an, damit niemand die Adresse der Staging-Version erraten kann.

Entfernen Sie beim Umstieg den bisherigen Matomo-Tracking-Code. Laufen beide, zählt jede Seitenansicht doppelt.

Trigger: wann ein Tag auslöst

Matomo ordnet die Trigger in vier Gruppen: Klicks, Nutzer-Engagement wie Scrolltiefe, Sichtbarkeit eines Elements oder Formularübertragung, die Seitenansicht in drei Stufen und Sonstiges wie Timer, JavaScript-Fehler und benutzerdefinierte Ereignisse aus dem Datenlayer.

Matomo Tag Manager, Auswahl des Trigger-Typs: Gruppen Klick, Nutzer-Engagement, Seitenansicht und Andere mit Triggern wie Alle Downloads Klick, Elementsichtbarkeit, Formularübertragung, Scrollbereich, DOM Ready, Benutzerdefiniertes Ereignis, JavaScript-Fehler und Timer
Die Trigger-Typen im Matomo Tag Manager, hier in Matomo 6 auf unserer Testinstanz.
Klick auf das Bild: einpassen oder OriginalgrößeBild antippen: Originalgröße
Matomo Tag Manager, Auswahl des Trigger-Typs: Gruppen Klick, Nutzer-Engagement, Seitenansicht und Andere mit Triggern wie Alle Downloads Klick, Elementsichtbarkeit, Formularübertragung, Scrollbereich, DOM Ready, Benutzerdefiniertes Ereignis, JavaScript-Fehler und Timer

Die Trigger-Typen im Matomo Tag Manager, hier in Matomo 6 auf unserer Testinstanz.

Bei der Seitenansicht lohnt der Unterschied: Seitenansicht löst aus, sobald der Container läuft, DOM Ready, wenn das HTML fertig ist, Fenster geladen erst nach allen Bildern. Für den Matomo-Tag reicht die Seitenansicht. Tags, die auf Elemente der Seite zugreifen, warten besser auf DOM Ready.

Klick-Trigger auf CSS-Klassen sind schnell gebaut und gehen beim nächsten Relaunch kaputt. Für alles, was zählt, etwa eine abgeschickte Anfrage oder einen Kauf, ist der Datenlayer stabiler.

Variablen

Dutzende Variablen sind schon vorkonfiguriert, etwa Seiten-URL, Klick-Text oder Scrolltiefe. Eigene Variablen lesen Cookies, URL-Parameter, Meta-Angaben, Elemente der Seite oder den Datenlayer. Im Tag verweisen Sie immer auf den Namen, den die Variable im Tag Manager hat, etwa {{Bestellumsatz}}.

Der Datenlayer

Ein Datenlayer ist ein Übergabefach zwischen Ihrer Website und dem Tag Manager. Die Website legt dort ab, was sie weiß: was für eine Seite gerade angezeigt wird, was der Besucher eben getan hat und welche Werte dazugehören. Der Tag Manager liest daraus und entscheidet, was damit passiert. Technisch ist es ein JavaScript-Array, beim Matomo Tag Manager heißt es _mtm, beim Google Tag Manager dataLayer.

Der Gewinn ist die Arbeitsteilung: Die Entwicklung legt einmal fest, welche Informationen die Website meldet. Was davon in Matomo landet, als Ereignis, Ziel oder Dimension, entscheiden Sie danach im Tag Manager, ohne neuen Release der Website.

Die Arbeitsteilung am Beispiel einer Anfrage: Die Website schreibt nach dem erfolgreichen Versand einen Eintrag in den Datenlayer. Im Tag Manager reagiert der Trigger auf den Ereignisnamen, die Variable liest den Wert, und der Tag sendet das Ereignis mit diesem Wert an Matomo.
Was Sie messen wollen Ohne Datenlayer Mit Datenlayer
Anfrage gesendet Klick auf „Absenden“, auch wenn das Formular einen Fehler meldet Ereignis erst nach erfolgreichem Versand
Umsatz einer Bestellung aus dem Text der Bestätigungsseite gelesen als Zahl übergeben
Art der Seite aus der URL erraten vom CMS gesetzt, etwa „produkt“ oder „ratgeber“
Nach einem Relaunch Selektoren und Texte stimmen nicht mehr Messung läuft weiter, solange die Website dieselben Einträge schreibt

So arbeitet er

  • Jeder Eintrag ist ein Objekt aus Namen und Werten: { seitentyp: 'produkt' }.
  • Ein Eintrag mit event ist ein Ereignis. Trigger vom Typ Benutzerdefiniertes Ereignis reagieren auf diesen Namen. Einträge ohne event setzen nur Werte.
  • Neue Werte ersetzen alte. Schreibt die Seite später denselben Namen noch einmal, gilt der neue Wert, bei einem Objekt das ganze neue Objekt.
  • Verschachtelte Werte lesen Sie mit Punkt. Steht im Datenlayer { bestellung: { umsatz: 129.9 } }, liest eine Variable vom Typ Data-Layer mit dem Namen bestellung.umsatz den Betrag.
  • Nichts geht verloren, nur weil der Container später lädt. Was die Seite vorher in _mtm schreibt, arbeitet der Container ab, sobald er da ist.
  • Er lebt nur so lange wie die Seite. Beim nächsten Seitenaufruf beginnt er leer. Er sendet selbst nichts: Erst ein Tag bestimmt, welcher Wert an Matomo geht.
Ein Seitenaufruf im Zeitverlauf, rechts der Inhalt des Datenlayers: Was die Seite vor dem Container schreibt, wartet und wird abgearbeitet, sobald er da ist. Beim nächsten Seitenaufruf beginnt der Datenlayer wieder leer.

Personenbezogene Daten gehören nicht hinein, also keine Namen, E-Mail-Adressen oder Kundennummern. Jedes Skript auf der Seite kann den Datenlayer lesen, auch das eines Chat- oder Werbedienstes.

Beispiel 1: Informationen zur Seite

Das CMS schreibt auf jeder Seite, was für eine Seite das ist, noch vor dem Einbaucode des Containers:

<script>
  window._mtm = window._mtm || [];
  window._mtm.push({ seitentyp: 'produkt', bereich: 'outdoor', angemeldet: 'ja' });
</script>
<!-- danach der Einbaucode des Matomo Tag Managers -->

Im Tag Manager legen Sie eine Variable Data-Layer mit dem Namen seitentyp an und tragen sie im Tag Matomo Analytics unter Benutzerdefinierte Dimensionen ein, zusammen mit der Nummer einer Dimension, die Sie vorher in Matomo angelegt haben. Danach zeigt Matomo zum Beispiel, wie viele Besuche über Ratgeber kommen und wie viele über Produktseiten.

Beispiel 2: Anfrage erfolgreich gesendet

Das Kontaktformular meldet sich erst, wenn der Server die Anfrage angenommen hat:

window._mtm = window._mtm || [];
window._mtm.push({ event: 'anfrage-gesendet', formular: 'kontakt' });

Im Tag Manager richten Sie drei Dinge ein:

  1. Einen Trigger Benutzerdefiniertes Ereignis mit dem Ereignisnamen anfrage-gesendet.
  2. Eine Variable Data-Layer, die den Wert formular liest. Nennen Sie sie zum Beispiel „Formular“.
  3. Einen Tag Matomo Analytics mit dem Tracking-Typ Ereignis, Kategorie Formular, Aktion gesendet und als Name {{Formular}}. Soll die Anfrage als Ziel zählen, wählen Sie stattdessen den Tracking-Typ Ziel.

Gibt es auf der Website mehrere Formulare, reicht derselbe Aufbau: Jedes schreibt seinen eigenen Namen in formular.

Beispiel 3: Kauf mit Umsatz

Die Bestätigungsseite des Shops meldet die Bestellung:

window._mtm = window._mtm || [];
window._mtm.push({
  event: 'kauf',
  bestellung: { umsatz: 129.9, zahlart: 'rechnung', neukunde: true }
});

Eine Variable Data-Layer mit dem Namen bestellung.umsatz heißt im Tag Manager „Bestellumsatz“. Der Tag Matomo Analytics mit dem Tracking-Typ Ziel trägt {{Bestellumsatz}} als Umsatz ein. Wichtig ist das Format: eine Zahl mit Punkt, ohne Währungszeichen und ohne Tausenderpunkt.

So zählt ein Kauf als Ziel mit Umsatz. Für vollständiges E-Commerce-Tracking mit Warenkorb, Artikeln und Bestellnummer hat der Matomo-Tag keinen eigenen Tracking-Typ. Dafür werden die E-Commerce-Funktionen des Trackers aufgerufen, ebenfalls mit Werten aus dem Datenlayer. Das legt man am besten im Trackingkonzept fest.

Beispiel 4: Seitenwechsel in einer Web-App

Lädt eine Anwendung neue Inhalte, ohne die Seite neu zu laden, sieht Matomo zunächst nur den ersten Aufruf. Der Trigger Browserverlaufs-Änderung erkennt, wenn sich die URL ändert. Genauer wird es, wenn die App selbst meldet, sobald Inhalt und Titel feststehen:

window._mtm = window._mtm || [];
window._mtm.push({ event: 'seitenwechsel', seite: { pfad: '/preise/', titel: 'Preise' } });

Ein Trigger Benutzerdefiniertes Ereignis auf seitenwechsel startet einen Tag Matomo Analytics vom Tracking-Typ Seitenansicht. Unter Benutzerdefinierte URL und Benutzerdefinierter Titel tragen Sie die Variablen für seite.pfad und seite.titel ein.

Vorschau, Versionen und Umgebungen

Änderungen landen zuerst im Entwurf. Live geht nichts, bevor Sie eine Version veröffentlichen. Der Weg dorthin:

  1. Vorschau / Debug einschalten. Geben Sie die Adresse der Seite ein, die Sie testen wollen. Matomo öffnet sie mit dem Parameter mtmSetDebugFlag=1. Der setzt in diesem Browser für sieben Tage ein Cookie: Die Website lädt dann den Entwurf statt der Live-Version und zeigt ein Debug-Fenster mit Tags, Triggern und Variablen. Alle anderen Besucher sehen weiter die Live-Version. Mit mtmSetDebugFlag=0 entfernen Sie das Cookie wieder.
  2. Version erstellen. Eine Version friert den Stand ein. Beschreiben Sie kurz, was sich ändert, und veröffentlichen Sie sie zuerst in staging oder dev, wenn Sie solche Umgebungen haben.
  3. Live veröffentlichen. Geht etwas schief, veröffentlichen Sie einfach die vorige Version wieder in Live.

Zwei Dinge sollten Sie wissen: Die Namen von Tags sind laut Matomo öffentlich einsehbar, solange die Vorschau läuft. Und die Datei der Vorschau hat keinen zufälligen Teil im Namen. Interne Kürzel, Kundennamen oder gar Schlüssel gehören deshalb nicht in einen Container.

Weitere Umgebungen legen Hauptadministratoren unter Administration > Allgemeine Einstellungen an. Versionen lassen sich außerdem als JSON exportieren und wieder importieren, etwa als Sicherung oder um einen Container in eine andere Matomo-Instanz zu übertragen.

Wie oft ein Tag auslöst

In den erweiterten Einstellungen eines Tags legen Sie fest, wie oft und wann er auslösen darf:

  • Auslöselimit: unbeschränkt, einmal pro Seitenansicht, einmal alle 24 Stunden oder nur ein einziges Mal.
  • Auslöseverzögerung in Millisekunden, damit ein Tag nicht abbricht, wenn die Seite sofort weiterleitet.
  • Priorität: Je niedriger die Zahl, desto früher löst ein Tag aus, wenn mehrere gleichzeitig dran sind. Standard ist 999.
  • Datum des Beginns und Ablaufdatum, etwa für ein Pixel, das nur während einer Kampagne laufen soll.
Matomo Tag Manager, Tag ändern: Abschnitt Konfigurieren, wann das Tag dies tun soll, mit Trigger Seitenansicht und Feld für blockierende Trigger, darunter die erweiterten Einstellungen Auslöselimit, Auslöseverzögerung, Priorität 999, Datum des Beginns und Ablaufdatum
Trigger und erweiterte Einstellungen eines Tags, hier in Matomo 6 auf unserer Testinstanz.
Klick auf das Bild: einpassen oder OriginalgrößeBild antippen: Originalgröße
Matomo Tag Manager, Tag ändern: Abschnitt Konfigurieren, wann das Tag dies tun soll, mit Trigger Seitenansicht und Feld für blockierende Trigger, darunter die erweiterten Einstellungen Auslöselimit, Auslöseverzögerung, Priorität 999, Datum des Beginns und Ablaufdatum

Trigger und erweiterte Einstellungen eines Tags, hier in Matomo 6 auf unserer Testinstanz.

„Einmal alle 24 Stunden“ und „Nur ein einziges Mal“ funktionieren, weil der Tag Manager sich im lokalen Speicher des Browsers merkt, dass ein Tag schon ausgelöst hat. Das ist ein Zugriff auf das Endgerät, auch ohne Cookie. Klären Sie mit Ihrer Datenschutzberatung, ob das ohne Einwilligung in Ordnung ist. Mit „Unbeschränkt“ und „Einmal pro Seitenansicht“ speichert der Tag Manager dafür nichts.

Einwilligung betrifft zwei Ebenen. Für Matomo selbst steuern Sie in der Variable Matomo-Konfiguration, ob es ohne Einwilligung ohne Cookies misst oder gar nicht. Sobald Ihr Consent-Tool die Zustimmung meldet, rufen Sie rememberCookieConsentGiven oder rememberConsentGiven auf, wie es Matomo in der Hilfe zu diesen Feldern beschreibt.

Für Dienste anderer Anbieter gilt: Ihr Tag löst erst aus, wenn die Einwilligung da ist. Das bauen Sie am saubersten über den Datenlayer. Das Consent-Tool schreibt bei Zustimmung ein Ereignis, etwa consent-marketing, und nur dieser Trigger startet die betroffenen Tags. Für Axeptio, CookieYes, Cookiebot und OneTrust bringt der Tag Manager Vorlagen mit, die das jeweilige Tool einbinden, dazu eine für den Einwilligungsmodus von Google.

Rechte: wer was darf

Den Tag Manager nutzen Nutzer mit Schreibrechten auf die Website. Zwei Fähigkeiten regeln die heiklen Stellen:

  • Live-Container veröffentlichen: Live veröffentlichen dürfen nur Administratoren der Website und Nutzer mit dieser Fähigkeit. So können andere Entwürfe vorbereiten und in staging testen, ohne live zu gehen.
  • Benutzerdefinierte Vorlagen einsetzen: Benutzerdefiniertes HTML und Variablen mit eigenem JavaScript führen beliebigen Code auf Ihrer Website aus. Matomo warnt selbst, dass sich damit zum Beispiel sensible Daten abgreifen lassen. Unter Gebrauch der benutzerdefinierten Vorlagen einschränken können Hauptadministratoren sie auf Administratoren oder Hauptadministratoren begrenzen oder ganz abschalten.

Vom Google Tag Manager umziehen

Einen Container aus dem Google Tag Manager übernimmt Matomo nicht automatisch. Das ist weniger schlimm, als es klingt: Ein Umzug ist die Gelegenheit, alte Tags auszusortieren und einheitlich zu benennen. Was bleiben kann, ist Ihr Datenlayer. In der Standardeinstellung liest der Matomo Tag Manager auch die Werte, die schon im Datenlayer des Google Tag Manager stehen. Seit Matomo 5.2 gibt es zusätzlich die Option Aktiv vom Google-Tag-Manager-Datenlayer synchronisieren: Dann kommen auch Einträge an, die später in dataLayer geschrieben werden. Wollen Sie das nicht, schalten Sie Datenlayer des Google-Tag-Managers ignorieren ein. Beide Container können so eine Zeit lang parallel laufen, bis die Zahlen übereinstimmen. Wie ich einen solchen Umzug begleite, steht unter Matomo Tag Manager.

Quellen

Stand: 10. November 2026

FAQ

Häufige Fragen

Ist der Tag Manager in Matomo enthalten?

Ja. Er wird mit Matomo On-Premise ausgeliefert und steht wie Matomo selbst unter der GPL. Ist er auf Ihrer Instanz nicht aktiv, schalten Sie ihn in der Plugin-Verwaltung ein.

Was ist ein Datenlayer?

Ein JavaScript-Array, in das Ihre Website Informationen für den Tag Manager schreibt, beim Matomo Tag Manager heißt es _mtm. Die Website meldet etwa die Art der Seite oder dass eine Anfrage gesendet wurde, und im Tag Manager legen Sie fest, was davon an Matomo geht. Das ist stabiler, als Klicks und Texte auf der Seite auszulesen.

Brauche ich zusätzlich den normalen Matomo-Tracking-Code?

Nein. Der Tag „Matomo Analytics“ im Container lädt den Tracker und zählt die Seitenansicht. Bleibt der alte Tracking-Code zusätzlich auf der Seite, zählt Matomo jeden Seitenaufruf doppelt.

Kann ich einen Container aus dem Google Tag Manager importieren?

Nicht direkt. Der Matomo Tag Manager importiert nur Versionen, die aus Matomo exportiert wurden. Tags, Trigger und Variablen aus dem Google Tag Manager werden neu angelegt. Den vorhandenen Datenlayer kann der Matomo Tag Manager dagegen mitlesen.

Funktioniert der Tag Manager mit einer Content Security Policy?

Ja. Der Container braucht kein eval. Freigeben müssen Sie die Domain Ihrer Matomo-Instanz und den Einbaucode, per Hash oder Nonce. Benutzerdefiniertes HTML übernimmt die Nonce, wenn ein Skript auf der Seite eine trägt.

Wer darf Änderungen live stellen?

Das steuern Sie mit Rechten: Live veröffentlichen dürfen Administratoren der Website und Nutzer mit der Fähigkeit „Live-Container veröffentlichen“. Für eigenes HTML und JavaScript gibt es eine eigene Fähigkeit, die Hauptadministratoren auch ganz abschalten können.

Fragen zu Ihrem Setup?

Im Erstgespräch schauen wir gemeinsam auf Ihre Situation.

Erstgespräch buchen

Newsletter

Matomo-Wissen, einmal im Monat.

Praxistipps zu Tracking, Datenschutz-Einstellungen und Performance, dazu Hinweise auf wichtige Matomo-Updates. Kein Spam, Abmeldung jederzeit.