« Peut-on faire du Matomo server-side ? » C’est une question que j’entends sur presque tous les projets Matomo. La réponse courte : oui. La réponse utile : tout dépend de ce que vous appelez server-side, car il existe au moins cinq montages différents derrière ce mot, et ils ne résolvent pas le même problème. Certains suppriment totalement le JavaScript du navigateur, d’autres le gardent et changent seulement la destination des hits.

Mal choisi, le montage donne les symptômes classiques : hits géolocalisés dans votre datacenter, « visiteurs uniques » qui sont une seule machine, achats suivis comme des événements, consentement oublié. Ce guide compare les options, puis détaille la Tracking HTTP API.

Les cinq façons de faire du Matomo server-side

Toutes aboutissent au même endroit : une requête HTTP vers votre point de collecte Matomo (matomo.php). Ce qui change, c’est qui envoie la requête et ce qui tourne encore dans le navigateur.

MontageQui envoie le hitJS navigateur encore nécessaire ?Ce que ça résoutCe que ça ne résout pas
Tracking HTTP API, en directVotre backend (tout langage, un simple GET ou POST)Non pour les événements backend. Oui si vous voulez aussi la navigationLes événements qui n’existent que côté serveur : paiements confirmés, remboursements, CRON, webhooksRésolution d’écran, titres de page, interactions client, sauf si vous les passez vous-même. Le consentement
GTM server-side + client MatomoLe navigateur envoie à votre conteneur sGTM, qui relaie vers MatomoOui, le code de suivi Matomo pointé vers le domaine du conteneurUn point de collecte sur votre domaine, plus de contrôle sur ce qui est transmisSupprimer le script navigateur. Vous exploitez en plus un serveur : le conteneur
Tracker proxyLe navigateur envoie à un proxy matomo.php sur votre site, qui relaie vers MatomoOuiCache l’URL de votre serveur Matomo aux sites suivisSupprimer le script navigateur
Log AnalyticsUn script Python qui importe les logs d’accès de votre serveur webNonAnalyse de trafic sans aucun tag, import d’historiquePas de cookies de suivi ni de résolution d’écran

Matomo Tag Manager n’est pas une option server-side : c’est un conteneur côté client. La FAQ de Matomo indique que le server-side tagging via Matomo Tag Manager « n’est pas supporté actuellement ». Matomo documente exactement deux méthodes server-side : la Tracking API depuis votre serveur, et son tag dans un conteneur sGTM (template « Matomo Server-side Client », puis remplacement du domaine Matomo par l’URL du conteneur). En pratique, la plupart de mes montages sont hybrides : le tracker JavaScript pour la navigation, l’API HTTP pour les conversions qui comptent, rattachés au même visiteur.

Pas à pas : envoyer un hit server-side avec la Tracking HTTP API

1. Créer un utilisateur et un token dédiés

Certains paramètres exigent un token_auth : forcer l’IP du visiteur (cip), envoyer une date de plus de 24 heures (cdt), forcer le pays ou la ville. Matomo recommande de créer un utilisateur spécifique à la Tracking API, avec le droit d’écriture sur les seuls sites concernés. Gardez le token côté serveur : il ne doit jamais apparaître dans le code source de la page ni dans une requête du navigateur.

2. Décider comment le hit serveur rejoint la visite navigateur

C’est l’étape que la plupart des implémentations sautent, et c’est pourquoi les hits serveur « flottent » sans source, sans campagne et sans parcours. Vous avez deux clés :

var _paq = window._paq = window._paq || [];
_paq.push([function () {
  var visitorId = this.getVisitorId(); // 16 hex characters
  // send it to your backend with the checkout form or an API call
}]);

Les User ID sont des données personnelles selon Matomo : n’utilisez uid que si votre consentement le couvre.

3. Construire la requête

Voici une commande e-commerce envoyée depuis le backend après confirmation du prestataire de paiement. C’est un POST vers matomo.php, chaque valeur étant encodée par curl :

curl -s -o /dev/null -w "%{http_code}\n" -X POST "https://matomo.example.com/matomo.php" \
  --data-urlencode "idsite=1" --data-urlencode "rec=1" --data-urlencode "send_image=0" \
  --data-urlencode "url=https://shop.example.com/checkout/confirmed" \
  --data-urlencode "cid=5b1d8c3f0a9e7d21" --data-urlencode "uid=customer-48213" \
  --data-urlencode "ua=Mozilla/5.0 (Macintosh; ...) Safari/605.1.15" \
  --data-urlencode "cip=203.0.113.42" --data-urlencode "token_auth=YOUR_TRACKING_USER_TOKEN" \
  --data-urlencode "idgoal=0" --data-urlencode "ec_id=ORD-2026-10457" \
  --data-urlencode 'ec_items=[["SKU-118","Running shoes","Shoes",89.90,1]]' \
  --data-urlencode "revenue=109.70"

Pour les traitements par lots, la Tracking API accepte aussi un POST JSON avec un tableau requests (bulk tracking), dans l’ordre chronologique.

Comment vérifier que ça marche

  1. Le statut HTTP. Avec send_image=0, une requête réussie répond 204 ; sinon 200 et un GIF 1×1. Un 4xx, un 5xx ou un timeout pointe vers l’amont : mauvaise URL, pare-feu, serveur en panne.
  2. Le journal des visites du jour. Retrouvez la visite par User ID ou visitor ID : vous devez voir les pages navigateur d’abord, puis la commande, dans la même visite, avec le bon pays et le bon navigateur. Si la commande est seule dans une visite venant de la ville de votre hébergeur, cip ou ua manque.
  3. Les rapports E-commerce, pas le rapport Événements. Une commande envoyée avec idgoal=0 atterrit dans l’E-commerce. Si vous la trouvez dans Événements, elle a été envoyée comme événement.

Les pièges que je retrouve sans cesse

Conclusion

Le Matomo server-side n’est pas une fonctionnalité unique, c’est un choix de qui envoie le hit. Pour les événements les plus importants, ceux que votre backend connaît avec certitude, envoyez-les depuis le serveur avec la Tracking HTTP API ou un SDK officiel. Passez la vraie IP et le vrai User-Agent, rattachez le hit au visiteur navigateur avec cid ou uid, envoyez les commandes comme des commandes, et vérifiez le journal des visites avant de conclure. Gardez le tracker JavaScript pour la navigation, et le consentement là où il doit être : avant le hit, des deux côtés.

Sources

Pour aller plus loin, lisez la version complète de l’article (en anglais) : Matomo Server-Side Tracking: How to Set It Up (5 Options Compared).

Besoin d’aide sur ce sujet ? Commanders Act et server-side.

Vous doutez de votre tracking ?

Réserver un appel Ou commencez par l’audit analytics gratuit →