Vorlage für den Einwilligungsmodus erstellen

Dieses Dokument richtet sich an Entwickler, die eine Lösung zur Einwilligungsverwaltung auf Websites verwenden, auf denen Google Tag Manager (GTM) eingesetzt wird.

Auf dieser Seite werden die Einwilligungsarten in Google Tag Manager vorgestellt und Sie erfahren, wie Sie sie in Ihre Lösung zur Einwilligungsverwaltung einbinden.

Wenn Sie eine Tag-Vorlage bereitstellen, können Ihre Nutzer Ihre Lösung zur Einwilligungsverwaltung ohne Code einbinden. Das spart ihnen viel Zeit und Aufwand.

Nutzer können mit einer Vorlage für den Einwilligungsmodus Standardstatus für die Einwilligung festlegen und Google Tag Manager über die Einwilligungsvorgaben der Besucher informieren. So wird sichergestellt, dass Google-Tags und Drittanbieter-Tags, die den Einwilligungsmodus unterstützen, optimal funktionieren.

Als Vorlagenersteller können Sie Vorlagen für den Einwilligungsmodus für den internen Gebrauch implementieren oder sie in der Community-Galerie für Vorlagen veröffentlichen, um sie öffentlich zugänglich zu machen. Anbieter von Plattformen zur Einwilligungsverwaltung (Consent Management Platforms, CMPs), die Vorlagen für den Einwilligungsmodus anbieten, können in unserer Dokumentation zum Einwilligungsmodus aufgeführt werden und ihre Vorlagen können in der Vorlagengalerie angezeigt werden.

Google-Tags und Drittanbieter-Tags passen ihr Speicherverhalten an einen Einwilligungsstatus von entweder granted (erlaubt) oder denied (abgelehnt) an. Sie können integrierte Einwilligungsprüfungen für eine der folgenden Einwilligungsarten haben:

Einwilligungsart Beschreibung
ad_storage Ermöglicht die Speicherung von Daten, z. B. in Cookies, im Zusammenhang mit Werbung.
ad_user_data Legt die Einwilligung für das Senden von Nutzerdaten zu Onlinewerbezwecken an Google fest.
ad_personalization Legt die Einwilligung für personalisierte Anzeigen fest.
analytics_storage Ermöglicht die Speicherung von Daten, z. B. in Cookies, im Zusammenhang mit Analysen (z. B. Besuchs zeit).
functionality_storage Ermöglicht die Speicherung von Daten, die die Funktionalität der Website oder App unterstützen z. B. Spracheinstellungen.
personalization_storage Ermöglicht die Speicherung von Daten im Zusammenhang mit der Personalisierung, z. B. Video empfehlungen.
security_storage Ermöglicht die Speicherung von Daten im Zusammenhang mit der Sicherheit, z. B. Authentifizierungsfunktionen, Betrugsprävention und anderer Nutzerschutz

Im Einwilligungsmodus werden die Einwilligungsvorgaben der Besucher erfasst und durch Tag-Einwilligungsprüfungen wird sichergestellt, dass das Tag-Verhalten entsprechend angepasst wird. Beachten Sie beim Erstellen einer neuen Einwilligungsvorlage die folgenden Best Practices:

  • Verwenden Sie die Tag Manager API für den Einwilligungsmodus setDefaultConsentState und updateConsentState anstelle von gtag consent.

  • Legen Sie die Standardstatus für die Einwilligung sofort nach dem Auslösen mit dem Trigger Initialisierung der Einwilligung – Alle Seiten fest.

  • Die CMP muss den Besucher so schnell wie möglich auffordern, die Einwilligung für alle anwendbaren Einwilligungsarten zu erteilen oder abzulehnen.

  • Wenn ein Besucher seine Einwilligungsvorgaben angibt, muss die CMP den aktualisierten Einwilligungsstatus weitergeben.

1. Neue Vorlage erstellen

