Veröffentlicht: 20. März 2025
GTM Template: Consent Mode v2 für Webflow mit Finsweet — DSGVO-konform
Kostenloses GTM-Template für Google Consent Mode v2 mit Finsweet Cookie Consent in Webflow. DSGVO-konform tracken ohne Datenverlust.
Seit März 2024 ist Google Consent Mode v2 Pflicht für Werbetreibende in der EU. Wer Webflow nutzt, greift in der Regel auf Finsweet’s Cookie Consent Solution zurück. Dieses GTM-Template verbindet beides — korrekt konfiguriert und sofort einsatzbereit.
Was das Template enthält
- 5 Consent-State Tags — Default State (denied) + 4 Kategorien (essential, analytics, marketing, personalization)
- 5 Custom Event Trigger — feuern, wenn der Nutzer eine Kategorie akzeptiert
- Consent Mode v2 Integration — Advanced Mode mit
ad_storage,analytics_storage,ad_user_data,ad_personalization
Warum Consent Mode v2?
Ohne Consent Mode verlierst du nach einem „Ablehnen”-Klick 100 % der Conversion-Daten dieses Nutzers. Mit Consent Mode v2 im Advanced Mode sendet Google cookieless Pings — keine personenbezogenen Daten, aber genug Information für Conversion-Modellierung.
Das Ergebnis: 40–70 % mehr Conversion-Daten in deinem Google Ads Konto, ohne die DSGVO zu verletzen.
So funktioniert das Setup
1. Finsweet Cookie Consent in Webflow einrichten
Finsweet’s Cookie Consent Solution ist der Standard für Webflow. Du brauchst:
- Das Finsweet-Attribut
fs-ccauf deiner Webflow-Seite - Die korrekten Consent-Kategorien (essential, analytics, marketing, personalization)
2. GTM-Template importieren
- Container importieren → JSON-Datei hochladen
- Zusammenführen → Umbenennen bei Konflikten
- Sofort funktionsfähig — keine weiteren Anpassungen nötig
3. Was passiert technisch?
Beim Laden der Seite wird der Default State gesetzt — alle Consent-Kategorien auf denied. Sobald der Nutzer im Finsweet-Banner eine Kategorie akzeptiert, feuert der entsprechende Custom Event (analytics-activated, marketing-activated, etc.) und der Consent-State wird auf granted aktualisiert.
Google Tags (GA4, Google Ads) reagieren automatisch auf den geänderten Consent-State.
Häufige Fehler vermeiden
- Default State fehlt: Ohne initialen
denied-State ist Consent Mode wirkungslos - Essential-Kategorie vergessen: Consent Linker und Conversion Linker brauchen
functionality_storage - Basic statt Advanced Mode: Im Basic Mode gehen alle Daten vor Consent verloren — Advanced Mode ermöglicht Modellierung
Template herunterladen
Kopiere den JSON-Code, speichere ihn als .json-Datei und importiere sie in deinem Google Tag Manager Container unter Admin → Container importieren.
Kein E-Mail, kein Formular — direkt loslegen.
GTM Container JSON anzeigen
{
"exportFormatVersion": 2,
"exportTime": "2024-05-01 11:42:45",
"containerVersion": {
"path": "accounts/6075459192/containers/103965921/versions/0",
"accountId": "0000000000",
"containerId": "000000000",
"containerVersionId": "0",
"container": {
"path": "accounts/6075459192/containers/103965921",
"accountId": "0000000000",
"containerId": "000000000",
"name": "Test Container",
"publicId": "GTM-XXXXXX",
"usageContext": [
"WEB"
],
"fingerprint": "0000000000000",
"tagManagerUrl": "https://tagmanager.google.com/#/container/accounts/0000000000/containers/000000000/workspaces?apiLink=container",
"features": {
"supportUserPermissions": true,
"supportEnvironments": true,
"supportWorkspaces": true,
"supportGtagConfigs": false,
"supportBuiltInVariables": true,
"supportClients": false,
"supportFolders": true,
"supportTags": true,
"supportTemplates": true,
"supportTriggers": true,
"supportVariables": true,
"supportVersions": true,
"supportZones": true,
"supportTransformations": false
},
"tagIds": [
"GTM-XXXXXX"
]
},
"tag": [
{
"accountId": "0000000000",
"containerId": "000000000",
"tagId": "10",
"name": "Finsweet - personalization-activated",
"type": "cvt_000000000_9",
"parameter": [
{
"type": "TEMPLATE",
"key": "ad_storage",
"value": "notset"
},
{
"type": "BOOLEAN",
"key": "ads_data_redaction",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "sendDataLayer",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "ad_user_data",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "security_storage",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "command",
"value": "update"
},
{
"type": "TEMPLATE",
"key": "functionality_storage",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "personalization_storage",
"value": "granted"
},
{
"type": "BOOLEAN",
"key": "url_passthrough",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "analytics_storage",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "ad_personalization",
"value": "notset"
}
],
"fingerprint": "0000000000000",
"firingTriggerId": [
"8"
],
"parentFolderId": "6",
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "0000000000",
"containerId": "000000000",
"tagId": "11",
"name": "Finsweet - marketing-activated",
"type": "cvt_000000000_9",
"parameter": [
{
"type": "TEMPLATE",
"key": "ad_storage",
"value": "granted"
},
{
"type": "BOOLEAN",
"key": "ads_data_redaction",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "sendDataLayer",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "ad_user_data",
"value": "granted"
},
{
"type": "TEMPLATE",
"key": "security_storage",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "command",
"value": "update"
},
{
"type": "TEMPLATE",
"key": "functionality_storage",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "personalization_storage",
"value": "notset"
},
{
"type": "BOOLEAN",
"key": "url_passthrough",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "analytics_storage",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "ad_personalization",
"value": "granted"
}
],
"fingerprint": "0000000000000",
"firingTriggerId": [
"5"
],
"parentFolderId": "6",
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "0000000000",
"containerId": "000000000",
"tagId": "12",
"name": "Finsweet - Default State (denied)",
"type": "cvt_000000000_9",
"parameter": [
{
"type": "BOOLEAN",
"key": "eea",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "wait_for_update",
"value": "500"
},
{
"type": "BOOLEAN",
"key": "sendDataLayer",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "regionsEEA",
"value": "eea"
},
{
"type": "TEMPLATE",
"key": "command",
"value": "default"
},
{
"type": "TEMPLATE",
"key": "functionality_storage",
"value": "denied"
},
{
"type": "BOOLEAN",
"key": "url_passthrough",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "ad_storage",
"value": "granted"
},
{
"type": "BOOLEAN",
"key": "ads_data_redaction",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "ad_user_data",
"value": "denied"
},
{
"type": "TEMPLATE",
"key": "security_storage",
"value": "denied"
},
{
"type": "TEMPLATE",
"key": "personalization_storage",
"value": "denied"
},
{
"type": "TEMPLATE",
"key": "analytics_storage",
"value": "granted"
},
{
"type": "TEMPLATE",
"key": "ad_personalization",
"value": "denied"
}
],
"fingerprint": "0000000000000",
"firingTriggerId": [
"2147479572"
],
"parentFolderId": "6",
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "0000000000",
"containerId": "000000000",
"tagId": "13",
"name": "Finsweet - analytics-activated",
"type": "cvt_000000000_9",
"parameter": [
{
"type": "TEMPLATE",
"key": "ad_storage",
"value": "granted"
},
{
"type": "BOOLEAN",
"key": "ads_data_redaction",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "sendDataLayer",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "ad_user_data",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "security_storage",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "command",
"value": "update"
},
{
"type": "TEMPLATE",
"key": "functionality_storage",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "personalization_storage",
"value": "notset"
},
{
"type": "BOOLEAN",
"key": "url_passthrough",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "analytics_storage",
"value": "granted"
},
{
"type": "TEMPLATE",
"key": "ad_personalization",
"value": "notset"
}
],
"fingerprint": "0000000000000",
"firingTriggerId": [
"4"
],
"parentFolderId": "6",
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "0000000000",
"containerId": "000000000",
"tagId": "14",
"name": "Finsweet - essential-activated",
"type": "cvt_000000000_9",
"parameter": [
{
"type": "TEMPLATE",
"key": "ad_storage",
"value": "notset"
},
{
"type": "BOOLEAN",
"key": "ads_data_redaction",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "sendDataLayer",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "ad_user_data",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "security_storage",
"value": "granted"
},
{
"type": "TEMPLATE",
"key": "command",
"value": "update"
},
{
"type": "TEMPLATE",
"key": "functionality_storage",
"value": "granted"
},
{
"type": "TEMPLATE",
"key": "personalization_storage",
"value": "notset"
},
{
"type": "BOOLEAN",
"key": "url_passthrough",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "analytics_storage",
"value": "notset"
},
{
"type": "TEMPLATE",
"key": "ad_personalization",
"value": "notset"
}
],
"fingerprint": "0000000000000",
"firingTriggerId": [
"7"
],
"parentFolderId": "6",
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
}
],
"trigger": [
{
"accountId": "0000000000",
"containerId": "000000000",
"triggerId": "3",
"name": "uncategorized-activated",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "uncategorized-activated"
}
]
}
],
"filter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{Event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "uncategorized-activated"
}
]
}
],
"fingerprint": "0000000000000"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"triggerId": "4",
"name": "analytics-activated",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "analytics-activated"
}
]
}
],
"filter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{Event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "analytics-activated"
}
]
}
],
"fingerprint": "0000000000000"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"triggerId": "5",
"name": "marketing-activated",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "marketing-activated"
}
]
}
],
"filter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{Event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "marketing-activated"
}
]
}
],
"fingerprint": "0000000000000"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"triggerId": "7",
"name": "essential-activated",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "essential-activated"
}
]
}
],
"filter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{Event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "essential-activated"
}
]
}
],
"fingerprint": "0000000000000"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"triggerId": "8",
"name": "personalization-activated",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "personalization-activated"
}
]
}
],
"filter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{Event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "personalization-activated"
}
]
}
],
"fingerprint": "0000000000000"
}
],
"folder": [
{
"accountId": "0000000000",
"containerId": "000000000",
"folderId": "6",
"name": "Consent",
"fingerprint": "0000000000000"
}
],
"builtInVariable": [
{
"accountId": "0000000000",
"containerId": "000000000",
"type": "PAGE_URL",
"name": "Page URL"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"type": "PAGE_HOSTNAME",
"name": "Page Hostname"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"type": "PAGE_PATH",
"name": "Page Path"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"type": "REFERRER",
"name": "Referrer"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"type": "EVENT",
"name": "Event"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"type": "CLICK_URL",
"name": "Click URL"
},
{
"accountId": "0000000000",
"containerId": "000000000",
"type": "CLICK_TEXT",
"name": "Click Text"
}
],
"fingerprint": "0000000000000",
"tagManagerUrl": "https://tagmanager.google.com/#/versions/accounts/0000000000/containers/000000000/versions/0?apiLink=version",
"customTemplate": [
{
"accountId": "0000000000",
"containerId": "000000000",
"templateId": "9",
"name": "Consent Mode (Google tags)",
"fingerprint": "0000000000000",
"templateData": "___TERMS_OF_SERVICE___\n\nBy creating or modifying this file you agree to Google Tag Manager's Community\nTemplate Gallery Developer Terms of Service available at\nhttps://developers.google.com/tag-manager/gallery-tos (or such other URL as\nGoogle may provide), as modified from time to time.\n\n\n___INFO___\n\n{\n \"type\": \"TAG\",\n \"id\": \"cvt_temp_public_id\",\n \"__wm\": \"VGVtcGFsdGUtQXV0aG9yX0NvbnNlbnRNb2RlLVNpbW8tQWhhdmE\\u003d\",\n \"version\": 1,\n \"securityGroups\": [],\n \"displayName\": \"Consent Mode (Google tags)\",\n \"categories\": [\n \"UTILITY\",\n \"ANALYTICS\",\n \"ADVERTISING\"\n ],\n \"brand\": {\n \"id\": \"github.com_gtm-templates-simo-ahava\",\n \"displayName\": \"gtm-templates-simo-ahava\",\n \"thumbnail\": \"data:image/png;base64,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\\u003d\\u003d\"\n },\n \"description\": \"Adjust tag behavior based on consent. This template utilizes Google\\u0027s Consent API and can be used to adjust how Google\\u0027s advertising and analytics tools use cookies and process ad identifiers.\",\n \"containerContexts\": [\n \"WEB\"\n ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n {\n \"type\": \"SELECT\",\n \"name\": \"command\",\n \"displayName\": \"Consent Command\",\n \"selectItems\": [\n {\n \"value\": \"default\",\n \"displayValue\": \"Default\"\n },\n {\n \"value\": \"update\",\n \"displayValue\": \"Update\"\n }\n ],\n \"simpleValueType\": true,\n \"help\": \"\\u003cstrong\\u003eDefault\\u003c/strong\\u003e means that you establish consent settings the site falls back on until such a time that the Update command is executed. You can have multiple Default tags on the page, each corresponding to a different region, for example.\\n\\u003cstrong\\u003eUpdate\\u003c/strong\\u003e is what you\\u0027d use once you\\u0027ve retrieved a consent status from the user.\",\n \"defaultValue\": \"default\",\n \"alwaysInSummary\": true\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"wait_for_update\",\n \"displayName\": \"Wait for Update\",\n \"simpleValueType\": true,\n \"valueUnit\": \"milliseconds\",\n \"defaultValue\": 0,\n \"help\": \"How long to wait (in milliseconds) for an \\u003cstrong\\u003eUpdate\\u003c/strong\\u003e command before firing Google tags that have been queued up.\",\n \"enablingConditions\": [\n {\n \"paramName\": \"command\",\n \"paramValue\": \"default\",\n \"type\": \"EQUALS\"\n }\n ],\n \"valueValidators\": [\n {\n \"type\": \"NON_NEGATIVE_NUMBER\"\n }\n ]\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"eea\",\n \"checkboxText\": \"Include EEA regions\",\n \"simpleValueType\": true,\n \"help\": \"Check this box to apply this tag only to visitors from the European Economic Area.\",\n \"defaultValue\": false,\n \"enablingConditions\": [\n {\n \"paramName\": \"command\",\n \"paramValue\": \"default\",\n \"type\": \"EQUALS\"\n }\n ]\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"regions\",\n \"displayName\": \"Regions\",\n \"simpleValueType\": true,\n \"defaultValue\": \"all\",\n \"help\": \"Apply this setting to users from these \\u003ca href\\u003d\\\"https://en.wikipedia.org/wiki/ISO_3166-2\\\"\\u003eregions\\u003c/a\\u003e (provide a comma-separated list). If you type \\u003cstrong\\u003eall\\u003c/strong\\u003e, the setting will apply to all users. If you type \\u003cstrong\\u003eeea\\u003c/strong\\u003e as one of the regions, the tag will automatically include all European Economic Area regions as geographical targets for this command.\",\n \"enablingConditions\": [\n {\n \"paramName\": \"eea\",\n \"paramValue\": false,\n \"type\": \"EQUALS\"\n }\n ],\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\",\n \"errorMessage\": \"Set to \\\"all\\\" for all regions or add a comma-separated list of regions.\"\n }\n ]\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"regionsEEA\",\n \"displayName\": \"Regions\",\n \"simpleValueType\": true,\n \"defaultValue\": \"eea\",\n \"help\": \"Apply this setting to users from these \\u003ca href\\u003d\\\"https://en.wikipedia.org/wiki/ISO_3166-2\\\"\\u003eregions\\u003c/a\\u003e (provide a comma-separated list). If you type \\u003cstrong\\u003eall\\u003c/strong\\u003e, the setting will apply to all users. If you type \\u003cstrong\\u003eeea\\u003c/strong\\u003e as one of the regions, the tag will automatically include all European Economic Area regions as geographical targets for this command.\",\n \"enablingConditions\": [\n {\n \"paramName\": \"eea\",\n \"paramValue\": true,\n \"type\": \"EQUALS\"\n }\n ],\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\",\n \"errorMessage\": \"Set to \\\"all\\\" for all regions or add a comma-separated list of regions.\"\n }\n ]\n },\n {\n \"type\": \"GROUP\",\n \"name\": \"settings\",\n \"displayName\": \"Consent Settings\",\n \"groupStyle\": \"ZIPPY_OPEN\",\n \"subParams\": [\n {\n \"type\": \"GROUP\",\n \"name\": \"required\",\n \"displayName\": \"Required for Google services\",\n \"groupStyle\": \"NO_ZIPPY\",\n \"subParams\": [\n {\n \"type\": \"SELECT\",\n \"name\": \"ad_storage\",\n \"displayName\": \"ad_storage\",\n \"macrosInSelect\": true,\n \"selectItems\": [\n {\n \"value\": \"granted\",\n \"displayValue\": \"granted\"\n },\n {\n \"value\": \"denied\",\n \"displayValue\": \"denied\"\n },\n {\n \"value\": \"notset\",\n \"displayValue\": \"Not set\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"denied\",\n \"help\": \"If set to \\u003cstrong\\u003edenied\\u003c/strong\\u003e, Google\\u0027s advertising tags and pixels will not be able to read or write first-party cookies. The use of third-party cookies is limited to only spam and fraud detection purposes. \\u003ca href\\u003d\\\"https://support.google.com/analytics/answer/9976101#behavior\\\"\\u003eMore information\\u003c/a\\u003e.\"\n },\n {\n \"type\": \"SELECT\",\n \"name\": \"analytics_storage\",\n \"displayName\": \"analytics_storage\",\n \"macrosInSelect\": true,\n \"selectItems\": [\n {\n \"value\": \"granted\",\n \"displayValue\": \"granted\"\n },\n {\n \"value\": \"denied\",\n \"displayValue\": \"denied\"\n },\n {\n \"value\": \"notset\",\n \"displayValue\": \"Not set\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"denied\",\n \"help\": \"If set to \\u003cstrong\\u003edenied\\u003c/strong\\u003e, Google Analytics tags will not read or write analytics cookies, and data collected to Google Analytics will not utilize persistent cookie identifiers (the identifiers are reset with every page load). \\u003ca href\\u003d\\\"https://support.google.com/analytics/answer/9976101#behavior\\\"\\u003eMore information\\u003c/a\\u003e.\"\n },\n {\n \"type\": \"SELECT\",\n \"name\": \"ad_user_data\",\n \"displayName\": \"ad_user_data\",\n \"macrosInSelect\": true,\n \"selectItems\": [\n {\n \"value\": \"granted\",\n \"displayValue\": \"granted\"\n },\n {\n \"value\": \"denied\",\n \"displayValue\": \"denied\"\n },\n {\n \"value\": \"notset\",\n \"displayValue\": \"Not set\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"denied\",\n \"help\": \"If set to \\u003cstrong\\u003edenied\\u003c/strong\\u003e, user data cannot be used with Google\\u0027s advertising solutions for audience building.\"\n },\n {\n \"type\": \"SELECT\",\n \"name\": \"ad_personalization\",\n \"displayName\": \"ad_personalization\",\n \"macrosInSelect\": true,\n \"selectItems\": [\n {\n \"value\": \"granted\",\n \"displayValue\": \"granted\"\n },\n {\n \"value\": \"denied\",\n \"displayValue\": \"denied\"\n },\n {\n \"value\": \"notset\",\n \"displayValue\": \"Not set\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"denied\",\n \"help\": \"If set to \\u003cstrong\\u003edenied\\u003c/strong\\u003e, data collected on this website will not be used for remarketing in Google\\u0027s advertising solutions.\"\n }\n ]\n },\n {\n \"type\": \"GROUP\",\n \"name\": \"optional\",\n \"displayName\": \"Other signals\",\n \"groupStyle\": \"NO_ZIPPY\",\n \"subParams\": [\n {\n \"type\": \"SELECT\",\n \"name\": \"personalization_storage\",\n \"displayName\": \"personalization_storage\",\n \"macrosInSelect\": true,\n \"selectItems\": [\n {\n \"value\": \"granted\",\n \"displayValue\": \"granted\"\n },\n {\n \"value\": \"denied\",\n \"displayValue\": \"denied\"\n },\n {\n \"value\": \"notset\",\n \"displayValue\": \"Not set\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"denied\"\n },\n {\n \"type\": \"SELECT\",\n \"name\": \"functionality_storage\",\n \"displayName\": \"functionality_storage\",\n \"macrosInSelect\": true,\n \"selectItems\": [\n {\n \"value\": \"granted\",\n \"displayValue\": \"granted\"\n },\n {\n \"value\": \"denied\",\n \"displayValue\": \"denied\"\n },\n {\n \"value\": \"notset\",\n \"displayValue\": \"Not set\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"denied\"\n },\n {\n \"type\": \"SELECT\",\n \"name\": \"security_storage\",\n \"displayName\": \"security_storage\",\n \"macrosInSelect\": true,\n \"selectItems\": [\n {\n \"value\": \"granted\",\n \"displayValue\": \"granted\"\n },\n {\n \"value\": \"denied\",\n \"displayValue\": \"denied\"\n },\n {\n \"value\": \"notset\",\n \"displayValue\": \"Not set\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"denied\"\n }\n ]\n }\n ]\n },\n {\n \"type\": \"GROUP\",\n \"name\": \"other\",\n \"displayName\": \"Other Settings\",\n \"groupStyle\": \"ZIPPY_OPEN\",\n \"subParams\": [\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"url_passthrough\",\n \"checkboxText\": \"Pass Ad Click Information Through URLs (url_passthrough)\",\n \"simpleValueType\": true,\n \"help\": \"Check this if you want internal links to pass advertising identifiers (\\u003cstrong\\u003egclid\\u003c/strong\\u003e, \\u003cstrong\\u003edclid\\u003c/strong\\u003e, \\u003cstrong\\u003egclsrc\\u003c/strong\\u003e, \\u003cstrong\\u003e_gl\\u003c/strong\\u003e, \\u003cstrong\\u003ewbraid\\u003c/strong\\u003e) in the link URL while waiting for consent to be granted. \\u003ca href\\u003d\\\"https://developers.google.com/tag-platform/security/guides/consent#passthroughs\\\"\\u003eRead more here\\u003c/a\\u003e.\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"ads_data_redaction\",\n \"checkboxText\": \"Redact Ads Data (ads_data_redaction)\",\n \"simpleValueType\": true,\n \"help\": \"If this is checked \\u003cstrong\\u003eand\\u003c/strong\\u003e ad_storage consent status is \\u003cstrong\\u003edenied\\u003c/strong\\u003e, Google\\u0027s advertising tags will drop all advertising identifiers from the requests, and traffic will be routed through cookieless domains.\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"sendDataLayer\",\n \"checkboxText\": \"Push dataLayer Event\",\n \"simpleValueType\": true,\n \"help\": \"When consent is set to \\\"default\\\", a dataLayer event with \\u003cstrong\\u003eevent: \\u0027gtm_consent_default\\u0027\\u003c/strong\\u003e is sent, together with all the consent states. When an \\\"update\\\" is fired, a dataLayer event with \\u003cstrong\\u003eevent: \\u0027gtm_consent_update\\u0027\\u003c/strong\\u003e is pushed together with details about the updated consent state.\"\n }\n ]\n }\n]\n\n\n___SANDBOXED_JS_FOR_WEB_TEMPLATE___\n\nconst dataLayerPush = require('createQueue')('dataLayer');\nconst gtagSet = require('gtagSet');\nconst log = require('logToConsole');\nconst makeNumber = require('makeNumber');\nconst makeTableMap = require('makeTableMap');\nconst setDefaultConsentState = require('setDefaultConsentState');\nconst updateConsentState = require('updateConsentState');\n\nconst eeaRegions = [\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"NO\",\n \"IS\",\n \"LI\"\n];\n\nconst regions = data.regions || data.regionsEEA;\n \n// Determine the command and the setting object\nconst consentApi = data.command === 'default' ? setDefaultConsentState : updateConsentState;\n\nconst settingsObject = {};\n\nif (data.ad_storage !== 'notset') settingsObject.ad_storage = data.ad_storage;\nif (data.analytics_storage !== 'notset') settingsObject.analytics_storage = data.analytics_storage;\nif (data.ad_user_data !== 'notset') settingsObject.ad_user_data = data.ad_user_data;\nif (data.ad_personalization !== 'notset') settingsObject.ad_personalization = data.ad_personalization;\nif (data.personalization_storage !== 'notset') settingsObject.personalization_storage = data.personalization_storage;\nif (data.functionality_storage !== 'notset') settingsObject.functionality_storage = data.functionality_storage;\nif (data.security_storage !== 'notset') settingsObject.security_storage = data.security_storage;\n\n\n// Settings specific to the \"default\" command\nif (data.command === 'default' && makeNumber(data.wait_for_update) > 0) {\n settingsObject.wait_for_update = makeNumber(data.wait_for_update);\n}\n\nif (data.command === 'default' && regions !== 'all') {\n let setRegions = regions.split(',').map(r => r.trim());\n // Check if EEA regions are included\n if (setRegions.indexOf('eea') > -1) {\n setRegions = setRegions.concat(eeaRegions);\n // Remove duplicates & eea\n setRegions = setRegions.filter((val, idx) => setRegions.indexOf(val) === idx && val !== 'eea');\n }\n settingsObject.region = setRegions;\n}\n \n// Set advanced settings\ngtagSet({\n url_passthrough: data.url_passthrough || false,\n ads_data_redaction: data.ads_data_redaction || false\n});\n\n// Set the consent state\nconsentApi(settingsObject);\n\n// Push to dataLayer if needed\nif (data.sendDataLayer) {\n settingsObject.event = 'gtm_consent_' + data.command;\n dataLayerPush(settingsObject);\n}\n\n// Call data.gtmOnSuccess when the tag is finished.\ndata.gtmOnSuccess();\n\n\n___WEB_PERMISSIONS___\n\n[\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"logging\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"environments\",\n \"value\": {\n \"type\": 1,\n \"string\": \"debug\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"access_globals\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"keys\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"dataLayer\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"access_consent\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"consentTypes\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"consentType\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"ad_storage\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"consentType\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"analytics_storage\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"consentType\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"personalization_storage\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"consentType\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"functionality_storage\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"consentType\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"security_storage\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"consentType\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"ad_user_data\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"consentType\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"ad_personalization\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"write_data_layer\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"keyPatterns\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"url_passthrough\"\n },\n {\n \"type\": 1,\n \"string\": \"ads_data_redaction\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n }\n]\n\n\n___TESTS___\n\nscenarios:\n- name: default settings sent\n code: |-\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('setDefaultConsentState').wasCalledWith({\n analytics_storage: 'denied',\n ad_user_data: 'granted',\n ad_personalization: 'denied',\n personalization_storage: 'denied',\n functionality_storage: 'denied',\n security_storage: 'denied',\n region: ['US-CA'],\n wait_for_update: 500\n });\n\n assertApi('gtmOnSuccess').wasCalled();\n- name: updated settings sent\n code: |-\n mockData.command = 'update';\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('updateConsentState').wasCalledWith({\n analytics_storage: 'denied',\n ad_user_data: 'granted',\n ad_personalization: 'denied',\n personalization_storage: 'denied',\n functionality_storage: 'denied',\n security_storage: 'denied'\n });\n assertApi('gtmOnSuccess').wasCalled();\n- name: extra settings sent\n code: |-\n mock('gtagSet', (obj) => {\n assertThat(obj.url_passthrough).isEqualTo(true);\n assertThat(obj.ads_data_redaction).isEqualTo(true);\n });\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('gtmOnSuccess').wasCalled();\n- name: dataLayer events generated\n code: \"mockData.sendDataLayer = true;\\n\\nlet dlCalled = false;\\n\\nmock('createQueue',\\\n \\ name => {\\n return o => {\\n if (o.event === 'gtm_consent_default' && \\n\\\n \\ o.analytics_storage === 'denied' && \\n o.ad_user_data === 'granted'\\\n \\ &&\\n o.ad_personalization === 'denied' &&\\n o.personalization_storage\\\n \\ === 'denied' &&\\n o.functionality_storage === 'denied' &&\\n o.security_storage\\\n \\ === 'denied' &&\\n o.region[0] === 'US-CA') dlCalled = true;\\n \\n \\\n \\ };\\n});\\n \\n// Call runCode to run the template's code.\\nrunCode(mockData);\\n\\\n \\n// Verify that the tag finished successfully.\\nassertApi('gtmOnSuccess').wasCalled();\\n\\\n assertThat(dlCalled, 'dataLayer not called with correct arguments').isEqualTo(true);\"\nsetup: |-\n const mockData = {\n command: 'default',\n ad_storage: 'notset',\n analytics_storage: 'denied',\n ad_user_data: 'granted',\n ad_personalization: 'denied',\n personalization_storage: 'denied',\n functionality_storage: 'denied',\n security_storage: 'denied',\n wait_for_update: 500,\n regions: 'US-CA',\n url_passthrough: true,\n ads_data_redaction: true,\n sendDataLayer: false,\n };\n\n\n___NOTES___\n\nCreated on 07/10/2020, 10:39:35\n\n\n",
"galleryReference": {
"host": "github.com",
"owner": "gtm-templates-simo-ahava",
"repository": "consent-mode",
"version": "8de6b75da0bf250f42f0a0a9fe357b7e2408eea3",
"signature": "d2a7d018d74c047ccb6b7965d9d2592f4821b142e85b2a58de86f31aa934a4b4"
}
}
]
}
}Consent Mode v2 richtig aufsetzen? Jetzt Beratung anfragen →
Über den Autor
Daniils Visnakovs
Ex-Google-Berater, Speaker (u.a. Nomad World Fest) und Coach. Spezialisiert auf Conversion-Tracking, Google Ads und datenbasiertes Marketing. Hilft Unternehmen, Werbebudgets messbar einzusetzen — in 1:1 Beratung, Workshops oder auf der Bühne.