
Server-Side Tagging with GTM: Why Migrate and How to Start
Client-side tracking loses precision every year. Ad blockers, Apple's ITP, browser restrictions: between 20 and 40% of your conversions aren't being tracked if you haven't migrated to server-side. This guide explains why to migrate, what it concretely changes on your numbers, and how to start without DevOps expertise.
The Client-Side Tracking Problem in 2025
Client-side tracking (via JavaScript in the browser) is under attack on 4 fronts:
**1. Ad and tracker blockers** uBlock Origin, Brave, Firefox Enhanced Tracking Protection: between 30 and 40% of internet users actively block third-party tracking scripts. Google Analytics, Meta Pixel, LinkedIn Insight Tag: all blocked.
**2. Apple's Intelligent Tracking Prevention (ITP)** Safari limits the lifespan of JavaScript cookies to 7 days (1 day for referral cookies). On iOS (which forces Safari as the rendering engine), conversion cookies are lost after 7 days.
**3. Third-party cookie deprecation** Chrome ultimately kept third-party cookies, but under increasing regulatory pressure. Firefox and Safari already block them. The long-term trend is clear.
**4. Latency and performance** Every tracking script added to the browser slows your site. 10 GTM tags = 200-500ms additional latency that impacts user experience and SEO.
**Concrete impact:** a Simo Ahava study (2023) shows that client-side tracking misses an average of 20-35% of conversions on iOS Safari audiences. If you spend $10,000/month on Google Ads, you're making optimization decisions based on incomplete data.
How Server-Side Tagging Works
Instead of sending data directly from the browser to Google Analytics, Meta, and Google Ads, you interpose an intermediate server that you control.
**Client-side architecture (current for most):** User browser → JS scripts → Google Analytics / Meta Pixel / Google Ads
**Server-side architecture:** User browser → your GTM server → Google Analytics / Meta Pixel / Google Ads
**Benefits of server-side architecture:**
1. **Bypassing blockers**: blockers target known third-party domains (google-analytics.com, connect.facebook.net). Your GTM server can run on your own domain (analytics.yoursite.com) and isn't blocked.
2. **Long-lived first-party cookies**: your server can write first-party cookies (httpOnly, Secure) with a lifespan of 365 days or more. Bypasses ITP.
3. **Data control**: you decide what data is sent to which services. GDPR compliance is easier.
4. **Performance**: tracking scripts run on the server, not in the browser. The site is faster.
Prerequisites and Costs
**Technical prerequisites:** - A Google Cloud Platform account (or AWS, or Azure) - A domain name and DNS access - Google Tag Manager (standard version, no additional cost) - 4-8 hours of initial configuration (or hire a provider)
**Infrastructure costs:**
Option 1: Google Cloud Run (recommended for starting) - Estimated cost: $5-15/month for a site with 50,000-200,000 sessions/month - Usage-based billing - Easy startup from GTM (Google offers a guided configuration)
Option 2: Dedicated server (VPS) - Estimated cost: $20-40/month (Hetzner, DigitalOcean, Linode) - More control, slightly more complex - Recommended for volumes > 500,000 sessions/month
Option 3: SaaS solutions (Stape.io, Elevar) - Cost: $40-200/month depending on volume - No server configuration: 100% interface management - Recommended if you don't have technical resources
**Expected ROI:** if you spend more than $3,000/month on paid ads, the server-side migration is generally paid back in 2-3 months through improved attribution and bidding decisions.
The 6 Migration Steps
**Step 1: Create the server-side container in GTM**
In GTM: New container > Type: Server Google offers automated configuration toward Google Cloud Run.
**Step 2: Configure the subdomain**
Point a subdomain (e.g., tag.yoursite.com) to your GTM server. Configure the SSL certificate. Test that the server responds correctly.
**Step 3: Migrate essential tags**
Migration priority: 1. GA4 (server-side client available natively in GTM) 2. Google Ads Conversion Tracking 3. Meta Pixel (via Conversions API) 4. Other analytics or remarketing tags
**Step 4: Configure first-party cookies**
Create a GTM variable to generate and store a first-party user cookie on your domain. This cookie survives ITP restrictions.
**Step 5: Enable Meta Conversions API**
Meta CAPI must be configured server-side to work. Make sure event_id is shared between the browser Pixel and CAPI to avoid double counting.
**Step 6: Verify and compare volumes**
Compare client-side vs server-side data for 2-4 weeks. You should see an increase of 10-30% in tracked events. If you see a decrease, something isn't working.
Results Observed After Migration
Based on my client migrations:
**Tracked conversion volume:** - Average increase: +18 to +32% of tracked conversions - Mainly on Safari audiences (iOS + macOS) - Visible impact within 2-3 weeks
**Impact on Google Ads bidding:** More conversion data = better Smart Bidding learning. On accounts where I've migrated, ROAS improved 12-25% in the 4 weeks following migration (effect of improved bidding data).
**Impact on reporting:** GA4 reports show more sessions and conversions. Don't confuse this increase with a real performance improvement: you're simply seeing what already existed but wasn't being tracked.
**Real case:** fashion e-commerce, $15,000/month budget, server-side migration in November 2024. Tracked conversions: +24%. Smart Bidding ROAS: +19% in the following 5 weeks. Migration ROI (infrastructure + setup cost) achieved in 6 weeks.
Key Takeaways
- Client-side tracking loses 20-35% of conversions on Safari iOS due to ITP and blockers.
- Server-side tagging interposes your own server between the browser and analytics tools.
- Costs: $5-15/month on Google Cloud Run for 50-200k sessions, or $40-200 on SaaS.
- Migration in 6 steps: GTM server container, subdomain, essential tags, first-party cookies, Meta CAPI, verification.
- Observed impact: +18 to +32% tracked conversions, +12-25% ROAS in the following 4 weeks.
This article is based on episode 0 of the podcast
Listen to the full version with Alexia and Maxence to dive even deeper.