Wie kann ich Tracking des eigenen Seitenbesuchs verhindern?

Auf meinen Websites nutze ich YooTheme Pagebuilder. Der gestattet mir im Backend die Gestaltung meiner Seiten im WYSIWYG-Modus. Konkret wird bereits die Vorschau im Backend erzeugt. Problem dabei ist, dass bei jeder kleinen Änderung jedes Mal auch das Matomo Tracking getriggert wird. Am Tagesende habe ich dann plötzlich 230 Visits mit meiner eigenen IP-Adresse.

Auf meinen Websites werden durch Matomo keine Cookies gesetzt und zudem werden alle Besuche anonymisiert erfasst. Damit vermeide ich zwar alle Probleme mit der DSGVO usw. Zugleich sehe ich aber zurzeit keine Möglichkeit, wie ich das unerwünschte Erfassen meiner eigenen Besuche verhindern kann. Auch meine IP wechselt ständig gegen 1 Uhr nachts, da ich einen DSL-Anschluss habe.

Einen Ansatz sehe ich aber doch: Die Auswertung der technischen Besuchsdaten wie z.B. die Kombination aus den ersten beiden IP Ziffernblöcken 92.192 und dazu die Gerätedaten aus Screen-Format, OS, Browser mit PDF-Plugin usw. Es dürfte sehr unwahrscheinlich sein, dass ein weiterer Besucher diese Wertekombination hat. (Und wenn schon…)

Welche Möglichkeit gibt es in Matomo, das Tracking der eigenen Besuche zu verhindern? Entweder mit der Erkennung den genannten Wertekombination oder evtl. mit einer anderen Methode, die ich jetzt noch nicht kenne?

1 Like

Die Frage wurde schon einmal, oder sogar mehrmals gestellt. Jetzt müssen sie nur noch gefunden werden.

Antwort siehe hier:

Desweiteren kannst du dir selbst was programmieren. Da du aber einen Pagebuilder, also vorgefertigte Software verwendest, müsstest du diese modden und dieses Modding bei jedem Update der Software wiederholen.

Zum Beispiel mit dem Setzen eines URL Parameter:

und dann die Abfrage (vorhanden oder nicht) in den Matomo JavaScript Tracking Code inkludieren.

Beispiel:
URL: https://www.example.com/?matomo=no

var myUrl = new URL(window.location.href);
var myUrlParams = myUrl.searchParams;
var myUrlParamsMatomo = myUrlParams.get('matomo');

if (myUrlParamsMatomo == "no") {
// no Tracking
} else {
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);
}

Vielen Dank für deine Antwort. Ich habe versucht, das nötige Javascript einzubauen, aber ich war leider damit nicht erfolgreich. Meine Kenntnisse reichen nicht aus.

Aber du hast mich auf eine viel bessere Idee gebracht, wie ich das unerwünschte Tracking bei der Nutzung von Pagebuildern mit WYSIWYG-Editoren vermeiden kann:
Ich nutze Joomla für alle meine Websites. Das Backend ist stets nur über eine URL wie z.B.
https://meine-domain.de/administrator zugänglich. Also müsste ich lediglich deinen Code-Vorschlag so abändern, dass statt Abfrage des URL Parameters “matomo” und “no” abgefragt wird, ob die URL /administrator/ enthält.

Denn das ganze WYSIWYG läuft ja im Pagebuilder im Backend ab und es wird sozusagen über das Backend eine Version des Frontends angezeigt.

Auch dies habe ich versucht, als Änderungen des Tracking-Codes einzufügen. Leider ist auch dies mir nicht gelungen. Bin halt von Beruf Heilpraktiker und kein Software-Mensch und habe zudem keine Zeit, mich eigens für solche Codeschnippsel in Javascript einzuarbeiten.

Vielleicht kannst du mir die entsprechend erforderliche “if”-Bedingung in korrekter Syntax hier mitteilen?
Herzlichen Dank im Voraus!!!

Probier mal das:

if (window.location.pathname.startsWith("/administrator") === false) {
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);
}

Also wenn der Pathname der URL nicht “/administrator” ist, dann wird das Matomo Script geladen. Wenn doch, dann nicht.

Vielen Dank dir!
Woher nimmst du das Javascript, das nach deiner “if”-Kondition kommt? Bei mir sieht der Tracking-Code gemäß Vorschlag aus meiner Matomo-Installation anders aus:

var _paq = window._paq = window._paq || [];
  _paq.push(['disableCookies']);
  _paq.push(['enableHeartBeatTimer', 1]);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://matomo.meine-domain.de/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();

