Die letzten Tage habe ich mich damit beschäftigt, wie man in einem Webprojekt Google Adsense wieder DSGVO-konform einsetzen kann. Ob ich dies nun wirklich geschafft habe weiß ich natürlich nicht. Zumindest habe ich es entgegen der Handhabung vieler anderer Seiten, wie bereits im letzten Artikel aufgezeigt, vernünftig mit einem Opt-In aufgesetzt. Womit ich das realisiert habe zeige ich im folgenden Artikel.
Achtung: Natürlich kann ich keine Garantie dafür übernehmen, dass diese technische Umsetzung wirklich genügt um Google Adsense datenschutzkofnorm zu nutzen!
Was bietet Google selber an?
Google bietet folgenden Code an um das Anzeigen der Werbung zu unterbinden:
1 2 3 |
var google_ads_cookie_lacking_consent = (!document.cookie.indexOf('google_ads_cookie_consent=1') >= 0); (adsbygoogle=window.adsbygoogle||[]).pauseAdRequests = google_ads_cookie_lacking_consent; |
Wie es schon der Titel nahe legt, „pausiert“ der Befehl „pauseAdRequests“ das Laden der Werbung. Diesen Code nutze ich allerdings nicht, da durch diesen zwar die Werbung nicht angezeigt aber die entsprechenden Skripte trotzdem von Google geladen werden. Fragwürdig ob das ausreicht, da trotzdem ohne Einverständnis des Nutzers wohl seine IP-Adresse an Google übermittelt wird und vermutlich auch etwas getrackt wird. Deshalb habe ich das nicht weiter verfolgt.
In den Einstellungen bei Google Adsense muss man auf jeden Fall, egal wie man weiter verfährt, die personalisierte Werbung deaktivieren, wenn man diesbezüglich schon einmal safe sein möchte:
Alternative
Zuerst habe ich angefangen komplett selber etwas mit dem bereits vorhandenen Cookie-Banner und selbst gesetzten Cookies zu bauen. Das Projekt ist aber etwas ausgeufert. Stattdessen nutze ich nun eine von mir erweiterte Fassung des Skriptes Cookieconsent. Das Skript wird auch von Google, neben ein paar anderen, selber empfohlen. Die Funktionsweise werde ich hier nicht im Detail erklären, da es auf der zuvor verlinkten Seite eine gute erste Einstiegshilfe und Konfigurationsmöglichkeiten durch den Anbieter des Skriptes gibt.
Modifikation
Folgenden Code habe ich direkt in das cookieconsent.js-Skript eingebaut, da dieses Skript sowieso geladen wird und auf dem eigenen Server liegen sollte.
Als erstes kommt der Aufruf und die Konfiguration des Banners und der Texte, wie man sie auf der Seite des Anbieters für den eigenen Geschmack anpassen kann, z. B. so:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// configuration of the cookie banner window.addEventListener("load", function(){ window.cookieconsent.initialise({ "palette": { "popup": { "background": "#252e39" }, "button": { "background": "#006600" } }, "theme": "classic", "type": "opt-in", "content": { "message": "Diese Webseite möchte Ihnen inhaltsbasierte Werbung mit Hilfe von Google Adsense auf anzeigen. Hierzu werden Cookies von Google und anderen Drittanbietern genutzt und Inhalte von anderen Servern geladen. Weitere Informationen und Optionen um dieses Verhalten jederzeit anzupassen finden Sie in unserer ", "allow": "Zustimmen", "dismiss": "Ablehnen", "link": "Datenschutzerklärung", "href": "/datenschutz" } })}); |
Danach habe ich eine Funktion zum Auslesen des Cookies hinterher geworfen, da ich es mit den Grundfunktionen von Cookieconsense nicht geschafft habe den Cookie wieder auszulesen um dann entsprechend des gespeicherten Wertes „cookieconsent_status“ zu agieren:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// function to get the actual value of the set cookie function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i <ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } |
Es folgt eine Abfrage mit Hilfe der zuvor gezeigten Funktion, um herauszufinden ob der Wert des erstellten Cookies cookieconsent_status auf „allow“ gesetzt ist und wenn dies der Fall ist, wird das Adsense-Skript von Google mit Hilfe der jQuery-Funktion „getScript“ nachgeladen:
1 2 3 4 |
// load adsense-script if cookie-value is set to allow if (getCookie("cookieconsent_status")==="allow") { $.getScript('//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js'); } |
Zum Schluss habe ich noch eine Funktion zum Löschen des Cookies, wodurch die Werbung wieder ausgeblendet und der Cookie-Banner wieder angezeigt wird, hinzugefügt:
1 2 3 4 |
// reset settings by deleting the cookie function delCookie(cname) { document.cookie = cname + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; } |
Diese Funktion baut man dann in der Datenschutzerklärung als Link ein, z. B. so:
1 |
<a href="javascript:delCookie('cookieconsenst_status')">Mit diesem Link wird das Cookie wieder gelöscht!</> |
Einbau auf der Webseite
Im Head-Bereich muss das fertige Cookieconsent-Skript und das dazugehörige CSS-File natürlich eingebunden werden:
1 2 3 4 |
<head> <link rel="stylesheet" type="text/css" href="css/cookieconsent.min.css"/> <script async type="text/javascript" src="js/cookieconsent.min.js"></script> </head> |
Ebenfalls muss der Google Adsense-Code an jeder Stelle, wo er vorkommt, angepasst werden, in dem das Laden des Skriptes, das nun nur im Bedarfsfall stattfindet, entfernt wird:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!-- vorher--> <script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:inline-block;width:160px;height:600px" data-ad-client="ca-pub-xxxxxxxxxxxxxxxxx" data-ad-slot="xxxxxxxxxx"></ins> <script>(adsbygoogle = window.adsbygoogle || []).push({});</script> <span class="werbung">WERBUNG</span><br/> <!-- nachher: --> <ins class="adsbygoogle" style="display:inline-block;width:160px;height:600px" data-ad-client="ca-pub-xxxxxxxxxxxxxxxxx" data-ad-slot="xxxxxxxxxx"></ins> <script>(adsbygoogle = window.adsbygoogle || []).push({});</script> <span class="werbung">WERBUNG</span><br/> |
Problem: Werbung wird trotz des gesetzten Cookies nicht angezeigt
Vor allen Dingen in Chrome hatte ich das Problem, dass die Werbung trotz korrekt gesetztem Cookie und deaktiviertem AdBlocker nicht angezeigt wurde. In Firefox passierte dies bei meinen Tests nur ab und an. Um das zu verhindern, ist es nötig, dass jQuery defintiv fertig geladen ist bevor das cookieconsent-Skript ausgeführt wird. Dafür habe ich den Zusatz „async“ beim Laden des jQuery-Skripts entfernt.
1 2 3 4 5 |
<!-- Aus ... --> <script async type="text/javascript" src="js/jquery-3.2.1.min.js"></script> <!-- ... wird dann: --> <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script> |
Ansonsten findet man mit Hilfe der Webentwickler-Tools folgenden Fehler, wegen des nicht rechtzeitig geladenen jQuery-Skriptes:
Uncaught ReferenceError: $ is not defined