Dipl.-Jur. Philipp Guttmann, LL. B.

Tutorial: Matomo (Piwik) Opt-Out ohne iFrame, nur PHP

Click here for the English version
Dieses Tutorial erklärt, wie man ein einfaches Opt-Out für Matomo (Piwik) schreibt ohne die Nutzung eines iFrame, nur mit PHP

Keiner mag iFrames. Deshalb entschied ich mich, ein einfaches Opt-Out für Matomo (ehem. Piwik) ohne ein iFrame zu kreieren, nur mit PHP. Dieses Tutorial zeigt, wie man vorgeht. Am Ende des Artikels befindet sich der komplette Code. Ich hoffe, Ihnen gefällt meine meine Opt-Out-Lösung.

Vorbereitung

Zunächst benötigen wir ein paar Variablen, die für die Funktion unseres Opt-Out erforderlich sind:

$post = (isset($_POST['matomo_deactivated'])?$_POST['matomo_deactivated']:NULL); $cookie = (isset($_COOKIE["matomo_deactivated"])?$_COOKIE["matomo_deactivated"]:NULL); $dnt = (isset($_SERVER['HTTP_DNT'])?$_SERVER['HTTP_DNT']:NULL); $request_uri = $_SERVER['REQUEST_URI']; $domain = $_SERVER['HTTP_HOST'];

Unser Opt-Out basiert auf einem Formular mit Post-Methode, der Erkennung der "Do Not Track" (DNT) Broswer-Option und auf der Erstellung eines Deaktivierungs-Cookies, sofern er gebraucht wird.

Button oder Informationstext

Abhängig davon, ob DNT aktiviert ist, ein Deaktivierungs-Cookie existiert oder keines von beidem, geben wir unterschiedliche Ausgaben zurück:

$no_tracking = '<p><i>Sie haben '.($dnt != 1?'einen Deaktivierungs-Cookie angelegt':'in Ihrem Browser die "Do Not Track"-Einstellung aktiviert').'.</i> Ihr Besuch wird von Matomo nicht erfasst. Das Matomo-Skript wird nicht ausgeführt.</p>'; $optout_button = '<form action="'.$request_uri.'" method="post"><button type="submit" name="matomo_deactivated" value="1" title="Erfassung Ihres Besuches beenden (Deaktivierungs-Cookie wird angelegt)">Erfassung Ihres Besuches beenden</button></form>';

Nur wenn DNT nicht aktiviert ist und kein Deaktivierungs-Cookie existiert, zeigen wir unseren Opt-Out-Button an. Wenn dieser betätigt wird, wird ein Deaktivierungs-Cookie erstellt.

if ($dnt != 1 AND $post AND !$cookie) { setcookie('matomo_deactivated', $post, time() + (5 * 365 * 24 * 60 * 60), '/', $domain); $matomo_optout = $no_tracking; } elseif ($dnt != 1 AND !$cookie) { $matomo_optout = $optout_button; } else { $matomo_optout = $no_tracking; }

Deaktivierung des Matomo-Skripts

Wenn DNT aktiviert ist oder ein Deaktivierungs-Cookie existiert, haben wir keine Verwendung mehr für das Matomo-Skript im HTML-head. Deshalb deaktivieren wir es. Ansonsten geben wir das Skript aus:

if ($cookie OR $dnt == 1 OR $post) { define('MATOMO_SCRIPT',false); } else { define('MATOMO_SCRIPT','<script>var _paq = window._paq || []; _paq.push(["setDoNotTrack", true]); _paq.push(["disableCookies"]); _paq.push(["trackPageView"]); _paq.push(["enableLinkTracking"]); (function() {var u="https://matomo.'.$domain.'/"; _paq.push(["setTrackerUrl", u+"matomo.php"]); _paq.push(["setSiteId", 1]); var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript"; g.async=true; g.defer=true; g.src=u+"matomo.js"; s.parentNode.insertBefore(g,s);})();</script>'); }

Bitte beachten: Ich habe die Option disableCookies von Matomo aktiviert. Aber natürlich ist diese nicht zwingend erforderlich. Und vergessen Sie nicht, die URL und die Site ID zu Ihrer zu verändern.

Ausgabe in HTML

Zum Schluss könnte unser HTML-Code unseres Opt-Out zum Beispiel wie folgt aussehen:

echo '<!doctype html> <html> <head> <meta charset="utf-8" />'.(MATOMO_SCRIPT?' '.MATOMO_SCRIPT:NULL).' </head> <main> <header><h1>Matomo Opt-Out</h1></header> <div>'.$matomo_optout.'</div> </main> </html>';

Kompletter Code

$post = (isset($_POST['matomo_deactivated'])?$_POST['matomo_deactivated']:NULL); $cookie = (isset($_COOKIE["matomo_deactivated"])?$_COOKIE["matomo_deactivated"]:NULL); $dnt = (isset($_SERVER['HTTP_DNT'])?$_SERVER['HTTP_DNT']:NULL); $request_uri = $_SERVER['REQUEST_URI']; $domain = $_SERVER['HTTP_HOST']; $site_id = 1; $no_tracking = '<p><i>Sie haben '.($dnt != 1?'einen Deaktivierungs-Cookie angelegt':'in Ihrem Browser die "Do Not Track"-Einstellung aktiviert').'.</i> Ihr Besuch wird von Matomo nicht erfasst. Das Matomo-Skript wird nicht ausgeführt.</p>'; $optout_button = '<form action="'.$request_uri.'" method="post"><button type="submit" name="matomo_deactivated" value="1" title="Erfassung Ihres Besuches beenden (Deaktivierungs-Cookie wird angelegt)">Erfassung Ihres Besuches beenden</button></form>'; if ($dnt != 1 AND $post AND !$cookie) { setcookie('matomo_deactivated', $post, time() + (5 * 365 * 24 * 60 * 60), '/', $domain); $matomo_optout = $no_tracking; } elseif ($dnt != 1 AND !$cookie) { $matomo_optout = $optout_button; } else { $matomo_optout = $no_tracking; } if ($cookie OR $dnt == 1 OR $post) { define('MATOMO_SCRIPT',false); } else { define('MATOMO_SCRIPT','<script>var _paq = window._paq || []; _paq.push(["setDoNotTrack", true]); _paq.push(["disableCookies"]); _paq.push(["trackPageView"]); _paq.push(["enableLinkTracking"]); (function() {var u="https://matomo.'.$domain.'/"; _paq.push(["setTrackerUrl", u+"matomo.php"]); _paq.push(["setSiteId", '.$site_id.']); var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript"; g.async=true; g.defer=true; g.src=u+"matomo.js"; s.parentNode.insertBefore(g,s);})();</script>'); } echo '<!doctype html> <html> <head> <meta charset="utf-8" />'.(MATOMO_SCRIPT?' '.MATOMO_SCRIPT:NULL).' </head> <main> <header><h1>Matomo Opt-Out</h1></header> <div>'.$matomo_optout.'</div> </main> </html>';

Fragen?

Wenn Sie weitere Fragen haben, können Sie mir gerne eine E-Mail an ed.nnamttug-ppilihp@liam schreiben und ich versuche zu helfen :)