Inzwischen hatte ich folgende Lösung durch weitere Recherche hier im Forum gefunden und daraus die “if” Kondition übernommen. Erstaunlich! Was dort für den Anfragenden funktioniert hat, verhindert aktuell bei mir jegliches Tracking.

Hier meine Script-Variante (die jedes Tracking verhindert):

if (!window.location.pathname.match("/administrator")
{
// no Tracking
} else 
{
var _paq = window._paq = window._paq || [];
  _paq.push(['disableCookies']);
  _paq.push(['enableHeartBeatTimer', 1]);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://matomo.meine-domain.de/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })()};
</script>
<noscript><img referrerpolicy="no-referrer-when-downgrade" src="https://matomo.meine-domain.de/matomo.php?idsite=1&amp;rec=1" style="border:0;" alt="" /></noscript>

Nun habe ich deinen Script-Vorschlag in Verbindung mit meinem bisherigen Tracking-Code eingefügt:

if (window.location.pathname.startsWith("/administrator") === false) {
var _paq = window._paq = window._paq || [];
  _paq.push(['disableCookies']);
  _paq.push(['enableHeartBeatTimer', 1]);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://matomo.meine-domain.de/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })()};
</script>
<noscript><img referrerpolicy="no-referrer-when-downgrade" src="https://matomo.meine-domain.de/matomo.php?idsite=1&amp;rec=1" style="border:0;" alt="" /></noscript>

Leider trackt Matomo jetzt wieder das Backend genau so wie das Frontend. Da mit Sicherheit im Backend JS aktiv ist, dürfte der noscript-Zusatz am Ende nicht die “if”-Kondition unwirksam machen.

Die typische URL während ich im Backend mit dem Pagebuilder arbeite, sieht so aus:
https://meine-domain.de/administrator/index.php?option=com_ajax&templateStyle=12&p=customizer&format=html&site=https%3A%2F%2Fmeine-domain.de%2Findex.php

Wat nu? Was mache ich falsch?

Ach du grüne Neune. Was bietet Matomo denn da seinen Usern für einen JavaScript-Murks an … :confused:

Kurze Code-Erklärung:
Matomo packt das Laden der matomo.js in eine function.
Diese wird in dieser Zeile “geöffnet”:

(function() {

und in dieser “geschlossen” sowie gestartet:

})();

Kombiniere die öffnenden und schließenden Klammern.
() startet die Funktion.
Das ist JavaScript Shortcode. Sowas tut man keinen Usern an, also gestaltet den Code, der von Usern angepasst werden darf, nicht so.

Langcode:

var my_load_the_matomo_js_function = function() {
    var u="https://matomo.meine-domain.de/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
}
my_load_the_matomo_js_function(); // starte die Funktion my_load_the_matomo_js_function

Matomo packt die Sache in eine Funktion, damit es kurze Variablen (var) mit nur 1 Buchstaben verwenden kann, wie u. Also die somit nicht “global” im gesamten HTML-document vergeben wären und somit Probleme bereiten könnten, wenn anderswo auch genutzt. So gelten sie nur in der Funktion.

Aber egal jetzt. Belassen wir es so wie es ist.

<!-- Matomo -->
<script>
  var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://matomo.meine-domain.de/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    if (window.location.pathname.startsWith("/administrator") === false) {
      var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
    }
  })();
</script>
<!-- End Matomo Code -->

Übrigens kannst du auch viel selber JavaScript-Code testen in der Konsole im Browser-Inspektor.
Ansonsten ist w3schools.com eine gute Sache um in JavaScript einzusteigen.
Mal ohne Verlinkung:
https://www.w3schools.com/js/js_window_location.asp
https://www.w3schools.com/jsref/jsref_startswith.asp

Oh was habe ich hier betr. “korrektem JS” losgetreten? Ich wollte doch nur alle Seiten vom Tracking ausgeschlossen haben, die in der URL “/administrator” stehen haben. Und das bisher von mir zum Tracken verwendete JS stammte aus dem Admin-Bereich von Matomo. Ich hatte es lediglich gemäß Matomo-Dokumentation um die Funktionen “disableCookies” den “enableHeartBeatTimer” ergänzt. Dieses JS hatte bisher für meine Websites seit Jahren funktioniert – auch wenn es fehlerhaft gewesen sein mag.
Jedenfalls bis ich seit Kurzem den Pagebuilder mit der WYSIWYG-Gestaltung nutze. Seitdem wird jeder neue Seitenaufbau nach einem Speichern von Änderungen neu getrackt. Selbst wenn ich versuche, mir im Tracking diese Tracks rauszudenken, so bleibt doch die Statistik verfälscht z.B. wenn ich die Besucherkurve anschaue.

