One tracking hit. Every Matomo site that needs it.
Fan out a single request to multiple site IDs server-side — no duplicate trackers, no race conditions, no ad-blocker fragility.
Latest v2.0.2
One tracker instead of many
Track page sections into different Matomo sites with a single request and an additive idsites parameter — the server does the fan-out.
Server-side reliability
No client-side tracker duplication: fewer requests, shared visitor identity, immune to ad-blocker quirks.
Fully backwards compatible
Requests without idsites behave exactly as before. Adopt it page by page, at your pace.
Click to enlarge
Only where you want fan-out: add idsites=3,5 to those requests. Everything else keeps working unchanged.
A GDPR gate on the primary site lets you declare that its visitors' consent covers all allowlisted sites — an explicit, auditable switch.
Fan-out happens server-side; with QueuedTracking the clones are queued independently, keeping request latency flat.
-
01
Download the Feinwerk connector and unzip it into your Matomo's
plugins/directory, then activate it. - 02 Open its settings and set the marketplace URL and your instance token.
- 03 Open the Feinwerk Plugins screen, find TrackingRouter, and click Install.
Matomo TrackingRouter
Server-side fan-out of a single tracking hit to multiple Matomo Site IDs.
Use Case
When a single web page has sections that should be tracked in different Matomo profiles (e.g., section A → site 1, section B → site 2, section C → sites 1 + 3), the conventional approach uses multiple client-side Matomo trackers. That approach has request overhead, race conditions, AdBlocker fragility, and cookie-domain conflicts.
This plugin lets the client send one tracker request with an additive parameter idsites=3,5. The server fans it out into one normal request for the primary idsite and one clone per allowed extra site, all sharing the same visitor identity.
Client Wire Format
GET /matomo.php?idsite=1&idsites=3,5&rec=1&_id=<visitorhex>&action_name=…&url=…
idsite=1is Matomo's mandatory primary as today.idsites=3,5is the optional additive extras list. Comma-separated positive integers.- Without
idsites, the request is processed exactly as before — full backward compatibility.
Configuration
In Administration → Websites → Manage → Edit Site → Tracking Router:
| Setting | Default | Purpose |
|---|---|---|
| Allowed extra sites | empty | Multi-select of sites this primary may extend to. Editor must have Admin access to each. |
| Force visitor id across fan-out | on | Derive a cid from primary so all clones share idvisitor |
| Extras share consent domain | off | GDPR gate on the primary — when on, the primary declares that its visitors' consent applies to all sites in its allowlist (single-owner / shared data controller case). When off (default), no clones fire at all. Set once on the primary; receiving sites do not need their own copy of this flag. |
| Forward Ecommerce / Manual Goals / Pings / Custom Dimensions | off | Per-category opt-in to forwarding domain-specific params |
Operational Notes
- Performance: p99 ≈ baseline × (1 + N_extras). With QueuedTracking installed, each clone queues independently. Without queueing, install QueuedTracking once
allowed_extra_sitesaverages > 2. - Multi-node: allowlist changes propagate within
tracker_cache_file_ttl(default 300s) per node. Use shared APCu/Redis backend or./console core:clear-cachesper node. - GDPR: the plugin writes log rows in each allowed site. Receiving sites should share the same data-controller and consent domain. The
extras_share_consent_domainflag on the primary is the explicit operator declaration that this is the case. The default is off — set it on the primary when you are ready for fan-out to start. - CDN: the
matomo.phptracker endpoint must not be CDN-cached. Fan-out happens server-side. - Internal API:
Tracker.newHandleris@ignore-marked in Matomo 5.x. Plugin compatibility is reverified on each Matomo major upgrade.
Composition
- BulkTracking: when a Bulk POST arrives, BulkTracking expands the JSON payload first; this plugin then fans out each inner Request by its own
idsites. - QueuedTracking: clones go into the queue independently. The consumer-side
StalePrimaryGuardisolates race-deleted-site failures.
Limits
MAX_EXTRAS = 10per request (parser hard cap and allowlist save validator).- Single-hop fan-out only (
idsitesis stripped from each clone).
-
v2.0.2 Sep 30, 2026
-
v2.0.1 Sep 26, 2026
-
v2.0.0 Sep 26, 2026
-
v1.1.0 Jul 1, 2026
-
v1.0.13 Jul 1, 2026
-
v1.0.10 Jun 30, 2026
-
v1.0.5 Jun 30, 2026
-
v1.0.4 Jun 30, 2026