Introduction
When we talk about server-side tracking, most people think of server-side tag managers like GTM SS or Adobe Edge. But you don’t necessarily need a TMS — it’s totally possible to send direct server-to-vendor HTTP calls using basic POST
or GET
requests.
Let’s compare how it works across 3 key platforms: Google Analytics 4, Adobe Analytics, and Matomo.
🟢 Google Analytics 4 – Measurement Protocol v2
GA4 provides a dedicated server-side endpoint to send events directly.
- Endpoint:
POST https://www.google-analytics.com/mp/collect
- Required parameters: ParamDescription
client_id
Unique client ID (from the_ga
cookie)user_id
Optional user ID for signed-in usersevents
Array of events with name + paramstimestamp_micros
Optional microsecond timestamp - Key point:
Make sure to extractclient_id
from the frontend (cookie or localStorage) and send it alongside your server event. Otherwise, GA4 won’t link it to the session properly. - Use cases:
Backend transactions, confirmation emails, or pure back-office actions (e.g. ERP updates).
🔵 Adobe Analytics – Direct HTTP Tracking
Adobe also allows direct HTTP requests, although it’s slightly more legacy in format.
- Endpoint:
GET
orPOST
to:https://<trackingServer>.omtrdc.net/b/ss/<reportSuite>/0/
- Required parameters: ParamDescription
vid
Visitor ID (manually generated or passed from ECID)mid
Optional Experience Cloud ID (ECID)pageName
Page name or hit labelevents
Event string, e.g.purchase
products
Product string in Adobe format - Key point:
Adobe’s visitor reconciliation depends on a properly managedvid
or ECID. Ideally, the ECID is set client-side and passed to the backend. - Use cases:
Hybrid setups with web + native apps, loyalty actions, post-login behaviors tracked server-side.
🟠 Matomo – Tracking API (Simple & Flexible)
Matomo provides a very flexible HTTP API with both GET
and POST
options.
- Endpoint:
https://matomo.example.com/matomo.php
- Required parameters: ParamDescription
idsite
Matomo site IDcid
Visitor ID (manually generated UUID)uid
Optional user IDe_c
Event categorye_a
Event actione_n
Event namee_v
Event value (optional)url
Page URL associated with the event - Key point:
Like GA4, you should extract a visitor ID (cid
) on the frontend and propagate it server-side to preserve continuity. - Use cases:
GDPR-friendly tracking, self-hosted analytics, and advanced control use cases.
🎯 Best Practices for Native Server-Side Tracking
✅ Always pass a persistent identifier:
client_id
for GA4vid
ormid
for Adobecid
oruid
for Matomo
✅ Sync that ID from your frontend:
- Read it from a cookie, localStorage, or via header injection
✅ Add timestamps if possible:
- To preserve event ordering, especially when logging backend actions asynchronously
✅ Log and document:
- Keep a copy of what you’re sending (for debug + compliance)
✅ When to use native server-side tracking?
‣ You’re working on backend-driven logic (e.g. payment confirmation, account creation)
‣ You need full control over what’s sent
‣ You want to avoid client JS execution (privacy, ad blockers, security)
‣ You’re building fraud detection, reconciliation, or scoring mechanisms
‣ You’re looking for a lightweight alternative to full server-side TMS infrastructures
Leave a Reply