TrackingRouter · paid

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

What it does for you
01

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.

02

Server-side reliability

No client-side tracker duplication: fewer requests, shared visitor identity, immune to ad-blocker quirks.

03

Fully backwards compatible

Requests without idsites behave exactly as before. Adopt it page by page, at your pace.

Click to enlarge

Pricing
Monthly
49 € per month
Buy now
Yearly Popular
490 € per year

save 17 % vs. monthly

Buy now
2 Years
784 € for 2 years

save 33 % vs. monthly

Buy now
No payment details needed — the trial license lands right in your account.
Frequently asked questions

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.

Install via the Feinwerk connector
  1. 01 Download the Feinwerk connector and unzip it into your Matomo's plugins/ directory, then activate it.
  2. 02 Open its settings and set the marketplace URL and your instance token.
  3. 03 Open the Feinwerk Plugins screen, find TrackingRouter, and click Install.
Download connector plugin
For the technically curious

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=1 is Matomo's mandatory primary as today.
  • idsites=3,5 is 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_sites averages > 2.
  • Multi-node: allowlist changes propagate within tracker_cache_file_ttl (default 300s) per node. Use shared APCu/Redis backend or ./console core:clear-caches per 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_domain flag 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.php tracker endpoint must not be CDN-cached. Fan-out happens server-side.
  • Internal API: Tracker.newHandler is @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 StalePrimaryGuard isolates race-deleted-site failures.

Limits

  • MAX_EXTRAS = 10 per request (parser hard cap and allowlist save validator).
  • Single-hop fan-out only (idsites is stripped from each clone).