Dieses Dokument richtet sich an Entwickler, die eine Lösung zur Einwilligungsverwaltung auf Websites mit Google Tag Manager (GTM) verwalten.
Auf dieser Seite werden die Einwilligungstypen in Google Tag Manager vorgestellt und es wird gezeigt, wie Sie sie in Ihre Lösung zur Einwilligungsverwaltung einbinden.
Warum eine Tag-Vorlage für die Einwilligung verwenden?
Wenn Sie eine Tag-Vorlage bereitstellen, können Ihre Nutzer Ihre Einwilligungslösung ohne Code integrieren. Das spart viel Zeit und Aufwand.
Nutzer können Standardeinstellungen für den Einwilligungsstatus über eine Vorlage für den Einwilligungsmodus festlegen und die Einwilligungsoptionen der Besucher an Google Tag Manager senden. So wird eine optimale Funktion von Google- und Drittanbieter-Tags sichergestellt, die den Einwilligungsmodus unterstützen.
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 verfügbar zu machen. CMP-Anbieter, 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 präsentiert werden.
Einwilligungsstatus und Einwilligungsarten
Google- und Drittanbieter-Tags passen ihr Speicherverhalten basierend auf dem Einwilligungsstatus granted oder denied an. Sie können integrierte Einwilligungsprüfungen für die folgenden Einwilligungstypen enthalten:
| Einwilligungsart | Beschreibung |
|---|---|
ad_storage |
Ermöglicht das Speichern von werbebezogenen Daten wie Cookies. |
ad_user_data |
Legt die Einwilligung für das Senden von Nutzerdaten zu Online-Werbezwecken an Google fest. |
ad_personalization |
Legt die Einwilligung für personalisierte Anzeigen fest |
analytics_storage |
Ermöglicht das Speichern von analysebezogenen Daten wie Cookies, z. B. zur Besuchsdauer. |
functionality_storage |
Ermöglicht das Speichern von Daten, die die Funktion der Website oder App unterstützen, z. B. die Spracheinstellungen. |
personalization_storage |
Ermöglicht das Speichern von Daten mit Bezug zur Personalisierung, z. B. Videoempfehlungen. |
security_storage |
Ermöglicht das Speichern von sicherheitsbezogenen Daten, z. B. für Authentifizierungsfunktionen, Betrugsprävention und andere Schutzmechanismen für Nutzer |
Neue Einwilligungsvorlage erstellen
Im Einwilligungsmodus werden die Einwilligungseinstellungen der Besucher erfasst. Mit Einwilligungsprüfungen für Tags wird dafür gesorgt, dass das Tag-Verhalten entsprechend angepasst wird. Beachten Sie beim Erstellen einer neuen Einwilligungsvorlage die folgenden Best Practices:
Verwenden Sie die Tag Manager-APIs für den Einwilligungsmodus setDefaultConsentState und updateConsentState anstelle von
gtag consent.Legen Sie Standard-Einwilligungsstatus unmittelbar 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 Einwilligungstypen zu erteilen oder zu verweigern.
Wenn ein Besucher seine Einwilligungsvorgaben angibt, muss die CMP den aktualisierten Einwilligungsstatus übergeben.
1. Neue Vorlage erstellen
Bei diesem Implementierungsansatz wird ein Feld in der Vorlage verwendet, um den Standard-Einwilligungsstatus zu speichern. Der Implementierungscode liest dieses Feld, um den standardmäßigen Einwilligungsstatus zur Laufzeit festzulegen. Beim Update-Befehl versucht Ihr Code, ein Cookie zu lesen, das von der Einwilligungsverwaltungslösung gesetzt wurde, um die Einwilligungsentscheidungen der Besucher zu speichern. Außerdem richten Sie einen Callback für
updateConsentStateein, um den Fall zu bearbeiten, in dem ein Besucher noch keine Einwilligungsauswahl getroffen hat oder sich entscheidet, seine Einwilligung zu ändern.
So erstellen Sie eine Einwilligungsvorlage:
- Melden Sie sich in Ihrem Google Tag Manager-Konto an.
- Wählen Sie im linken Navigationsbereich Vorlagen aus.
- Klicken Sie im Bereich Tag-Vorlagen auf Neu.
So legen Sie Standardstatus für die Einwilligung fest:
- Wählen Sie den Tab Felder aus und klicken Sie auf Feld hinzufügen > Parametertabelle.
- Ändern Sie den Namen in
defaultSettings. - Maximieren Sie das Feld.
- Aktualisieren Sie den Anzeigenamen auf
Default settings. - Klicken Sie auf Spalte hinzufügen, wählen Sie Texteingabe aus, ändern Sie den Namen in
regionund setzen Sie ein Häkchen bei Eindeutige Spaltenwerte erforderlich. - Maximieren Sie die Spalte und ändern Sie den Anzeigenamen in
Region (leave blank to have consent apply to all regions). Die Anweisung in Klammern ist die Dokumentation für die Nutzer Ihrer Vorlage. Weitere Informationen zum Einrichten von Einwilligungseinstellungen für verschiedene Regionen - Klicken Sie auf Spalte hinzufügen, wählen Sie Texteingabe aus und ändern Sie den Namen in
granted. - Maximieren Sie die Spalte und ändern Sie den Anzeigenamen in
Granted Consent Types (comma separated). - Klicken Sie auf Spalte hinzufügen, wählen Sie Texteingabe aus und ändern Sie den Namen in
denied. - Maximieren Sie die Spalte und ändern Sie den Anzeigenamen in
Denied Consent Types (comma separated).
Optional: So fügen Sie Unterstützung für das Entfernen von Anzeigen-Daten hinzu:
- Klicken Sie auf Feld hinzufügen, wählen Sie Kästchen aus und ändern Sie den Feldnamen in
ads_data_redaction. - Aktualisieren Sie den Anzeigenamen auf
Redact Ads Data.
Weitere Informationen zum Cookie-Verhalten bei der Entfernung von Daten aus Anzeigen
Optional: So fügen Sie Unterstützung für das Übergeben von URL-Parametern hinzu:
- Klicken Sie auf Feld hinzufügen, wählen Sie Kästchen aus und ändern Sie den Feldnamen in
url_passthrough. - Aktualisieren Sie den Anzeigenamen auf
Pass through URL parameters.
So fügen Sie den Implementierungscode hinzu:
- Öffnen Sie im Vorlageneditor den Tab Code.
- Bearbeiten Sie im folgenden Codebeispiel die Platzhalterfelder.
- Kopieren Sie den Code und ersetzen Sie damit den Boilerplate-Code im Vorlagen-Editor.
- 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 Berechtigungen für den Zugriff auf den Einwilligungsstatus und auf Cookies.
So fügen Sie Berechtigungen zum Verwalten von Einwilligungsstatus hinzu:
- Wählen Sie den Tab Berechtigungen aus und klicken Sie auf Consent-Status wird abgerufen.
- Klicken Sie auf Einwilligungsart hinzufügen.
- Klicken Sie auf das Kästchen und wählen Sie im Drop-down-Menü
ad_storageaus. - Aktivieren Sie Schreiben.
- Klicken Sie auf Hinzufügen.
- Wiederholen Sie die Schritte 2 bis 5 für
ad_user_data,ad_personalizationundanalytics_storage. Wenn Sie zusätzliche Einwilligungsarten benötigen, fügen Sie sie auf dieselbe Weise hinzu. - Klicken Sie auf Speichern.
So fügen Sie Berechtigungen für den Zugriff auf Cookies hinzu:
- Wählen Sie den Tab Berechtigungen aus und klicken Sie auf Liest Cookie-Werte.
- Geben Sie unter Spezifisch die Namen aller Cookies ein, die Ihr Code lesen muss, um die Einwilligungsentscheidungen des Nutzers zu ermitteln. Geben Sie einen Namen pro Zeile ein.
- Klicken Sie auf Speichern.
2. Einheitentests erstellen
Informationen zum Erstellen von Tests für Ihre Vorlage finden Sie unter Tests.
3. Vorlage in die Einwilligungsmanagement-Lösung einbinden
Im folgenden Codebeispiel wird gezeigt, 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);
});
};
Einwilligungsstatus aktualisieren
Nachdem ein Websitebesucher seine Einwilligungsvorgaben angegeben hat, in der Regel durch Interaktion mit einem Einwilligungsbanner, sollte der Vorlagencode die Einwilligungsstatus entsprechend mit der updateConsentState-API aktualisieren.
Das folgende Beispiel zeigt den updateConsentState-Aufruf für einen Besucher, der angegeben hat, dass er allen Speichertypen zustimmt. Auch in diesem Beispiel werden hartcodierte Werte für granted verwendet. In der Praxis sollten diese jedoch zur Laufzeit anhand der Einwilligung des Besuchers bestimmt 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 Nutzereinwilligung festlegen möchten, die für Besucher aus bestimmten Gebieten gelten, geben Sie in der Vorlage eine Region (gemäß ISO 3166-2) an. 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 auf denied für Besucher aus Spanien und Alaska und auf granted für alle anderen festgelegt:analytics_storage
const setDefaultConsentState = require('setDefaultConsentState');
setDefaultConsentState({
'analytics_storage': 'denied',
'region': ['ES', 'US-AK']
});
setDefaultConsentState({
'analytics_storage': 'granted'
});
Spezifischste Einstellung hat Vorrang
Wenn auf derselben Seite zwei Standardbefehle für die Einwilligung mit Werten für eine Region und eine Unterregion vorkommen, wird der Befehl mit der spezifischeren Region wirksam. Wenn Sie beispielsweise ad_storage für die Region US auf 'granted' und für die Region US-CA auf 'denied' festgelegt haben, wird für einen Besucher aus Kalifornien die spezifischere Einstellung für US-CA angewendet.ad_storage
| Region | ad_storage |
Verhalten |
|---|---|---|
| USA | 'granted' |
Gilt für Nutzer in den USA, die nicht in Kalifornien ansässig sind |
| US-CA | 'denied' |
Gilt für Nutzer in den USA und in Kalifornien |
| Ohne Angabe | 'granted' |
Verwendet den Standardwert von 'granted'. In diesem Beispiel gilt das für Nutzer, die sich nicht in den USA oder in den USA (Kalifornien) befinden.
|
Zusätzliche Metadaten
Mit der gtagSet API können Sie die folgenden optionalen Parameter festlegen:
Diese APIs sind nur in der GTM-Vorlagensandbox verfügbar.
Informationen zu Anzeigenklicks, Client-IDs und Sitzungs-IDs in URLs übergeben
Wenn ein Besucher nach dem Klicken auf eine Anzeige auf die Website eines Werbetreibenden gelangt, werden Informationen zur Anzeige möglicherweise als Abfrageparameter an die Landingpage-URLs angehängt. Um die Genauigkeit der Conversion-Analyse zu verbessern, werden diese Informationen in der Regel in eigenen Cookies in der Domain des Werbetreibenden gespeichert.
Wenn ad_storage jedoch denied ist, werden diese Informationen nicht lokal in Google-Tags gespeichert. Um die Qualität der Anzeigenklick-Analyse in diesem Fall zu verbessern, können Werbetreibende optional Informationen zu Anzeigenklicks über URL-Parameter seitenübergreifend weitergeben. Dazu verwenden sie die Funktion „URL-Passthrough“.
Wenn analytics_storage auf „denied“ gesetzt ist, kann die URL-Weiterleitung verwendet werden, um seitenübergreifend ereignis- und sitzungsbasierte Analysen (einschließlich Conversions) ohne Cookies zu senden.
Für die Verwendung von URL-Passthrough müssen die folgenden Voraussetzungen erfüllt sein:
- Auf der Seite sind Google-Tags vorhanden, die die Einwilligung berücksichtigen.
- Die Website hat die URL-Passthrough-Funktion aktiviert.
- Der Einwilligungsmodus ist auf der Seite eingerichtet.
- Der ausgehende Link verweist auf dieselbe Domain wie die Domain der aktuellen Seite.
- In der URL ist ein „gclid“/„dclid“ vorhanden (nur Google Ads- und Floodlight-Tags)
In Ihrer Vorlage sollte der Nutzer konfigurieren können, ob er diese Einstellung aktivieren möchte. Mit dem folgenden Vorlagencode wird „url_passthrough“ auf „true“ gesetzt:
gtagSet('url_passthrough', true);
Anzeigendaten entfernen
Wenn ad_storage abgelehnt wird, werden keine neuen Cookies zu Werbezwecken gesetzt. 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 ad_storage abgelehnt wird, können Sie ads_data_redaction auf „true“ setzen, um die Daten Ihrer Anzeigen weiter zu anonymisieren.
Wenn ads_data_redaction „true“ ist und ad_storage abgelehnt wird, werden in Netzwerk-Anfragen von Google Ads und Floodlight-Tags gesendete Anzeigenklick-IDs unkenntlich gemacht.
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 eine Entwickler-ID nur, wenn Ihre Implementierung von unabhängigen Unternehmen oder Rechtssubjekten auf mehreren Websites verwendet wird. Wenn die Implementierung nur für eine Website oder ein Unternehmen 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 Nutzereinwilligung eingeholt wird. Stellen Sie Ihren Nutzern eine Dokumentation zur Verfügung, in der die folgenden Best Practices erläutert werden:
- So legen Sie Standardeinstellungen für die Einwilligung in der Tabelle Settings fest.
- So richten Sie Standardeinstellungen 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.