Für das Ausspielen von Anzeigen wird grundsätzlich der Consent des Nutzers benötigt, da für diese Funktionalität einige Cookies erfordert werden. Mit den Google Publisher Tags können jedoch auch Limited Ads (sogenannte “eingeschränkte Anzeigen”) angefordert werden, die ohne den Einsatz von Cookies oder anderen Browser-Speicherungen auskommen.
In diesem Beitrag geht es um:
- Implementierung von eingeschränkten Anzeigen
- GPT-Bibliothek für Limited Ads
- Möglichkeit 1: TCF
- Möglichkeit 2: API
Implementierung von eingeschränkten Anzeigen
Um das Limited Ads-Feature mit den Google Publisher Tags zu implementieren gibt es zwei Möglichkeiten:
- Die erste Möglichkeit besteht darin, das entsprechende Signal (dass es sich um eine Limited Ad handelt) über eine CMP, die das TCF-Framework von IAB unterstützt, an Google Ad Manager zu senden. Falls eine entsprechende CMP im Einsatz ist, dann schicken die Google Publisher Tags das Signal automatisch an Google Ad Manager.
- Das Limited Ads-Signal lässt sich jedoch auch manuell über die Google Publisher Tags senden. Dazu muss die PrivacySettingsConfig-API genutzt werden.
Schauen wir uns beide Möglichkeiten nachfolgend etwas mehr im Detail an. Vorher muss man aber sicherstellen, dass die GPT-Bibliothek von einer anderen URL geladen wird.
GPT-Bibliothek für Limited Ads
Standardmäßig wird die GPT-Bibliothek von dieser URL geladen:
https://securepubads.g.doubleclick.net/tag/js/gpt.js
Wenn jedoch das Limited Ads-Feature genutzt werden soll, dann muss GPT von folgender URL geladen werden:
https://pagead2.googlesyndication.com/tag/js/gpt.js
Nur diese Bibliothek ist mit der limitedAds-Option aus der GPT kompatibel. Außerdem werden über diese URL keine Cookies gesetzt, was auch die Hauptanforderung der Limited Ads ist. Dementsprechend muss der Publisher sicherstellen, dass abhängig vom Consent die richtige Bibliothek inkl. den richtigen Methoden geladen wird. Wie eine beispielhafte und einfach gehaltene Demo dabei aussehen könnte, zeige ich weiter unten. Welche Auswirkungen dies auf die Anzeigenlieferung hat, ist im entsprechendem Google Ad Manager-Hilfeartikel beschrieben.
Möglichkeit 1: TCF
TCF steht für “Transparency & Consent Framework” und ist ein Rahmenwerk von der IAB Europe mit Vorgaben zur Consent-Einholung von Nutzern. Mehr zu TCF gibt es in meinem Artikel “Transparency and Consent Framework (TCF)”. Damit man als Publisher Limited Ads über die automatische Möglichkeit nutzen kann, braucht man zunächst eine CMP, die TCF unterstützt. Die CMP speichert den sogenannten TC-String (Transparency & Consent String), der wiederum automatisch von den Google Publisher Tags an Google Ad Manager übertragen werden kann. Als Publisher muss man dabei nichts weiter tun.
Neben den Google Publisher Tags unterstützen auch Passback Tags, das IMA SDK und Mobile Ads SDK automatisch die Übermittlung des TC-Strings. Auch Tagless Requests werden unterstützt, es müssen jedoch die entsprechenden Parameter manuell mitgegeben werden. Welche das sind und wie man sie testen kann, dazu später mehr. Wichtig zu wissen ist zunächst einmal, wo die Informationen zum Nutzer-Consent vom TCF gespeichert werden. Die relevanten Infos liegen dabei in einem Objekt namens “TCData”. Der Zugriff darauf erfolgt über eine API und kann wie folgt durchgeführt werden:
__tcfapi('getTCData', 2, function(data, success) {console.log(data);});
Hier ein Beispiel-Datensatz, der dann zurückgegeben wird (zu lange Werte habe ich mit “…” abgekürzt und abgeschnitten):
{ "cmpId": 134, "cmpVersion": 1, "gdprApplies": true, "tcfPolicyVersion": 2, "eventStatus": "tcloaded", "cmpStatus": "loaded", "tcString": "CPm91...", "isServiceSpecific": true, "useNonStandardStacks": false, "purposeOneTreatment": false, "publisherCC": "AA", "outOfBand": { "allowedVendors": {}, "disclosedVendors": {} }, "purpose": { "consents": { "1": true, "2": true, ... }, "legitimateInterests": { "1": false, "2": true, ... } }, "vendor": { "consents": { "1": true, "2": true, "3": false, ... "755": true, ... }, "legitimateInterests": { "1": false, "2": false, ... } }, "specialFeatureOptins": { "1": true, "2": true }, "publisher": { "consents": {}, "legitimateInterests": {}, "customPurpose": { "consents": {}, "legitimateInterests": {} }, "restrictions": {} }, "addtlConsent": "1~70.89.108.122.149.162.167.196.241.259.311.317.323..." }
Unter “vendor” und “consents” sieht man bspw. die ID 755, die zusammengefasst für “Google Advertising Products” steht. Darunter sind Google Ad Manager, Google AdSense und Google AdMob zu sehen. Der Wert “true” besagt, dass hier ein Consent vorliegt. Ebenfalls relevant ist die Property “tcString”, die – wie der Name schon sagt – den TC-String bereithält, den die Google Publisher Tags ebenfalls an den Ad Server schicken. Auf Basis dieser Daten kann man dann im ausgehenden Request der Google Publisher Tags weitere Parameter sehen. Diese wären:
- gdpr: Dieser Parameter gibt entweder 0 oder 1 zurück und definiert, ob der Nutzer aus der EU kommt (1) oder nicht (0). Ist im Grunde nur für Websites aus dem EU-Raum relevant.
- gdpr_consent: Dieser Wert repräsentiert den TC-String, den die Google Publisher Tags aus der Property “tcString” des Objekts “TCData” beziehen. Der String enthält die Consent-Information des Nutzers.
- addtl_consent: Dies ist ein optionaler Parameter, den sich die Google Publisher Tags ebenfalls aus dem TCData-Objekt ziehen. Die Property lautet “addtlConsent”.
Wie oben angeschnitten, müssen genau diese Parameter beim Tagless Request manuell mitgeschickt werden. Beim Parameter “addtl_consent” handelt es sich um den “Modus für zusätzliche Einwilligung”. Dieser Parameter enthält die Info über Einwilligungen für Anbieter, die noch nicht in der GVL des IAB Europe registriert sind, aber von Google unterstützte Anbieter sind. Der String besteht im wesentlichen aus drei Teilen. Wenn wir als Beispiel den Wert “1~70.89.108.122.149.162.167.196.241.259.311.317.323” nehmen, dann kann dieser in drei Teile geteilt werden:
- Zunächst kommt die Versionsnummer, was im Beispiel die erste “1” darstellen soll.
- Danach folgt ein Trennzeichen “~”.
- Im Anschluss kommt der dritte Teil, der einfach eine durch Punkte getrennte Liste der IDs aller unterstützen Anbieter von Google ist.
Wie beschrieben, handhaben die Google Publisher Tags diese Parameter automatisch, falls eine TCF-konforme CMP im Einsatz ist.
Möglichkeit 2: API
Möchte man Limited Ads manuell implementieren, dann bieten dafür die Google Publisher Tags die API namens “PrivacySettingsConfig”. Über die darin zur Verfügung stehende Property “limitedAds” können die eingeschränkten Anzeigen aktiviert werden. Der erwartete Wert wäre “true”. Damit jedoch die Ads im eingeschränkten Modus ausgeliefert werden, muss wie oben beschrieben auch die GPT-Bibliothek von folgender URL geladen werden:
https://pagead2.googlesyndication.com/tag/js/gpt.js
Nachfolgend findest du ein Code-Beispiel dazu. Das Beispiel ist sehr einfach gehalten, wird so im Live-Betrieb direkt nicht eingesetzt, soll aber zu Demo-Zwecken dienen. Über eine einfache Logik “simuliere” ich dabei einen Consent-Layer, der abhängig vom Klick auf “Accept” oder “Decline” die entsprechende GPT-Logik lädt. Alternative könnte man ähnliches über die disableInitialLoad()-Methode erreichen.
<!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>GAM mit Consent</title> <script> window.addEventListener('DOMContentLoaded', function() { var acceptCookies = document.getElementById('accept'), declineCookies = document.getElementById('decline'); acceptCookies.addEventListener('click', loadStandardGpt); declineCookies.addEventListener('click', loadLimitedAds); }); function loadStandardGpt() { var head = document.getElementsByTagName('head')[0]; var js = document.createElement("script"); js.type = "text/javascript"; js.src = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js'; head.appendChild(js); window.googletag = window.googletag || {cmd: []}; googletag.cmd.push(function() { googletag .defineSlot( '/6355419/Travel/Europe/France/Paris', [728, 90], 'banner-ad') .addService(googletag.pubads()); googletag.enableServices(); googletag.display('banner-ad'); }); document.getElementById("consent").style.display = "none"; }; function loadLimitedAds() { var head = document.getElementsByTagName('head')[0]; var js = document.createElement("script"); js.type = "text/javascript"; js.src = 'https://pagead2.googlesyndication.com/tag/js/gpt.js'; head.appendChild(js); window.googletag = window.googletag || {cmd: []}; googletag.cmd.push(function() { googletag.defineSlot('/6355419/Travel', [728, 90], 'banner-ad') .setTargeting('test', 'privacy') .addService(googletag.pubads()); googletag.pubads().setPrivacySettings({ limitedAds: false }); googletag.enableServices(); googletag.display('banner-ad'); }); document.getElementById("consent").style.display = "none"; } </script> </head> <body> <div id="content"> <h1>Google Ad Manager Limited Ads</h1> <div id="banner-ad" style="width: 728px; height: 90px; border:1px solid"> </div> <p id="consent"> Google Ad Manager Consent: <button type="button" id="accept">Accept</button> <button type="button" id="decline">Decline</button> </p> </div> </body> </html>
Wenn ich initial auf der Seite lande, dann wird zunächst keine Ad geladen, da zunächst der Consent abgefragt wird:
Stimme ich zu (mit Klick auf “Accept”), dann laden die Google Publisher Tags über die Standard-Implementierung die Ads:
Und mit Klick auf “Decline” wird die Limited Ad geladen:
Im ausgehenden Request der Limited Ad muss dann ein Parameter namens “ltd” mit dem Wert “1” vorhanden sein. “ltd” steht dabei für Limited Ads und ist der Ersatz für den TC-String, den sich die Google Publisher Tags sonst von der TCF-API holen.