Mein voriger Versuch, das Backend-Tracking zu vermeiden, beruhte übrigens auf diesem Thread hier:

In der von mir im vorigen Post mitgeteilten URL, die ich typischer Weise im Backend bei Nutzung des Pagebuilders sehe, ist außer am Anfang der Pfad https://meine-domain.de/administrator… gegen Ende der URL erneut …/meine-domain.de%2Findex.php zu sehen. Könnte diese Tatsache verhindern, dass mit dem von dir vorgechlagenen JS das unerwünschte Tracking erfolgreich unterbleibt?
Wenn das so wäre, dann müsste jede URL, die “administrator” oder “index.php” enthält, vom Tracking ausgeschlossen werden. Denn beim normalen Besuch des Frontends gibt es keine URL, die “index.php” beinhaltet und getrackt werden sollte.

Aktuell habe ich derzeit folgenden Matomo-Code in Benutzung und erreiche damit nicht die Unterdrückung des unerwünschten Trackings im Backend:

<script type="text/javascript">
if (window.location.pathname.startsWith("/administrator") === false) {
  var _paq = window._paq = window._paq || [];
  _paq.push(['disableCookies']);
  _paq.push(['enableHeartBeatTimer', 1]);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://matomo.meine-domain.de/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })()};
</script>
<noscript><img referrerpolicy="no-referrer-when-downgrade" src="https://matomo.meine-domain.de/matomo.php?idsite=1&amp;rec=1" style="border:0;" alt="" /></noscript>

Vor dem schließenden und vor dem Semikolon davor müsste noch eine schließende geschweifte Klammer stehen, so vermute ich, weil nach der “if”-Kondition ja eine sich öffnende geschweifte Klammer steht, die irgendwo geschlossen werden muss. Vielleicht habe ich hier falsch gedacht und die Klammer müsste irgend wo anders sich schließen?

Oder müsste die “if”-Kondition direkt vor der “(function() {” stehen?

Leider komme ich auch jetzt nicht weiter mit dem Vorhaben, das unerwünschte Tracking im Backend zu deaktivieren.
Deine Hinweise auf die JS-Dokumentation helfen mir nicht wirklich, da ich echt noch den “Schädelspalter” bekomme, wenn ich mich auch darum noch kümmern würde. Ich nutze den Pagebuilder ja schon, weil mich Bootstrap, Grid & Co überfordern. Und in Auftrag geben kann ich nix, weil meine Umsätze seit dem Corona-Unsinn voll eingebrochen sind. Ich muss, wie viele, fehlende Finanzmittel durch Arbeitskraft ersetzen.

Wie müsste also die “if”-Kondition korrekt in das JS eingefügt werden, um das Backend-Tracking zu verhindern?

Nochmal zurück auf Anfang. Es geht dir nur um deine Sitzungen wenn du im Editor was änderst.

Was du machen könntest. Für viele Browser gibt es User Agent Swicher. Für Firefox z.B. https://addons.mozilla.org/de/firefox/addon/uaswitcher/

Hier kann man dann einen eigenen User Agent definieren.
Wenn du da also z.B. “Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0 - TOM” reinschreibst, wird das beim Seitenaufruf mitgesendet.

In Matomo kannst du dann diesen spezifischen User Agent wieder ausschließen.

Sorry Thomas Zeithaml, aber bring hier jetzt nicht noch mehr drucheinander. Meine Kritik an JS Shortcode hat schon genug verwirrt.

@Confuserix , du machst deinem Nickname alle Ehre! :wink:

Hast du den von mir zuletzt geposteten Trackincode probiert?
Hier nochmal, vollständig mit deinem Trackingcode:

var _paq = window._paq = window._paq || [];
  _paq.push(['disableCookies']);
  _paq.push(['enableHeartBeatTimer', 1]);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://matomo.meine-domain.de/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    // ↓↓↓ Lade die matomo.js nur, wenn URL-Pfad nicht "/administrator"
    if (window.location.pathname.startsWith("/administrator") === false) {
      var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
    }
  })()};
</script>
<noscript><img referrerpolicy="no-referrer-when-downgrade" src="https://matomo.meine-domain.de/matomo.php?idsite=1&amp;rec=1" style="border:0;" alt="" /></noscript>

Einbauen, Domain korrigieren, testen, Rückmeldung.

Also erst mal danke ich dir herzlich für deine Geduld. Ja, ich bin mir bewusst, dass mein Nickname absolut treffend gewählt ist!

