A Consent Management Platform (CMP) is a software or solution provider that develops notices (e.g. cookie banners) to inform users and capture their preferences with respect to the processing of their personal data. Every CMP needs to obtain a TCF (Transparency and Consent Framework) certificate that sets standards on how this information and additional choices should be provided to users.
List of certified CMPs can found here: https://iabeurope.eu/cmp-list/
To view additional details about the TCF 2.2 policy, click on this link: TCF Policy
Note
Navigate to Ultimate GDPR & CCPA panel > choose Ad Choices
Click Enabled button and Save Changes.
This is the new pop-up that will appear when TCF 2.2 is enabled. Customize Ad Choices pop-up box.
Our TCF 2.2 compliant modal supports Google Consent Mode. If option is enabled plugin is transmitting user consent choices to GTM or gtag.js.
Note
This section provides an overview of how Google Tag Manager (GTM) manages consent mode. For in-depth guidance, consider consulting a GTM/SEO expert.
Consent mode enables your site to communicate users’ consent status. It works to dynamically adapt the behavior of Analytics, Ads, and third-party tags based on user consent.
Basic Implementation primarily involves waiting to load Google tags until after users have provided their consent. This straightforward approach can lead to significant data gaps, as no tracking occurs until consent is granted. While basic implementation allows for some level of conversion modeling, it lacks the depth of insights provided by behavioral modeling, which is crucial for understanding user behavior comprehensively.
Tag Behavior |
Behavioral Modeling in GA4 |
Conversion Modeling |
---|---|---|
Google tags are loaded after obtaining user consent. |
Not available, leading to gaps in understanding user behavior. |
Limited, with general models based on non-specific variables. |
Advanced Implementation, conversely, maximizes the potential of consent mode. By loading Google tags before the consent dialog appears and utilizing cookieless pings for users who decline consent, it enables the full suite of modeling tools in GA4. Behavioral modeling uses machine learning to fill data gaps, offering insights into user behavior, acquisition sources, and conversion paths, even without full user identifiers.
Tag Behavior |
Behavioral Modeling in GA4 |
Conversion Modeling |
---|---|---|
Preemptive tag loading with cookieless data collection for declined consent. |
Enabled, providing insights based on modeled data like daily active users, conversion rates, and more, across different demographics and device types. |
Enhanced, offering detailed analysis and optimization capabilities. |
Hint
Google utilizes Behavioral Modeling to mitigate the impact of missing data when users decline consent. However, for Behavioral Modeling to be employed and for its insights to be visible in your GA4 reports, certain criteria and thresholds must be met:
Consent Mode Activation: Consent mode must be enabled across all site pages.
Advanced Implementation: Tags must load before the consent dialog is displayed, allowing for cookieless data collection from users who decline consent.
Data Volume Requirements: A minimum of 1,000 events per day with analytics_storage=’denied’ for at least 7 days. And at least 1,000 daily users sending events with analytics_storage=’granted’ for at least 7 of the previous 28 days.
These thresholds ensure there’s sufficient data for Google’s machine learning models to accurately estimate user behavior based on observed consented interactions.
Hint
Consent Mode in Google Tag Manager (GTM) allows you to adjust how user consent signals affect the firing of tags on your website, ensuring compliance with data privacy regulations. Depending on your compliance strategy, you may choose to implement either Basic or Advanced Consent Mode. Here’s how to configure each mode:
Basic Consent Mode is about blocking Google tags until users grant consent. This approach sends only “consent granted” signals to Google, operating under the assumption that no data is collected from users who did not grant consent.
Block Tags Without Consent: Use GTM’s consent settings to prevent tags from firing unless consent has been explicitly granted by the user. This means manually configuring your tags to check consent states before firing.
In GTM, navigate to a tag’s settings.
Use Additional consent checks and set Require additional consent for tag to fire option to specify which consent states must be granted for the tag to fire. If any listed state is denied, the tag will not fire.
Advanced Consent Mode allows tags to load and send cookieless pings to Google when consent is not granted, enabling the use of behavioral and conversion modeling to fill data gaps.
Configure Consent Signal Handling: In GTM, ensure that tags are set to fire even when consent has not been fully granted, but configure them to respect consent signals for cookieless data collection.
In GTM, navigate to a tag’s settings.
Additional consent checks: May not be necessary for all tags, depending on whether you wish to collect basic interaction data without personal identifiers. For advanced implementation you might want to leave it empty.
Hint
To make sure everything is working as it should, you can use these tools:
Google Tag Assistant: A tool to help check if the consent signals are being correctly sent: https://developers.google.com/tag-platform/security/guides/consent-debugging
Chrome Addon ‘Analytics Debugger’: Use this Chrome extension to debug and verify analytics data: https://chromewebstore.google.com/detail/analytics-debugger/ilnpmccnfdjdjjikgkefkcegefikecdc
Hint
Note: When Google Consent Mode (GCM v2) is correctly set up, it will communicate the choices made in the “Cookie Preferences” tab of the TCF modal to Google Services.
Our TCF modal already includes those translations:
English
Catalan
Czech
Danish
German
Greek
Spanish
Finnish
French
Galician
Croatian
Hungarian
Italian
Dutch
Norwegian
Polish
Portuguese (Brazil)
Romanian
Russian
Serbian (Cyrillic)
Serbian (Latin)
Swedish
Turkish
Chinese
Hint
Customizing translations
You can change TCF modal texts on your website by using a WordPress filter. This lets you edit just one piece of text or all the phrases you see.
Remember, some parts of the text, like the list of partners, their reasons, examples, and explanations, come straight from the Transparency & Consent Framework (TCF) v2.2 official website. We use these to make sure everything is correct and follows their rules.
Note: This section is for those familiar with WordPress development. Changing these settings can affect how the plugin works, so please be careful.
<?php
/**
* functions.php
* Overwrite translations when using TCF modal (Ultimate GDPR & CCPA plugin)
* Add this snippet to your functions.php (theme) or use custom wordpress plugin
* You can customize each translation that is displayed in TCF modal.
* List of partners, purposes, examples, descriptions can't be customized (those are fetched from official site of The Transparency & Consent Framework (TCF) v2.2)
*/
function ct_tcf_custom_translations($translations) {
/**
* Overwrite all strings from main translations
* List of available languages for TCF modal:
* 'en' => 'English',
* 'ca' => 'Catalan',
* 'cs' => 'Czech',
* 'da' => 'Danish',
* 'de' => 'German',
* 'el' => 'Greek',
* 'es' => 'Spanish',
* 'fi' => 'Finnish',
* 'fr' => 'French',
* 'gl' => 'Galician',
* 'hr' => 'Croatian',
* 'hu' => 'Hungarian',
* 'it' => 'Italian',
* 'nl' => 'Dutch',
* 'no' => 'Norwegian',
* 'pl' => 'Polish',
* 'pt_br' => 'Portuguese (Brazil)',
* 'ro' => 'Romanian',
* 'ru' => 'Russian',
* 'sr_cyrl' => 'Serbian (Cyrillic)',
* 'sr_latn' => 'Serbian (Latin)',
* 'sv' => 'Swedish',
* 'tr' => 'Turkish',
* 'zh' => 'Chinese'
*/
$my_custom_translations['en'] = [
"decline2" => "Withdraw to all",
"consentModal" => [
"title" => "Customise Ad Choices",
"tab1_title" => "Ad Choices",
"tab2_title" => "Cookie Preferences"
],
"tab2" => [
"description" => "You can manage your cookie settings for our website. We use different types of cookies to enhance your browsing experience, analyze site traffic, and personalize content and ads. While necessary cookies are always active, you have control over the other categories. Please note that changing these settings may affect your experience on our site.",
"necessaryCookies" => "Necessary Cookies",
"necessaryCookiesDesc" => "These are crucial for the basic operations of our website. They enable core functionalities such as security, network management, and accessibility. As they are essential for the website to work correctly, they cannot be turned off.",
"functionalCookies" => "Functional Cookies",
"functionalCookiesDesc" => "These cookies enable additional features on our website for a more personalized experience. They remember your preferences and settings, like language or location, making your experience more convenient and tailored.",
"analyticsCookies" => "Analytics Cookies",
"analyticsCookiesDesc" => "These cookies help us understand how visitors interact with our website. They collect information about your use of the site, which pages you visit, and how you navigate the site. This data is used to improve the website's functionality and user experience.",
"advertisingCookies" => "Advertising Cookies",
"advertisingCookiesDesc" => "These cookies are used to display relevant advertisements to you. They track your online activity to tailor advertising to your interests. By not allowing these cookies, the ads you see may be less relevant to you."
],
"purposes" => [
"purposes" => "Purposes",
"special_purposes" => "Special Purposes",
"features" => "Features",
"special_features" => "Special Features",
"partners" => "Partners",
"li_partners" => "Partners (Legitimate Interest)",
"cookies" => "Cookie Preferences"
],
"purposeItem" => [
"service" => "service",
"services" => "services",
"details" => "details"
],
"serviceItem" => [
"privacyPolicy" => "Privacy policy",
"legitimateInterestClaim" => "Legitimate Interest claim",
"purposesConsent" => "Purposes (Consent)",
"purposesLegitimateInterest" => "Purposes (Legitimate Interest)",
"specialPurposes" => "Special Purposes",
"features" => "Features",
"dataDeclaration" => "Data Declaration",
"maximumCookieLifetime" => "Maximum cookie lifetime",
"cookieExpiryRefreshed" => "Cookie expiry may be refreshed during the lifetime.",
"trackingMethodCookies" => "Tracking method: Cookies",
"trackingMethodOthers" => "Tracking method: Others",
"andOthers" => "and others",
"deviceStorage" => "Device storage",
"standardRetention" => "Standard retention",
"purposes" => "Purposes",
"dataRetention" => "Data retention",
"examples" => "Examples",
"partners" => "Partners"
],
'acceptAll' => 'Accept all',
'acceptSelected' => 'Accept selected',
'close' => 'Close',
'consentNotice' => [
'changeDescription' => 'There were changes since your last visit, please renew your consent.',
'title' => 'Cookie Consent',
'description' => 'Hi! Could we please enable some additional services for {purposes}? You can always change or withdraw your consent later.',
'learnMore' => 'Let me choose',
'testing' => 'Testing mode!',
],
'contextualConsent' => [
'acceptAlways' => 'Always',
'acceptOnce' => 'Yes',
'description' => 'Do you want to load external content supplied by {title}?',
],
'decline' => 'I decline',
'ok' => 'That\'s ok',
'poweredBy' => 'Realized with Klaro!',
'privacyPolicy' => [
'name' => 'privacy policy',
'text' => 'To learn more, please read our {privacyPolicy}.',
],
'save' => 'Save',
'service' => [
'disableAll' => [
'description' => 'Use this switch to enable or disable all services.',
'title' => 'Enable or disable all services',
],
'optOut' => [
'description' => 'This services is loaded by default (but you can opt out)',
'title' => '(opt-out)',
],
'purpose' => 'purpose',
'purposes' => 'purposes',
'required' => [
'description' => 'This services is always required',
'title' => '(always required)',
],
],
];
/**
* OR just overwrite strings one by one
*/
$my_custom_translations['en']["save"] = 'Save';
$my_custom_translations['en']["service"]['required']['title'] = '(always required)';
return $my_custom_translations;
}
add_filter('ct_ultimate_gdpr_tcf_translations', 'ct_tcf_custom_translations');