Table of contents
The deadline for the IAB’s Transparency and Consent Framework (TCF) v2.0 was on August 15, 2020 which means that Google now fully supports the Framework. Many publishers that use Google Ad Manager are experiencing integration issues and as such are receiving error messages about their setup.
In this article, we aim to help publishers find and troubleshoot the most common error codes.
A quick rundown on TCF v2.0 so far
The most recent version of TCF was announced in August 2019, after obtaining input from stakeholders and applying that feedback to the revised version. TCF v2.0 aims to address the concerns of v1.0 highlighted by legislators, advertisers and user groups. The deadline for TCF v2.0 implementation was on August 15, 2020 which is when support for v1.0 was switched off. Consent strings then became invalid after September 30, 2020, which meant that publishers had up until this date to upgrade to TCF v2.0 or use another method for obtaining consent.
Google had already promised to support TCF v2.0 and so began by gradually reading and passing Transparency Consent (TC) strings for a proportion of ad requests and ramping up to reach 100% before the deadline of August 15. In order to give publishers time to manage errors and misconfiguration related to TCF v2.0, Google has given a 90 day grace period to publishers already using TCF v2.0 to resolve any errors. This means that after November 13th 2020, ads will not be able to serve if they do not comply with consent.
Common TCF v2.0 Google implementation errors
At OKO, we’ve found that by far the most common Google integration issues affecting publishers are 1.1 errors and 2.1a errors.
You can find implementation errors in Google Ad Manager by viewing the TCF error report in Google Ad Manager by navigating to Admin > EU User Consent > Download TCF Error Report.
“IAB TCF v2.0 errors detected. Download the TCF error report and go to ‘Learn more’ for guidance on how to fix”
How to troubleshoot TCF v2.0 Google implementation error 1.1
What is error 1.1?
Error 1.1 occurs when Google, as a vendor, is not allowed under consent or legitimate interest. This issue can result in dropped and unfilled ad requests which can have a negative impact on your ad revenue. As such, they do not receive a grace period.
What causes error 1.1?
Error 1.1 occurs when Google cannot detect signals of consent or legitimate interest. This can either be caused by users intentionally rejecting Google as a vendor or a result of an outdated Consent Management Platform (CMP) configuration, which does not present users with the option to accept Google as a vendor.
How to solve error 1.1
In order to solve error 1.1, there are three steps you’ll need to address:
- Confirm whether the user intentionally rejected Google as a vendor.
- Check for any CMP implementation errors. If you’re using Quantcast Choice, you’ll need to check that Google is displayed as a vendor in the CMP on the global vendor list and check that it is not blocked. If it is not blocked, then you’ll need to block and unblock any vendor to force the CMP to display again to all users and register a transparency consent (TC) string for Google.
- Check for any publisher restrictions. Publisher restrictions are a new feature introduced to version 2.0 of the Framework that allow publishers to signal restrictions on how vendors may process personal data.
How to troubleshoot TCF v2.0 Google implementation error 2.1a
What is error 2.1a?
Error 2.1a occurs when the tag or Software Development Kit (SDK) is not receiving a TC string due to CMP status being stub, loading or error. For 60 days from August 15, 2020, publishers will be able to fix any misconfiguration issues without impacting their monetization. If the issue is not solved between October 14, 2020 and November 13, 2020, non-personalised ads will be served regardless of existing personalised and non-personalised ad settings. After November 13, 2020 ad requests will not be filled.
What causes error 2.1a?
The most common cause of error 2.1a is ad requests being made before the user provides or rejects consent. This error occurs when working with Google as a vendor because most TCF vendors check themselves whether the TC string is available before requesting an ad so that they can determine if they have a legal basis to process personal data.
However, Google does not check for the TC string first and instead expects the publisher to make sure the TC string is available via the CMP before requesting ads. Therefore, if an ad is requested before a TC string is made available, this results in error 2.1a.
How to solve error 2.1a
Error 2.1a can be solved by adding conditional logic to ensure that the TC string is made available before an ad is called.
The following snippet leverages the TCF v2.0 API and GPT API to only execute the GAM auction once consent has been ascertained from the CMP. Please use it for illustrative purposes as a base to suit your particular needs:
//TCF API listener code - add after TCF 2.0 compatible CMP initialization code has executed
window.__tcfapi('addEventListener', 2, function(tcData, listenerSuccess) {
if (listenerSuccess) {
// check the eventstatus
if (tcData.eventStatus === 'useractioncomplete' ||
tcData.eventStatus === 'tcloaded') {
if(!tcData.gdprApplies){
//GDPR does not apply to this user so start GAM auction
googletag.cmd.push(function () {
googletag.pubads().refresh();
});
return;
}
// Deal with parsing tcData for IAB Vendor consents
//Deal with personalized/non-personalized Google ads based on this document: https://support.google.com/admanager/answer/9805023?hl=en
if ((tcData.vendor.consents[755] || tcData.vendor.legitimateInterests[755])
&& (tcData.purpose.consents[1] && tcData.purpose.consents[3] && tcData.purpose.consents[4]
&& tcData.purpose.legitimateInterests[2] && tcData.purpose.legitimateInterests[7] && tcData.purpose.legitimateInterests[9] && tcData.purpose.legitimateInterests[10])) {
//consent signals sufficient for personalized ads
//set personalized ads and then run the GAM auction
googletag.cmd.push(function () {
googletag.pubads().setRequestNonPersonalizedAds(0);
googletag.pubads().refresh();
});
} else if((tcData.vendor.consents[755] || tcData.vendor.legitimateInterests[755])
&& (tcData.purpose.consents[1]
&& tcData.purpose.legitimateInterests[2] && tcData.purpose.legitimateInterests[7] && tcData.purpose.legitimateInterests[9] && tcData.purpose.legitimateInterests[10])) {
//consent signals NOT sufficient for personalized ads
//set non-personalized ads and then run the GAM auction
googletag.cmd.push(function () {
googletag.pubads().setRequestNonPersonalizedAds(1);
googletag.pubads().refresh();
});
}
}
}
});