Ich hatte bei meinen Versuchen nicht verstanden, dass die if-Bedingung erst nach den “_paq.push([…” Definitionen eingefügt werden muss. Zudem hatte ich ja auch weiterhin im Web gesucht, speziell hier in der Matomo-Doku und noch verwirrendere Dinge gesehen, z.B.:

oder

Jedenfalls habe ich nun exakt deinen Code eingesetzt und sorgfältig die Typo geprüft. Ergebnis ist, dass weiterhin die WYSIWYG-Darstellung getrackt wird. Das könnte nun noch mit der URL zu tun haben, wie sie im Backend bei der Bearbeitung der Seite vom Pagebuilder erstellt wird. Beispiel:
https://meine-domain.de/administrator/index.php?option=com_ajax&templateStyle=12&p=customizer&format=html&site=https%3A%2F%2Fmeine-domain.de%2Fmein-blog

Am Ende der URL wird ja die zu bearbeitende Seite über “&site=https…” aufgerufen. Vielleicht umgeht dies die if-Bedingung, da ja in diesem zusätzlichen URL-Teil “/administrator” nicht vorkommt?

Wenn ich die Netzwerkanalyse des Firefox auf die WYSIWYG-Darstellung im Backend anwende, sehe ich zu Beginn eine 204 Verbindung mit einem ping zu Matomo, dann nach einigen anderen Verbindungen eine 200 Verbindung zu Matomo.js und zum Schluss wird noch mal eine 204-Verbindung zu Matomo aufgebaut.

Ich habe auch kurz mit einer anderen if-Kondition experimentiert, die aus dem zweiten Link zu einer Matomo-Forendiskussion stammt:

if (!window.location.pathname.match("/administrator") === false)

Damit trackt gar nix mehr, egal ob Front- oder Backend. Ebenso wie bei den folgenden beiden Varianten, wo nix mehr trackt:

if (!window.location.pathname.match("/administrator")
if (window.location.pathname.match("/administrator")

und auch ein Versuch mit einem anderen Teil der Backend-URL und RegEx schlug fehl und führte zum Ausfall des ganzen Tracking:

if (window.location.pathname.match(/site=/) === false)

Ja stimmt, zu Beginn dieses Threads habe ich mich ungeschickt angestellt. Aber jetzt sollte es doch eigentlich funktionieren?

Leider kenne ich den YooTheme Pagebuilder nicht. Deinen letzten Beschreibungen nach ist es wohl so, dass dieser die zu gestaltende Website komplett anzeigt, also mit Tracking Code. Dies eventuell als Iframe? Somit funktioniert die Sache mit der if-Regelung nicht, weil sie nicht im Iframe greift.

Habe jetzt mal nach dem YooTheme Pagebuilder geschaut. Das ist kein herkömmlicher WYSIWIG. Es werden damit nur Themes, also das Layout gestaltet. Es sieht so aus wie vermutet, dass die Website als Iframe angezeigt wird. Das ist dann so, als wenn du die Website tatsächlich besuchst. Also zum Beispiel
https:://meine-domain.de/mein-blog
Da hilft nur ein Cookie setzen um die eigenen Besuche nicht zu tracken, so wie hier als Antwort beschrieben:

Oder Lösungen wie von Thomas Zeithaml beschrieben benutzen.

Es gibt noch einen letzten Versuch die Sache easy mit dem Matomo Tracking Code und einer If-Regel zu lösen, indem geprüft wird, ob die Website in einem Iframe geladen wird. Wenn ja, dann kein Tracking. Wenn nicht, dann Tracking.
Hier der/dein Code:

var _paq = window._paq = window._paq || [];
  _paq.push(['disableCookies']);
  _paq.push(['enableHeartBeatTimer', 1]);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://matomo.meine-domain.de/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    // ↓↓↓ Lade die matomo.js nur, wenn die Webpage nicht als Iframe geladen wird.
    if ((window.self === window.top) === true) {
      var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
    }
  })()};
</script>
<noscript><img referrerpolicy="no-referrer-when-downgrade" src="https://matomo.meine-domain.de/matomo.php?idsite=1&amp;rec=1" style="border:0;" alt="" /></noscript>

Einbauen, Domain korrigieren, testen, Rückmeldung.

1 Like

HERZLICHEN DANK DIR

Das war’s! Habs getestet durch Kontrolle der Netzwerkanalyse als auch durch Prüfung in Matomo selbst, ob getrackt wird.

Endlich kein Tracking mehr im Backend.

Dir wünsche ich ein angenehmes, erholsames Wochenende!