RcTracking: DSGVO-konformes Tracking zentral verwalten

GTM-Code im Theme-Header, UET-Tag per Snippet-Plugin, Facebook-Pixel irgendwo dazwischen — in den meisten Shopware-Shops ist Tracking ein Wildwuchs aus Code-Schnipseln, die irgendwer irgendwann in irgendein Template kopiert hat. Beim nächsten Theme-Update geht die Hälfte verloren, und ob jedes Script auf den Cookie-Consent wartet, weiß niemand so genau. RcTracking bündelt alle Tracking-Codes an einer Stelle und garantiert: Kein Script lädt ohne Kundenzustimmung.

Warum Tracking nicht ins Theme gehört

Die übliche Vorgehensweise sieht so aus: GTM-Container-Code in die header.html.twig kopieren, Microsoft UET über ein Snippet-Plugin einbinden, weitere Pixel je nach Marketing-Agentur irgendwo dazwischen streuen. Das funktioniert — bis drei Probleme auftauchen.

Erstens der Consent: Jedes Script muss einzeln mit dem Consent-Status verknüpft werden. Wer das bei einem der Snippets vergisst, hat ein DSGVO-Problem. Zweitens die Wartung: Wer das Theme aktualisiert, verliert die manuell eingefügten Code-Schnipsel. Das merkst du erst, wenn die Tracking-Daten ausbleiben — oft Tage später. Drittens die Übersicht: Tracking-Codes verteilt über Template-Dateien, Snippet-Plugins und Theme-Konfiguration. Drei Monate später weiß niemand mehr, was wo liegt.

RcTracking löst alle drei Probleme. Eine zentrale Stelle für alle Tracking-Codes, automatische Consent-Prüfung vor dem Laden jedes Scripts, und kein Risiko bei Theme-Updates, weil nichts im Theme liegt.

So funktioniert das Plugin

Alle Tracking-Codes werden in der Plugin-Konfiguration hinterlegt. Google Tag Manager und Microsoft UET haben eigene Felder — Container-ID bzw. Tag-ID eintragen, aktivieren, fertig. Für alles andere gibt es ein Custom-Code-Feld, in das du beliebiges Script einfügen kannst.

Bevor irgendein Script in den DOM eingefügt wird, prüft das Plugin den Consent-Status des Kunden. Ohne Zustimmung passiert nichts — kein GTM-Container, kein UET-Tag, kein Custom Code. Das gilt auch für den initialen Seitenaufruf. Es wird kein einziger Tracking-Request abgesetzt, bevor der Kunde aktiv zugestimmt hat. Keine Ausnahmen, keine Hintertüren.

Installation

Installation per Composer in der DDEV-Umgebung:

ddev composer require ruhrcoder/rc-tracking
ddev exec bin/console plugin:refresh
ddev exec bin/console plugin:install --activate RcTracking
ddev exec bin/console cache:clear

Konfiguration

Alle Einstellungen findest du unter Erweiterungen > Meine Erweiterungen > RcTracking > Konfiguration:

EinstellungBeschreibungBeispiel
GTM Container-IDGoogle Tag Manager Container-IDGTM-XXXXXXX
GTM aktivGoogle Tag Manager aktivierenJa
UET Tag-IDMicrosoft UET Tag-ID12345678
UET aktivMicrosoft UET aktivierenJa
Custom CodeBeliebiger Tracking-Code<script>…</script>
Custom Code aktivCustom Tracking-Code aktivierenNein
Marketing Purpose-IDPurpose-ID des Consent Managers für Marketing-Cookiesmarketing

Jeder Tracking-Dienst lässt sich einzeln aktivieren und deaktivieren. So kannst du den GTM laufen lassen, während du den UET-Tag vorübergehend abschaltest — ohne Code anzufassen, ohne Template zu editieren.

Consent-Integration

Die Verknüpfung mit dem Consent Manager läuft über die Marketing Purpose-ID. Das ist die ID, die dein Consent Manager für den Marketing-Zweck verwendet. Bei Cookiebot, Consentmanager.net oder Usercentrics findest du sie in den Einstellungen des jeweiligen Tools. Trage sie in die Plugin-Konfiguration ein, und RcTracking weiß, wann es die Scripts laden darf.

Das Plugin arbeitet mit Shopwares Consent-API. Jeder Consent Manager, der diese API bedient, funktioniert mit RcTracking. Ich habe es mit Cookiebot, Consentmanager.net und Usercentrics getestet. Falls du einen anderen Consent Manager verwendest, der die Shopware-Cookie-API nutzt, sollte es ebenfalls funktionieren.

Praxisbeispiel: GTM und UET parallel

Ein Shop schaltet Google Ads und Microsoft Ads gleichzeitig. Der Google Tag Manager liefert die Conversion-Daten an Google, der Microsoft UET-Tag an Bing. Ohne RcTracking sind das zwei verschiedene Code-Snippets an zwei verschiedenen Stellen, die beide einzeln mit dem Consent verknüpft werden müssen.

Mit RcTracking trägst du beide IDs in die Plugin-Konfiguration ein, setzt die Marketing Purpose-ID und bist fertig. Beide Scripts laden erst nach Consent, beide überleben Theme-Updates. Wenn die Marketing-Agentur nächsten Monat noch einen Facebook-Pixel will, fügst du ihn als Custom Code hinzu. Alles an einer Stelle, alles consent-geprüft, alles in fünf Minuten eingerichtet.

Und wenn du einen Tracking-Dienst temporär abschalten willst — etwa weil eine Kampagne pausiert — setzt du den Schalter in der Konfiguration auf Nein. Kein Code-Snippet suchen, kein Template anfassen, kein Deployment. Ein Klick in der Administration, und der Dienst ist still.

Update

Updates laufen über Composer:

ddev composer update ruhrcoder/rc-tracking
ddev exec bin/console plugin:update RcTracking
ddev exec bin/console cache:clear

Die gezeigten Code-Beispiele dienen zur Veranschaulichung. Nutzung auf eigene Verantwortung. Mehr dazu