Chessio_Matomo is a Matomo web analytics module for the Magento 2 eCommerce platform. Matomo is an extensible free/libre analytics tool that can be self-hosted, giving you complete data ownership. Chessio_Matomo lets you integrate Matomo with your Magento 2 store front. It is a fork of Henhed_Piwik.
To install Chessio_Matomo, download and extract the main zip archive and move the extracted folder to app/code/Chessio/Matomo in your Magento 2 installation directory.
unzip magento2-matomo-main.zip
mkdir app/code/Chessio
mv magento2-matomo-main app/code/Chessio/Matomo
Alternatively, you can clone the Chessio_Matomo Git repository into app/code/Chessio_Matomo.
git clone https://github.com/fnogatz/magento2-matomo.git app/code/Chessio/Matomo
Or, if you prefer, install it using Composer.
composer require chessio/module-matomo
Finally, enable the module with the Magento CLI tool.
php bin/magento module:enable Chessio_Matomo --clear-static-content
NOTE: If you're using a Magento version prior to 2.2 you'll need to stick to the 1.x releases of the original Henhed_Piwik.
Once installed, configuration options can be found in the Magento 2 administration panel under Stores/Configuration/Sales/Matomo API. To start tracking, set Enable Tracking to Yes, enter the Hostname of your Matomo installation and click Save Config. If you have multiple websites in the same Matomo installation, make sure the Site ID configured in Magento is correct.
You can use the Matomo Tag Manager instead of Matomo directly. Set the configuration Enable Matomo Tag Manager Container to yes and set the Container Script Path. For details on how to configure the Matomo Tag Manager, to track ecommerce events, see doc/tag-manager.md
If you need to send some custom information to your Matomo server, Chessio_Matomo lets you do so using event observers.
To set custom data on each page, use the matomo_track_page_view_before
event. A tracker instance will be passed along with the event object to your observer's execute
method.
public function execute(\Magento\Framework\Event\Observer $observer)
{
$tracker = $observer->getEvent()->getTracker();
/** @var \Chessio\Matomo\Model\Tracker $tracker */
$tracker->setDocumentTitle('My Custom Title');
}
If you only want to add data under some specific circumstance, find a suitable event and request the tracker singleton in your observer's constructor. Store the tracker in a class member variable for later use in the execute
method.
public function __construct(\Chessio\Matomo\Model\Tracker $matomoTracker)
{
$this->_matomoTracker = $matomoTracker;
}
Beware of tracking user specific information on the server side as it will most likely cause caching problems. Instead, use Javascript to retrieve the user data from a cookie, localStorage or some Ajax request and then push the data to Matomo using either the Chessio_Matomo JS component...
require(['Chessio_Matomo/js/tracker'], function (trackerComponent) {
trackerComponent.getTracker().done(function (tracker) {
// Do something with tracker
});
});
... or the vanilla Matomo approach:
var _paq = _paq || [];
_paq.push(['setDocumentTitle', 'My Custom Title']);
See the Matomo Developer Docs or the \Chessio\Matomo\Model\Tracker source code for a list of all methods available in the Tracking API.