Bei dieser Implementierungsmethode wird ein Feld in der Vorlage verwendet, um den Standard-Einwilligungsstatus zu speichern. Der Implementierungscode liest dieses Feld, um den Standard-Einwilligungsstatus zur Laufzeit festzulegen. Für den Aktualisierungsbefehl versucht Ihr Code, ein Cookie zu lesen, das von der Lösung zur Einwilligungsverwaltung festgelegt wurde, um die Einwilligungsvorgaben der Besucher zu speichern. Sie richten auch einen Callback für updateConsentState ein, um den Fall zu behandeln, dass ein Besucher noch keine Einwilligungsvorgaben gemacht hat oder seine Einwilligung ändern möchte.

  1. Melden Sie sich in Ihrem Google Tag Manager-Konto an.
  2. Wählen Sie in der linken Navigationsleiste Vorlagen aus.
  3. Klicken Sie im Bereich Tag-Vorlagen auf Neu.
  1. Wählen Sie den Tab Felder aus und klicken Sie auf Feld hinzufügen > Parametertabelle.
  2. Ändern Sie den Namen in defaultSettings.
  3. Maximieren Sie das Feld.
  4. Aktualisieren Sie den Anzeigenamen in Default settings.
  5. Klicken Sie auf Spalte hinzufügen, wählen Sie Texteingabe aus, ändern Sie den Namen in region und aktivieren Sie das Kästchen Spaltenwerte müssen eindeutig sein.
  6. Maximieren Sie die Spalte und ändern Sie den Anzeigenamen in Region (leave blank to have consent apply to all regions). Die Aussage in Klammern ist eine Dokumentation für Ihre Vorlagennutzer. Weitere Informationen zum Einrichten von Standardstatus für die Einwilligung für verschiedene Regionen.
  7. Klicken Sie auf Spalte hinzufügen, wählen Sie Texteingabe aus und ändern Sie den Namen in granted.
  8. Maximieren Sie die Spalte und ändern Sie den Anzeigenamen in Granted Consent Types (comma separated).
  9. Klicken Sie auf Spalte hinzufügen, wählen Sie Texteingabe aus und ändern Sie den Namen in denied.
  10. Maximieren Sie die Spalte und ändern Sie den Anzeigenamen in Denied Consent Types (comma separated)

Optional: Unterstützung für die Entfernung von Anzeigendaten hinzufügen:

  1. Klicken Sie auf Feld hinzufügen, wählen Sie Checkbox aus und ändern Sie den Feldnamen in ads_data_redaction.
  2. Aktualisieren Sie den Anzeigenamen in Redact Ads Data

Weitere Informationen zum Cookie-Verhalten bei der Entfernung von Anzeigendaten

Optional: Unterstützung für die Weitergabe von URL-Parametern hinzufügen:

  1. Klicken Sie auf Feld hinzufügen, wählen Sie Checkbox aus und ändern Sie den Feldnamen in url_passthrough.
  2. Aktualisieren Sie den Anzeigenamen in Pass through URL parameters.

Weitere Informationen zur Weitergabe von URL-Parametern

Implementierungscode hinzufügen:

  1. Öffnen Sie im Vorlagen-Editor den Tab Code.
  2. Bearbeiten Sie im folgenden Codebeispiel die Platzhalterfelder.
  3. Kopieren Sie den Code und ersetzen Sie den Boilerplate-Code im Vorlagen-Editor damit.
  4. Speichern Sie die Vorlage.
// The first two lines are optional, use if you want to enable logging
const log = require('logToConsole');
log('data =', data);
const setDefaultConsentState = require('setDefaultConsentState');
const updateConsentState = require('updateConsentState');
const getCookieValues = require('getCookieValues');
const callInWindow = require('callInWindow');
const gtagSet = require('gtagSet');
const JSON = require('JSON');
const COOKIE_NAME = 'Your_cookie_name';
/*
 *   Splits the input string using comma as a delimiter, returning an array of
 *   strings
 */
const splitInput = (input) => {
  if (!input) return [];
  return input.split(',')
      .map(entry => entry.trim())
      .filter(entry => entry.length !== 0);
};
/*
 *   Processes a row of input from the default settings table, returning an object
 *   which can be passed as an argument to setDefaultConsentState
 */
