Skip to content

Google Tag Manager ​

Der Tag Manager ist die einzige Stelle, an der Tags leben. GA4 und Google Ads werden dort konfiguriert und nicht parallel im Quelltext eingebaut. Die Flags tracking.ga4 und tracking.googleAds schalten deshalb keinen Code frei: Sie halten fest, was im Container erwartet wird, und steuern daraus die Consent-Kategorien, die Bannertexte und die Prüfregeln des Schemas.

Basic gegenüber Advanced ​

tracking.consentMode entscheidet über das Netzwerkverhalten vor der Einwilligung.

ModusVor der EntscheidungVorgabe
basickeine Verbindung zu Google; der Container lädt gar nichtja
advancedder Container lädt sofort mit verweigerten Signalennein

Im Basic Mode entsteht die erste Anfrage an googletagmanager.com genau dann, wenn mehr als die notwendige Kategorie erlaubt wurde. Wer ablehnt, löst keine einzige Verbindung aus.

Im Advanced Mode lädt der Container mit dem Ausgangszustand denied und einem wait_for_update von 500 ms. Google-Tags feuern dann in einer eingeschränkten Form („cookieless pings") und übertragen dabei anonyme Messsignale — vor der Entscheidung. Das verbessert die Modellierung in GA4 und ist rechtlich nicht in jedem Fall zulässig.

Advanced ist eine Entscheidung, keine Einstellung

Sie überträgt Daten an Google, bevor jemand zugestimmt hat. Sie gehört vor dem Einschalten geprüft — und die Datenschutzerklärung muss sie beschreiben.

Was im Container passieren muss ​

Der Starter setzt die Consent-Signale; ob ein Tag sie beachtet, entscheidet der Container:

  1. Consent Overview in GTM aktivieren (Admin → Container-Einstellungen).
  2. Für jedes Tag die zusätzlichen Consent-Prüfungen setzen: GA4 auf analytics_storage, Ads-Tags auf ad_storage, ad_user_data und ad_personalization.
  3. Kein Tag mit dem Trigger „Alle Seiten" ohne Consent-Prüfung. Der Container lädt im Advanced Mode vor der Entscheidung — ein ungeprüftes Tag feuert dann sofort.
  4. Als Auslöser für alles, was erst nach einer Entscheidung laufen soll, das Ereignis consent_update verwenden.

Der Seitenaufruf entsteht im Container, nicht im Starter. Der Starter schickt kein eigenes page_view — sonst gäbe es ihn zweimal.

Serverseitiges GTM ​

tracking.gtmServerUrl verlegt das Laden des Containers auf einen eigenen Endpunkt:

ts
tracking: {
  enabled: true,
  containerId: 'GTM-XXXXXXX',
  gtmServerUrl: 'https://tags.kunde.de',
}

Das Skript kommt dann von https://tags.kunde.de/gtm.js?id=GTM-XXXXXXX statt von googletagmanager.com. Server-Side GTM bildet dieselbe Schnittstelle nach — deshalb ändert sich im Starter nichts weiter.

Die Consent-Kette bleibt unverändert: Ein First-Party-Endpunkt ist eine Aussage über den Übertragungsweg, nicht über die Einwilligung.

Kein noscript-Fallback ​

Das klassische GTM-Snippet bringt ein <noscript>-iframe mit. Es lädt bedingungslos und damit auch ohne Einwilligung. Der Starter gibt es nicht aus — ein Post-Build-Test hält das fest.

Umgebungen ​

Der Container lädt ausschließlich bei PUBLIC_ENVIRONMENT=production. Vorschau- und Entwicklungsstände würden sonst dieselben Messkonten füllen wie die echte Website. Der Banner erscheint trotzdem, damit er sich vor dem Livegang ansehen lässt.

Siehe Environment.