anatole icon indicating copy to clipboard operation
anatole copied to clipboard

Support Matomo Analytics

Open mrimann opened this issue 2 years ago • 2 comments

Is your feature request related to a problem? Please describe. The docs mention several analytics solutions, but not Matomo (formerly Piwik, an open-source solution to replace Google Analytics and similar).

Describe the solution you'd like If Matomo would be supported "out of the box" (= same as the other existing ones, where one just has to config the tracking-id / URL), that would be great.

Describe alternatives you've considered As an alternative, it would be cool if adding a custom block of tracking-code would be documented instead, then one could use that way (and the template would not need to be extended for a dozen other solutions).

mrimann avatar Dec 26 '22 14:12 mrimann

@mrimann Thanks for your suggestion. Unfortunately, I do not have a test instance of Matomo/Piwik and therefore can't properly implement this feature. If you got it working, feel free to send an PR and I'll merge it.

lxndrblz avatar Mar 26 '23 07:03 lxndrblz

@lxndrblz hmm - if it helps, I could organize an installation of Matomo to test-drive the new feature. May be you could also use https://matomo.org/start-free-analytics-trial/ got get a test installation without hassle.

Code-wise I first thought of "the same way as with Google Analytics" -> e.g. just enter the UA-xxxxx-xx account identifier in the config and let the template render the full block of JavaScript with that account identifier injected. But thinging this through I noticed it could be a little bit trickier to implement:

  • it's not just about a globally unique account identifier
  • the URL needs to be set (because everyone can host Matomo on his/her own server, e.g. https://tracking.mycompany.tld
  • there's a unique number per installation that identifies the tracked website (Matomo can track multiple websites/applications in one single Matomo installation, referring to the single websites/configs by a so called site ID)

As an example, the full tracking-code to be inserted in the HTML-output will look like this (anonymized):

<!-- 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://analytics.DOMAIN.TLD/";
  | _paq.push(['setTrackerUrl', u+'matomo.php']);
  | _paq.push(['setSiteId', 'SITE_ID']);
  | 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 -->

So the question is how to tackle this. I see two variants:

  • Variant A: Do it "same as with Google Analytics", but with two options for the URL and the SITE_ID (and render the rest of the above code block from the template)
  • Variant B: Add a more generic approach to include/render any block of JavaScript in the template's output (this could be used for Matomo's tracking-code or any other snippet that needs to be delivered to the browser) - and just document how to add e.g. Matomo's tracking-code via this way of configuration

I personally prefer variant A as it's the smaller change - but if there's a need for a more generic solution and others are asking for something like variant B, that should absolutely do it, too.

For variant A I might prepare a PR, for variant B I don't know how to implement that properly.

mrimann avatar Mar 28 '23 12:03 mrimann

Great - thanks @lxndrblz !

mrimann avatar Apr 09 '24 07:04 mrimann