const parseCommandData = (settings) => {
  const regions = splitInput(settings['region']);
  const granted = splitInput(settings['granted']);
  const denied = splitInput(settings['denied']);
  const commandData = {};
  if (regions.length > 0) {
    commandData.region = regions;
  }
  granted.forEach(entry => {
    commandData[entry] = 'granted';
  });
  denied.forEach(entry => {
    commandData[entry] = 'denied';
  });
  return commandData;
};
/*
 *   Called when consent changes. Assumes that consent object contains keys which
 *   directly correspond to Google consent types.
 */
const onUserConsent = (consent) => {
  const consentModeStates = {
    ad_storage: consent['adConsentGranted'] ? 'granted' : 'denied',
    ad_user_data: consent['adUserDataConsentGranted'] ? 'granted' : 'denied',
    ad_personalization: consent['adPersonalizationConsentGranted'] ? 'granted' : 'denied',
    analytics_storage: consent['analyticsConsentGranted'] ? 'granted' : 'denied',
    functionality_storage: consent['functionalityConsentGranted'] ? 'granted' : 'denied',
    personalization_storage: consent['personalizationConsentGranted'] ? 'granted' : 'denied',
    security_storage: consent['securityConsentGranted'] ? 'granted' : 'denied',
  };
  updateConsentState(consentModeStates);
};
/*
 *   Executes the default command, sets the developer ID, and sets up the consent
 *   update callback
 */
const main = (data) => {
  /*
   * Optional settings using gtagSet
   */
  gtagSet('ads_data_redaction', data.ads_data_redaction);
  gtagSet('url_passthrough', data.url_passthrough);
  gtagSet('developer_id.your_developer_id', true);
  // Set default consent state(s). Add optional chaining to safely handle cases
  // where defaultSettings might be null or undefined.
  data.defaultSettings?.forEach(settings => {
    const defaultData = parseCommandData(settings);
    // wait_for_update (ms) allows for time to receive visitor choices from the CMP
    defaultData.wait_for_update = 500;
    setDefaultConsentState(defaultData);
  });

  // Check if cookie is set and has values that correspond to Google consent
  // types. If it does, run onUserConsent().
  const cookieValues = getCookieValues(COOKIE_NAME);
  if (cookieValues && cookieValues.length > 0) {
    try {
      const settings = JSON.parse(cookieValues[0]);
      if (settings) {
        onUserConsent(settings);
      }
    } catch (e) {
      // Log an error if the cookie value is not valid JSON.
    }
  }
  /**
   *   Add event listener to trigger update when consent changes
   *
   *   References an external method on the window object which accepts a
   *   function as an argument. If you do not have such a method, you will need
   *   to create one before continuing. This method should add the function
   *   that is passed as an argument as a callback for an event emitted when
   *   the user updates their consent. The callback should be called with an
   *   object containing fields that correspond to the five built-in Google
   *   consent types.
   */
  callInWindow('addConsentListenerExample', onUserConsent);
};
main(data);
data.gtmOnSuccess();

Konfigurieren Sie als Nächstes die Berechtigungen für den Zugriff auf den Einwilligungsstatus und für den Zugriff auf Cookies.

  1. Wählen Sie den Tab Berechtigungen aus und klicken Sie auf Greift auf den Einwilligungsstatus zu.
  2. Klicken Sie auf Einwilligungsart hinzufügen.
  3. Klicken Sie auf das Feld und wählen Sie im Drop-down-Menü ad_storage aus.
  4. Aktivieren Sie Schreiben.
  5. Klicken Sie auf Hinzufügen.
  6. Wiederholen Sie die Schritte 2 bis 5 für ad_user_data, ad_personalization und analytics_storage. Wenn Sie weitere Einwilligungsarten benötigen, fügen Sie sie auf dieselbe Weise hinzu.
  7. Klicken Sie auf Speichern.

Berechtigungen für den Zugriff auf Cookies hinzufügen:

  1. Wählen Sie den Tab Berechtigungen aus und klicken Sie auf Liest Cookie-Werte.
  2. Geben Sie unter Bestimmt die Namen aller Cookies ein, die Ihr Code lesen muss, um die Einwilligungsvorgaben des Nutzers zu ermitteln. Geben Sie jeden Namen in einer eigenen Zeile ein.
  3. Klicken Sie auf Speichern.

2. Unittests erstellen

Unter Tests finden Sie Informationen zum Erstellen von Tests für Ihre Vorlage.

3. Vorlage in die Lösung zur Einwilligungsverwaltung einbinden

Der folgende Code zeigt ein Beispiel dafür, wie diese Vorlage in den Code für Ihre Lösung zur Einwilligungsverwaltung eingebunden werden kann, indem ein Listener hinzugefügt wird:

// Array of callbacks to be executed when consent changes
const consentListeners = [];

/**
 *   Called from GTM template to set callback to be executed when user consent is provided.
 *   @param {function} Callback to execute on user consent
 */
window.addConsentListenerExample = (callback) => {
  consentListeners.push(callback);
};

/**
 *   Called when user grants/denies consent.
 *   @param {Object} Object containing user consent settings.
 */
const onConsentChange = (consent) => {
  consentListeners.forEach((callback) => {
    callback(consent);
  });
};

Nachdem ein Websitebesucher seine Einwilligungsvorgaben angegeben hat, in der Regel durch Interaktion mit einem Einwilligungsbanner, sollte der Vorlagencode die Einwilligungs status mit der API updateConsentState entsprechend aktualisieren.

Im folgenden Beispiel wird der Aufruf von updateConsentState für einen Besucher gezeigt, der seine Einwilligung für alle Speicherarten erteilt hat. Auch in diesem Beispiel werden fest codierte Werte für granted verwendet. In der Praxis sollten diese jedoch zur Laufzeit anhand der Einwilligung des Besuchers ermittelt werden, die von der CMP erfasst wird.

const updateConsentState = require('updateConsentState');

updateConsentState({
  'ad_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted',
  'analytics_storage': 'granted',
  'functionality_storage': 'granted',
  'personalization_storage': 'granted',
  'security_storage': 'granted'
});

Regionsspezifisches Verhalten

Wenn Sie Standardstatus für die Einwilligung festlegen möchten, die für Besucher aus bestimmten Regionen gelten, geben Sie in der Vorlage eine Region an (gemäß ISO 3166-2). Durch die Verwendung von Regionswerten können Vorlagennutzer regionale Vorschriften einhalten, ohne Informationen von Besuchern außerhalb dieser Regionen zu verlieren. Wenn in einem setDefaultConsentState-Befehl keine Region angegeben ist, gilt der Wert für alle anderen Regionen.

Im folgenden Beispiel wird der Standardstatus für analytics_storage für Besucher aus Spanien und Alaska auf denied gesetzt und für alle anderen auf granted:analytics_storage

const setDefaultConsentState = require('setDefaultConsentState');

setDefaultConsentState({
  'analytics_storage': 'denied',
  'region': ['ES', 'US-AK']
});
setDefaultConsentState({
  'analytics_storage': 'granted'
});

Die spezifischste Einstellung hat Vorrang

Wenn auf derselben Seite zwei Standardbefehle für die Einwilligung mit Werten für eine Region und eine Unterregion vorhanden sind, wird der Befehl mit der spezifischeren Region angewendet. Wenn Sie beispielsweise ad_storage für die Region US auf 'granted' und ad_storage für die Region US-CA auf 'denied' gesetzt haben, gilt für einen Besucher aus Kalifornien die spezifischere Einstellung US-CA.

Region ad_storage Verhalten
USA 'granted' Gilt für Nutzer in den USA, die nicht in Kalifornien sind
US-CA 'denied' Gilt für Nutzer in US-CA
Ohne Angabe 'granted' Verwendet den Standardwert 'granted'. In diesem Beispiel gilt das für Nutzer, die nicht in den USA oder US-CA sind

Zusätzliche Metadaten

Mit der API gtagSet können Sie die folgenden optionalen Parameter festlegen:

Diese APIs sind nur in der GTM-Sandbox-Umgebung für Vorlagen verfügbar.

Informationen zu Anzeigenklicks, Client-IDs und Sitzungs-IDs in URLs weitergeben

Wenn ein Besucher nach dem Klicken auf eine Anzeige auf der Website eines Werbetreibenden landet, werden der Landingpage-URL möglicherweise Informationen zur Anzeige als Abfrageparameter angehängt. Um die Conversion-Genauigkeit zu verbessern, speichern Google-Tags diese Informationen in der Regel in eigenen Cookies in der Domain des Werbetreibenden.

