Fehler bei Matomo Tracking

Hallo, ich habe einen Matomo Server auf dem ich mehrere Webseiten tracken möchte. Die Webseiten binde ich ganz normal mit dem Tracking Code ein.

<!-- BEGIN Matomo -->
  <script type="text/javascript">
    var _paq = window._paq || []
    //_paq.push(['disableCookies']);												// Ab sofort verteilt Matomo keine Kekse (Cookies) mehr
    _paq.push(['setVisitorCookieTimeout', '34186669']);
    _paq.push(['setSessionCookieTimeout', '1800']);
    _paq.push(['setReferralCookieTimeout', '15778463']);
	
	_paq.push(['enableHeartBeatTimer', 5]);											// Matomo bekommt Herzrasen: Der "Herzschlag" von Matomo wird auf alle 5 Sekunden erhoeht
    _paq.push(["setDocumentTitle", document.domain + "/" + document.title]);		// Domain der Seite beim Tracken dem Seitentitel voranstellen
	_paq.push(["setCookieDomain", "*.xxx.de"]);								// Besucher aufzeichnen auf allen Subdomains - Domain eintragen
	_paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
	
    function embedTrackingCode() {
    var u = "https://matomo.xxx.de/";
    _paq.push(['setTrackerUrl', u + 'matomo.php']);
    _paq.push(['setSiteId', '4']);													// Bei "X" die ID der Seite eintragen, die getrackt werden soll
    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);
    }

    setTimeout(function () {
    embedTrackingCode();															// Die Matomo Tracking Funktion wird ausgefuehrt
    }, 5)																			// Die 5 steht fuer die Millisekundenanzahl in der die Funktion ausgefuehrt wird (kann man natuerlich beliebig anpassen)
  </script>
  <!-- END Matomo -->

Jetzt bekomme ich aber folgenden Fehler auf meinen Seiten angezeigt:

The method setTrackerUrl is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation:

Verstehe die Dokumentation dazu irgendwie nicht richtig.
Was ist genau das Problem und vorallem was muss ich am Coder ändern?

LG

Hallo,

Die einzige Begründung, die ich mir vorstellen kann, ist, dass irgendwo embedTrackingCode() ein zweites Mal aufgerufen wird.

Denn Sinn der setTimeout-Funktion verstehe ich aber überhaupt nicht. 5ms machen überhaupt keinen Unterschied und selbst wenn man es höher stellt, sollte es nichts verändern.

Das Matomo-Script ist sowohl deferred als auch async und wird somit vom Browser erst geladen, wenn die Webseite voll benutzbar ist.

Ok, dann nehme ich das wieder raus. Dann wäre das Problem ja auch beseitigt oder?
Müsste ich sonst noch was wichtiges beachten und einbinden in meinem Code?

LG

Übrigends das mit dem TimeOut kommt aus der Matomo Doku:

https://matomo.org/blog/2017/04/different-ways-embedding-piwik-tracking-code-faster-website-performance/

1 Like

Also warum stehts dann da?

Hallo,

Ich muss zugeben, an den Blogpost, konnte ich mich nicht mehr erinnern. Den Grund dafür weiß ich auch nicht, aber es sollte auf jeden Fall keinen Fehler erzeugen (solange man embedTrackingCode() nur genau einmal aufruft.

Hi Lukas, jetzt weiss ich glaub ich wo der Fehler liegt, aber nicht wie ich ihn umgehen kann :frowning:
Es ist nicht der Code sondern beim Laden der Webseite wird sofort das matomo.js File geladen. Danach kommt aber erst der Cookie Banner von Borlabs der eigentlich genau das unterbinden soll erst wenn die Statistiken mit einem OptIn versehen werden soll das Script geladen werden. Wenn ich jetzt das ganzue bestätige wird das Script nochmals geladen. Deswegen wohl der doppelte aufruf weil der Code in Borlabs nochmals steht. Hattest du schonmal das Problem und muss ich den Code zwingend in Borlabs verwenden? Weisst du das?

Hallo,

Na das erklärt schon mal einiges. Wenn du eh einen Banner verwendest, der Matomo für sich lädt, dann brauchst du ja deinen eigenen Tracking code ja nicht, oder?

Ja genau das ist die Frage. Vielleicht kann ich meinen einfach in Borlas eintragen wegen ein paar anderen Einstellungen im Code. SRI; Subdomain usw

Du kannst aber es natürlich auch anders herum machen und deine Funktion behalten, das setTimeout entfernen und in Borlabs einstellen (?), dass die Funktion aufgerufen werden soll.

(Disclaimer: Ich habe keine Ahnung, wie das Borlabs plugin funktioniert.)

Ich werde mal den Support von Borlabs anschreiben und nachfragen! Danke

Hallo Lukas, der Support hat geantwortet. Ich kann in dem Borlabs Fenster nur HTML oder JavaScript Code ausführen. Gäbe es also eine Möglichkeit darüber meine .php-Datei anzustossen die den Tracking Code beinhaltet? Oder macht das keinen Sinn und ich schreibe den Tracking Code dort einfach rein und gut?

LG

Hallo,

Das ist doch ganz genau, was du willst: Wenn jemand in Borlabs Matomo akzeptierst, soll ein JavaScript code (nämlich embedTrackingCode()) ausgeführt werden.

Ich habe das Gefühl, dass der Support die Frage falsch verstanden hat, denn mit PHP hat das ganze ja nichts zu tun.

Das funktioniert natürlich auch (ich habe nicht gewusst, ob man einen längeren codeblock oder nur den Namen einer Funktion angeben kann).

Wie meintest du das denn sonst? Ich hätte jetzt entweder direkt den Tracking Code da rein gescrieben oder?? Wie würde die andere Lösung genau aussehen? Kann es mir gerade nicht vorstellen :frowning:

Ansonsten hättest du auch die Funktion direkt in die Seite einbauen können und dann in Borlabs die Funktion aufgerufen. Aber das ist eh umständlicher.

welchen Vorteil hätte das? Ich dachte eigentlich ich könnte die matomo.php die ich über die functions.php im Child aufrufe dann einfach über das Fenster in Borlabs anstosse. Aber wie kann ich in HTML oder JavaScript die matomo.php (steht der Tracking Code drin) aufrufen?
LG

Die matomo.php musst du nie selbst aufrufen. Wenn du den JS Tracking code ausführst, fügt der ein <script> ein, welches matomo.js lädt, welches die Daten sammelt und dann an matomo.php sendet. Du musst also nur den Tracking-Code ausführen.

ok so mche ich es. Jetzt halt noch die Frage ob mit SRI Hash oder nicht :slight_smile: