Skip to content

Symfony Bundle with twig-function for the Matomo (fka Piwik) tracking code


Notifications You must be signed in to change notification settings


Repository files navigation

webfactory Logo WebfactoryPiwikBundle

Run Tests Coverage Status

A Symfony Bundle that helps you to use the Matomo (formerly known as Piwik) Open Analytics Platform with your project.

It contains a Twig function that can insert the tracking code into your website. Plus, you can turn it off with a simple configuration switch so you don't track your dev environment.


composer require webfactory/piwik-bundle

And enable the bundle in app/AppKernel.php:

// app/AppKernel.php

public function registerBundles()
    $bundles = array(
        // ...
        new Webfactory\Bundle\PiwikBundle\WebfactoryPiwikBundle(),


Somewhere in your views, right before the closing </body> tag, insert

{{ piwik_code() }}

This will add the appropriate Matomo tracking code as described in the API reference.


You can configure the bundle in your config.yml. Full Example:

    # Required, no default. Must be set to the site id found in the Matomo control panel
    site_id: 1
    # Required. no default. Hostname and path to the Matomo host.
    piwik_host: my.piwik.hostname
    # Optional, has default. Usually, you only want to include the tracking code in a production environment
    disabled: '%kernel.debug%'
    # Optional, has default. Path to the tracking script on the host.
    tracker_path: "/js/"
    # Optional, has default. Disable cookies in favor of GDPR
    # &
    disable_cookies: true

Add calls to the JavaScript tracker API

The JavaScript tracking API provides a lot of methods for setting the page name, tracking search results, using custom variables and much more.

The generic piwik() function allows you to control the _paq variable and add additional API calls to it. For example, in your Twig template, you can write

    <!-- Somewhere in your HTML, not necessarily at the end -->
    {{ piwik("setDocumentTitle", document.title) }}
    {{ piwik("trackGoal", 1) }}

    <!-- Then, at the end: -->
    {{ piwik_code() }}

Note that when you call trackSiteSearch, this will automatically disable the trackPageView call made by default. This is the recommended behaviour.

Credits, Copyright and License

This code was written by webfactory GmbH, Bonn, Germany. We're a software development agency with a focus on PHP (mostly Symfony). If you're a developer looking for new challenges, we'd like to hear from you!

Copyright 2012 – 2020 webfactory GmbH, Bonn. Code released under the MIT license.