If you run ads or track conversions on a WordPress site, you're probably losing 25-35% of your data right now. Here's why and how to fix it with server-side tracking.
The problem with browser-side tracking
Traditional tracking fires JavaScript from the visitor's browser:
Visitor lands on page
→ Browser loads GTM
→ GTM fires GA4 tag
→ GA4 tag sends hit to Google
At every step, something can go wrong:
-
Ad blockers intercept and drop requests to
google-analytics.com,googletagmanager.com,connect.facebook.net - iOS ITP limits cookie lifetime to 7 days (or 1 day for some referrers), breaking attribution
- Cookie consent - visitors who decline tracking generate zero conversion data, even if they convert
In the Netherlands (and most of Western Europe), ad blocker penetration on desktop is 30-40%. Add iOS users and consent refusals, and you're easily missing a third of your conversion events.
What server-side tracking does differently
Server-side tracking moves the data-sending step off the visitor's browser and onto your server:
Visitor lands on page
→ Browser fires lightweight first-party event to YOUR server
→ Your server forwards to Google/Meta endpoints
Because the request originates from your server (not the visitor's browser):
- Ad blockers can't intercept it
- ITP doesn't apply (server-to-server communication)
- Works regardless of visitor consent for first-party data
The standard setup: GTM Server Container
The canonical way to implement server-side tracking is via a Google Tag Manager server container:
- Create a server container in GTM
- Deploy it to a cloud instance (GCP App Engine, Cloud Run, or a third-party provider like Stape)
- Point your GTM web container's GA4 config tag to your server URL instead of directly to Google
- Configure server-side tags for GA4, Google Ads, Meta CAPI
This works well but has real overhead:
- GCP or managed hosting costs (~$10–50/mo)
- GTM server container configuration is non-trivial
- Debugging requires server-side GTM preview mode
- Most WordPress agencies don't have the DevOps capacity
A WordPress-native alternative
We built Easy Server Side Tracking to handle the server-side routing directly from WordPress. No separate server container needed.
How it works under the hood:
The plugin intercepts events at the WordPress level and forwards them via:
- GA4 Measurement Protocol for Google Analytics and Google Ads
- Meta Conversions API (CAPI) for Meta pixels
// Simplified flow
add_action('wp_footer', function() {
// Enqueue lightweight first-party tracker
// (fires to /wp-json/sst/v1/event — your own domain)
});
add_action('rest_api_init', function() {
register_rest_route('sst/v1', '/event', [
'methods' => 'POST',
'callback' => 'sst_forward_event', // forwards to GA4 MP + Meta CAPI
]);
});
The visitor's browser only talks to your own domain. The plugin handles forwarding to Google and Meta server-side.
What gets forwarded:
- GA4 page_view, purchase, add_to_cart, generate_lead, and custom events
- Google Ads conversion events
- Meta PageView, Purchase, Lead, ViewContent
What stays browser-side:
- GTM for non-conversion tags (chat widgets, heatmaps, etc.)
- Your existing GTM web container keeps working in parallel
Results from our client portfolio
We run this across 12 sites at Jacht.Digital (3.9M monthly search impressions, ~370K sessions/month combined):
| Metric | Before | After |
|---|---|---|
| GA4 conversion events | baseline | +28% average |
| Meta purchase events | baseline | +31% average |
| Google Ads conv. recorded | baseline | +24% average |
The recovery varies by site — higher ad blocker rates in tech-heavy audiences (like Optiver's developer recruitment traffic) show larger gains.
Should you use a GTM server container or a plugin?
Both are valid. Here's when each makes sense:
GTM server container:
- You need full flexibility in tag configuration
- You already have DevOps capacity
- You're tracking non-WordPress properties too
- You want the full Google-supported solution
WordPress plugin approach:
- WordPress-only stack
- No dedicated cloud server budget
- Agencies managing multiple client sites (10 domains on one plan)
- You want setup in 30 minutes, not 3 days
Getting started
If you want to try the server-side approach on WordPress:
- Install Easy Server Side Tracking (Free plan with 10,000 events/month. Core plan starts at €10/mo)
- Connect your GA4 Measurement ID and Meta Pixel ID in the plugin settings*
- Enable the events you want to track server-side
- Verify in GA4 DebugView and Meta Events Manager
If you want the full GTM server container approach, Stape.io has the best managed hosting option and their documentation is solid.
* Meta Conversions API (CAPI) for Meta is still WIP
Top comments (0)