Wenn ad_storage jedoch auf denied gesetzt ist, speichern Google-Tags diese Informationen nicht lokal. Um die Qualität der Klickmessung von Anzeigen in diesem Fall zu verbessern, können Werbetreibende optional Informationen zu Anzeigenklicks über URL-Parameter auf verschiedenen Seiten über eine Funktion namens URL-Passthrough weitergeben.

Wenn analytics_storage auf „denied“ gesetzt ist, kann die URL-Weitergabe verwendet werden, um ereignis- und sitzungsbasierte Analysen (einschließlich Conversions) ohne Cookies auf verschiedenen Seiten zu senden.

Die folgenden Bedingungen müssen erfüllt sein, um die URL-Weitergabe zu verwenden:

  • Auf der Seite sind Google-Tags vorhanden, die die Einwilligung berücksichtigen.
  • Die Website hat die Verwendung der URL-Weitergabe aktiviert.
  • Der Einwilligungsmodus ist auf der Seite implementiert.
  • Der ausgehende Link verweist auf dieselbe Domain wie die Domain der aktuellen Seite.
  • In der URL ist eine gclid/dclid vorhanden (nur Google Ads- und Floodlight-Tags)

Ihre Vorlage sollte es dem Vorlagennutzer ermöglichen, zu konfigurieren, ob er diese Einstellung aktivieren möchte. Mit dem folgenden Vorlagencode wird url_passthrough auf „true“ gesetzt:

gtagSet('url_passthrough', true);

Daten zu Aufrufen als Anzeige entfernen

Wenn ad_storage auf „denied“ gesetzt ist, werden keine neuen Cookies zu Werbezwecken festgelegt. Außerdem werden Drittanbieter-Cookies, die zuvor auf google.com und doubleclick.net festgelegt wurden, nicht verwendet. Die an Google gesendeten Daten enthalten weiterhin die vollständige Seiten-URL, einschließlich aller Informationen zu Anzeigenklicks in den URL-Parametern.

Wenn Sie Ihre Daten zu Aufrufen als Anzeige weiter unkenntlich machen möchten, wenn ad_storage auf „denied“ gesetzt ist, legen Sie ads_data_redaction auf „true“ fest.

Wenn ads_data_redaction auf „true“ gesetzt ist und ad_storage auf „denied“ gesetzt ist, werden die Kennungen für Anzeigenklicks, die in Netzwerkanfragen von Google Ads- und Floodlight-Tags gesendet werden, entfernt.

gtagSet('ads_data_redaction', true);

Entwickler-ID

Wenn Sie ein CMP-Anbieter mit einer von Google ausgestellten Entwickler-ID sind, verwenden Sie die folgende Methode, um diese so früh wie möglich in Ihrer Vorlage festzulegen.

Sie benötigen nur dann eine Entwickler-ID, wenn Ihre Implementierung von mehreren Websites verwendet wird, die von unabhängigen Unternehmen oder Organisationen betrieben werden. Wenn die Implementierung von einer Website oder Organisation verwendet wird, müssen Sie keine Entwickler-ID beantragen.

gtagSet('developer_id.<your_developer_id>', true);

Dokumentation für Ihre Nutzer bereitstellen

Ihre Nutzer verwenden Ihre Einwilligungsvorlage, um ein Tag einzurichten, mit dem die Einwilligung der Nutzer erfasst wird. Stellen Sie eine Dokumentation für Ihre Nutzer bereit, in der die folgenden Best Practices erläutert werden:

  • So legen Sie Standardstatus für die Einwilligung in der Tabelle Einstellungen fest.
  • So richten Sie Standardstatus für die Einwilligung für verschiedene Regionen ein, indem Sie zusätzliche Tabellenzeilen hinzufügen.
  • Lösen Sie das Tag mit dem Trigger Initialisierung der Einwilligung – Alle Seiten aus.

Nächste Schritte

Wenn Sie Ihre Vorlage allen Tag Manager-Nutzern zur Verfügung stellen möchten, laden Sie sie in die Community-Galerie für Vorlagen hoch.