What Matomo traffic looks like
Matomo is typically self-hosted, so there is no fixed tracking hostname. Detection keys on the path instead.
- Endpoint pattern
- Hits go to
/matomo.phpon any domain (legacy installs still use/piwik.php); the library loads as/matomo.jsor/piwik.js - Transport
- GET with a long query string, or POST when the payload outgrows URL limits
- Key parameters
idsitenumeric site ID ·rec=1marks a real tracking request ·action_name/urlpage title and URL ·e_c/e_a/e_n/e_vevent category, action, name, value ·_idvisitor ID (16 hex chars),_idn=1new visitor,uiduser ID- E-commerce
ec_items,revenue,idgoal=0carry e-commerce order payloads;idgoal=Nfor goal conversions- Payload
ca=1flags custom actions;pingupdates visit duration without logging a new action; heartbeat pings, media analytics (ma_*), and form analytics (fa_*) share the endpoint. Raw request counts overstate "events" unless classified by parameter
Debugging Matomo with Event Watcher
- Identifies Matomo by those path patterns on any domain: no hostname list needed for self-hosted installs;
piwik.proURLs are explicitly excluded and detected as Piwik PRO instead. - The parser derives a meaningful event name per hit: page view, event, goal, e-commerce order, or heartbeat.
- Groups the parameter soup into readable sections: visitor identifiers, page context, browser features, e-commerce items, plus media, form-analytics, and request internals when present.
- The difference between an event hit and a heartbeat ping is visible at stream level, not after reading forty query parameters.
Matomo and consent
Analytics consentThe extension checks Matomo against the analytics consent category. Many installs run cookieless (requireConsent() / disableCookies() in the tracker) for consent-free operation in some jurisdictions. On the wire, hits show no persistent _id reused across visits.
Worst case is the safe case: a hit before the CMP grants analytics is marked pre-consent, exactly the evidence to confirm whether the consent-free configuration is actually active, or whether the default cookie-setting tracker fired early.
Common debugging scenarios
- Visits look double-counted. Compare
_idacross hits. A visitor ID changing on every page means cookies are blocked or disabled while the config assumes them. - Goal fires but no e-commerce data. The parsed e-commerce section shows
ec_items; an empty items array alongsideidgoal=0means the order push was incomplete. - Event category/action swapped. Read
e_c/e_a/e_ndirectly in the parsed hit instead of reconstructing them from reports. - Verifying cookieless mode before launch. Trigger a page view pre-consent and check whether the hit carries a reused visitor ID.
- Matomo and Piwik PRO on the same site during a migration. The extension separates them. Compare against Piwik PRO hits side by side in Grouped view.