_Lars_: [JS] Google-Analytics nicht einbinden, wenn DoNotTrack-Header gesetzt ist

Erstmal ein Hallo in die Runde, ich bin der Neue. Vorweg, Javascript-Kentnisse sind bei mir rundimentär bis nicht vorhanden. 😕

Ich habe eine mit Typo3 erstellte Homepage, bei der im Template GA eingebunden wird:

<!-- Global Site Tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-???????????"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments)};
  gtag('js', new Date());
  gtag('config', 'UA-???????????', { 'anonymize_ip': true });
</script>

Ideal und gewünscht ist eine serverseitige Lösung, bei der je nach HTTP_DNT-Header das GA-HTML-Schnipsel eingebunden wird, oder nicht. Da ich aber nur Zugriff auf die Template-Datei selbst habe und die Umsetzung noch dauern wird, würde ich gern wissen, ob man das als zwischenzeitlichen Würgaround auch über Javascript lösen kann? In etwa so (ich weiß, daß hier JS- und HTML-Code vermischt sind, es ght nur um die Verdeutlichung, was ich will):

<script>
  if(navigator.doNotTrack != 1) {

    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-???????????"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments)};
      gtag('js', new Date());
      gtag('config', 'UA-???????????', { 'anonymize_ip': true });
    </script>

  }
</script>

Danke für euere Hilfe Lars

  1. hallo

    Ideal und gewünscht ist eine serverseitige Lösung, bei der je nach HTTP_DNT-Header das GA-HTML-Schnipsel eingebunden wird, oder nicht.

    Die DSGVO gilt auch dann, wenn sich Google (der Chrome Browser) entscheiden sollte, keinen Do-Not-Track Header zu setzen. Dass Google Privacy zurückbaut, wurde jüngst publik.

    https://forum.selfhtml.org/self/2019/jan/23/chromium-strich-chrome-abschalten-der-schnittstelle-fuer-content-strich-ad-blocker-geplant/1741352#m1741352

    Deshalb: tracking nur auf explizite User-Erlaubnis! Vertraue nicht auf Browser-Konfiguration.

    1. Das, was Du sagst, ist völlig richtig, hat aber nichts mit meiner Frage zu tun. Ich möchte schlicht und einfach den DoNotTrack-Header honorieren.

      1. Hello,

        Das, was Du sagst, ist völlig richtig, hat aber nichts mit meiner Frage zu tun. Ich möchte schlicht und einfach den DoNotTrack-Header honorieren.

        Das musst Du mit einer aktiven Behandlung (PHP, Perl, ...) auf dem Server tun, oder indem Du mittels einer Rewrite-Rule auf eine andere Version der Webseite verzweigst.
        Das Javascript für die Analytics darf dann einfach nicht eingebunden werden.

        Außerdem sollte man dan auch noch die Entscheidung des Clients für/gegen Cookies berücksichtigen.

        Glück Auf
        Tom vom Berg

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Das musst Du mit einer aktiven Behandlung (PHP, Perl, ...) auf dem Server tun,

          Wäre auch meine erste Wahl, das ist mit dem TYPO3 aber nicht so leicht umsetzbar.

          oder indem Du mittels einer Rewrite-Rule auf eine andere Version der Webseite verzweigst.

          Super Hinweis, danke.

          Lars

      2. hallo

        Das, was Du sagst, ist völlig richtig, hat aber nichts mit meiner Frage zu tun. Ich möchte schlicht und einfach den DoNotTrack-Header honorieren.

        Was bedeutet das genau? Jede Antwort ist knifflig und kann bestenfalls nur für 3rd-Party Komponenten eindeutig beantwortet werden.

        Praktisch bedeutet es, dass du den Content filtern musst und alle Inhalte von 3rd-Party Ressourcen ausser Links entfernen musst.

        Ferner musst du auch überwachen, dass Typo3 unter der Haube das selbst honoriert.

        1. Das, was Du sagst, ist völlig richtig, hat aber nichts mit meiner Frage zu tun. Ich möchte schlicht und einfach den DoNotTrack-Header honorieren.

          Was bedeutet das genau? Jede Antwort ist knifflig und kann bestenfalls nur für 3rd-Party Komponenten eindeutig beantwortet werden.

          Praktisch bedeutet es, dass du den Content filtern musst und alle Inhalte von 3rd-Party Ressourcen ausser Links entfernen musst.

          Ferner musst du auch überwachen, dass Typo3 unter der Haube das selbst honoriert.

          Ich danke Dir für die Denkanstöße, das ist mir alles bewußt (auch z.B. Logfiles des HTTP-Servers), aber nicht Inhalt der Frage (und nicht meine Baustelle). Es geht mir einzig um das Template. Ich benötige nur ein wenig Hilfe, mit dem HTML/JS-Code.

        2. @@beatovich

          Jede Antwort ist knifflig

          Nö. Deine im anderen Thread war’s nicht. 😂

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  2. Hallo Lars,

    in diesem Blog-Artikel geht es zwar um etwas anderes, aber auch hier wird vor Laden eines Scriptes die Zustimmung der Besucher eingeholt. Dazu wird das externe Script per Javascript geladen. Für dich könnte das z.B. so aussehen (ungetestet):

    		function loadScript(url,callback) {
    			var scr = document.createElement('script');
    			scr.type = "text/javascript";
    			scr.async = "async";
    			if(typeof(callback)=="function") {
    				scr.onloadDone = false;
    				scr.onload = function() { 
    					if ( !scr.onloadDone ) {
    						scr.onloadDone = true;
    						callback(); 
    					}
    				};
    				scr.onreadystatechange = function() { 
    					if ( ( "loaded" === scr.readyState || "complete" === scr.readyState ) && !scr.onloadDone ) {
    						scr.onloadDone = true; 
    						callback();
    					}
    				}
    			}
    			scr.src = url;
    			document.getElementsByTagName('head')[0].appendChild(scr);
    		} // LoadScript
    
    		if(navigator.doNotTrack != 1) {
    			loadScript("https://www.googletagmanager.com/gtag/js?id=UA-???????????", function() {
    				window.dataLayer = window.dataLayer || [];
    				function gtag(){dataLayer.push(arguments)};
    				gtag('js', new Date());
    				gtag('config', 'UA-???????????', { 'anonymize_ip': true });
    			});
    		}
    

    Die Funktion loadScript lädt das externe Script, dessen URL als erster Parameter übergeben wird, und ruft dann die als zweiter Parameter übergebene Funktion auf. Sieh es dir mal, ob du damit was anfangen kannst.

    Später kannst du dann die Abfragebedingung erweitern, indem du aktiv die Zustimmung des Users einholst (z.B. wie im Blogartikel) und die Antwort abspeicherst, z.B. im localStorage.

    Gruß
    Jürgen