osob.de Unicorn Logo
Blogpost overview

Google Analytics Opt-In einfach ohne Plugin umsetzen | 01.06.2020

<p>Jetzt ist es also offiziell: Wenn Google Analytics genutzt werden soll, muss es ein <a href="https://www.haufe.de/recht/weitere-rechtsgebiete/wirtschaftsrecht/bgh-folgt-dem-eugh-aktive-zustimmungspflicht-fuer-cookies_210_517524.html" title="BGH verlangt aktive Zustimmung zu Cookies - Opt-out erfüllt DSGVO-Vorgaben nicht" target="_blank" rel="noopener">Opt-In durch die Besucher der Website</a> geben. Nun gibt es dafür einige Dienstleister und auch Plugins. Ist nett, aber nicht unbedingt nötig. Eine einfache Website kann fix mit einem kleinen Javascript, ein wenig CSS und der entsprechenden serverseitigen Umsetzung (in diesem Beispiel PHP) so modifiziert werden, dass sie der aktuellen Regulation entspricht.</p> <p>

You like what you find here? A donation helps to keep this project running.

</p> <h2>Code</h2> <p>Das folgende Markup erstellt eine Section mit dem entsprechenden Inhalt.</p> <pre><code class="language-html">&lt;section id="EuCookieOptIn"&gt;<br> &lt;p&gt;Wir nutzen Cookies und Google Analytics. Ist das okay?&lt;/p&gt;<br> &lt;button class="optin" onclick='_optIn()'&gt;Ja klar!&lt;/button&gt;<br> &lt;button class="optout" onclick='_optOut()'&gt;Ne, mach mal nicht&lt;/button&gt;<br> &lt;/section&gt;<br><br></code></pre> <p>Das Markup kann natürlich nach den eigenen Wünschen erweitert werden. Wichtig sind eigentlich nur die ID der Section (Section ist optional und kann auch gegen ein Div ausgetauscht werden) und die beiden Buttons mit der Verknüpfung der Funktionen.</p> <p>Um das Ganze etwas ansehnlicher zu gestalten, gibt es etwas CSS-Code:</p> <pre><code class="language-css">section#EuCookieOptIn p {<br> display: block;<br> text-align: justify;<br> }<br> section#EuCookieOptIn button.optin, section#EuCookieOptIn button.optout {<br> background-color: #4CAF50;<br> border: none;<br> color: white;<br> padding: .8em 1.2em;<br> text-align: center;<br> text-decoration: none;<br> display: inline-block;<br> font-size: 1.4em;<br> }<br> section#EuCookieOptIn button.optin:active, section#EuCookieOptIn button.optout:active {<br> transform: scale(.95);<br> }<br> section#EuCookieOptIn button.optout {<br> background-color: #e7e7e7;<br> color: black;<br> }<br> section#EuCookieOptIn {<br> display: block;<br> z-index: 1001;<br> position: fixed;<br> bottom: 2vh;<br> right: 2vw;<br> margin: 0;<br> color: #555;<br> border: 1px solid #b40b06;<br> background: #fff;<br> text-align: center;<br> font-size: .66em;<br> padding: 1em;<br> line-height: 2em;<br> opacity: .95;<br> min-width: 256px;<br> width: 50%;<br> max-width: 512px;<br> }<br> section#EuCookieOptIn:hover {<br> opacity: 1;<br> }<br> </code></pre> <p>Auch der CSS-Code kann wieder nach Lust und Laune modifiziert werden. Nun kommt noch der Javascript-Anteil. Hierbei</p> <pre><code class="language-js">try{<br> function _optIn() {<br> var now = new Date();<br> now.setTime(now.getTime() + 31536000000);<br> document.cookie = "EuCookieOptIn = set;expires=" + now.toUTCString();<br> document.cookie = 'EuCookieOptOut=; Max-Age=-99999999;';<br> <br> // Load GA <br> window.ga = window.ga || function() {<br> (ga.q = ga.q || []).push(arguments)<br> };<br> ga.l = +new Date;<br> ga('create', 'UA-XXXXX-X', 'auto');<br> ga('set', 'anonymizeIp', true);<br> ga('send', 'pageview');<br> var gascript = document.createElement("script");<br> gascript.async = true;<br> gascript.src = "https://www.google-analytics.com/analytics.js";<br> document.getElementsByTagName("head")[0].appendChild(gascript, document.getElementsByTagName("head")[0]);<br> <br> console.log("Cookie and Tracking is enabled until " + now.toUTCString());<br> <br> document.getElementById("EuCookieOptIn").style.display = "none";<br> }<br> <br> function _optOut() {<br> var now = new Date();<br> now.setTime(now.getTime() + 86400);<br> document.cookie = "EuCookieOptOut = set;expires=" + now.toUTCString();<br> document.cookie = 'EuCookieOptIn=; Max-Age=-99999999;';<br> console.log("Cookie and Tracking is disabled until " + now.toUTCString());<br> document.getElementById("EuCookieOptIn").style.display = "none";<br> <br> }<br> } catch (err) {<br> console.log(err);<br> } </code></pre> <p>Wenn die Besucher der Website die Funktion _optOut auslösen, wird ein Cookie für 24 Stunden gesetzt, der das Laden von Google Analytics deaktiviert (folgt im PHP-Teil). Sollte ein Opt-In erfolgen, wird direkt Google Analytics eingebunden und die Auswahl mit einem Cookie (für ein Jahr) gespeichert. Es ist zu beachten, dass UA-XXXXX-X gegen den eigenen Google-Analytics-Code ausgetauscht wird.</p> <p>Die Implementierung in PHP sollte so aussehen:</p> <pre><code class="language-php">&lt;?php <br> if (isset($_COOKIE["EuCookieOptOut"]) &amp;&amp; !isset($_COOKIE["EuCookieOptIn"]) ) {<br> echo "&lt;!-- Google Analytics not enabled! --&gt;";<br> } elseif(isset($_COOKIE["EuCookieOptIn"]) &amp;&amp; !isset($_COOKIE["EuCookieOptOut"])){<br> echo "&lt;!-- Google Analytics is enabled! --&gt;";<br> ?&gt;&lt;!-- Global site tag (gtag.js) - Google Analytics --&gt;<br> &lt;script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXX-X"&gt;&lt;/script&gt;<br>&lt;script&gt;<br> window.dataLayer = window.dataLayer || [];<br> function gtag(){dataLayer.push(arguments);}<br> gtag('js', new Date());<br> gtag('set', 'anonymizeIp', true);<br> gtag('config', 'UA-XXXXX-X');<br> &lt;/script&gt;&lt;?php<br> } else {<br> // Reset all cookies<br> setcookie("EuCookieOptOut", "", time() - 3600); <br> setcookie("EuCookieOptIn", "", time() - 3600); <br> // Show Popup <br> ?&gt;&lt;section id="EuCookieOptIn"&gt;<br> &lt;p&gt;Wir nutzen Cookies und Google Analytics. Ist das okay?&lt;/p&gt;<br> &lt;button class="optin" onclick='_optIn()'&gt;Ja klar!&lt;/button&gt;<br> &lt;button class="optout" onclick='_optOut()'&gt;Ne, mach mal nicht&lt;/button&gt;<br> &lt;/section&gt;&lt;?php<br> }<br> ?&gt;</code></pre> <h2>Wie funktioniert der Code?</h2> <p>Eigentlich ist es ganz einfach. Beim Besuch der Website wird, wenn kein Cookie gesetzt ist, die Abfrage ausgegeben (Show Popup). Wenn der Nutzer nun eine Auswahl trifft, wird entweder nichts eingebunden (Google Analytics not enabled!) oder Analytics eingebunden. Und das war es auch schon.</p> <p>Sowohl PHP-Code als auch der Javascript-Code löschen im Falle des Falles ungültige Cookies. So ist es möglich, die Funktion _optIn() auch später noch einmal aufzurufen (wenn das Javascript eingebunden ist).</p> <p></p>