Meer data, betere cookies, volledige controle. Stap voor stap uitgelegd van web container tot dataLayer en eigen dashboard. Zonder server-side tagging verlies je gemiddeld 10% tot 30% van je conversiedata. Op social media loopt dit zelfs op tot 100%.
- 1 Wat is Server-side Tagging?
- 2 Waarom Server-side Tagging?
- 3 Web container én server container — je hebt allebei nodig
- 4 Google Analytics 4 via server container instellen
- 5 DataLayer push en GTM events instellen
- 6 GTM script vervangen door eigen subdomein
- 7 Wanneer verbetert de snelheid wél?
- 8 Data naar eigen dashboard sturen
- 9 Conclusie en checklist
1 Wat is Server-side Tagging?
Server-side tagging is een methode waarbij trackingtags worden beheerd op een server in plaats van direct in de browser van de gebruiker. In tegenstelling tot traditionele client-side tagging lopen data-verzoeken bij server-side tagging via een tussenlaag: jouw eigen server. Die server bepaalt wat er met de data gebeurt en waar het naartoe gaat.
In Google Tag Manager werkt dit met twee containers: een web container in de browser en een server container op jouw server.
Dataflow met server-side tagging
Browser
Bezoeker op je site
Web Container
GTM verzamelt data
Jouw Server
Server container verwerkt
GA4 / Data
Data arriveert volledig
2 Waarom Server-side Tagging?
Server-side tagging biedt voordelen op twee vlakken: datakwaliteit en snelheid. Het is wel belangrijk om te begrijpen welke winst waar vandaan komt, want dat verschilt per situatie.
Het GTM script zelf blijft in de browser laden en wordt niet kleiner. Voor GA4 geldt daardoor dat server-side tagging geen snelheidswinst oplevert de web container blijft altijd nodig om browsergedrag te meten. De winst bij GA4 zit puur in betere data, langere cookies en privacy.
Voor andere tracking tools zoals Meta Pixel, LinkedIn Insight Tag en TikTok Pixel ligt dat anders. Die laden nu als zwaar extern JavaScript in de browser. Als je die vervangt door een server-side API koppeling, verdwijnt het script volledig uit de browser. Dat levert wél directe snelheidswinst en een betere pagespeed score op.
| Aspect | Client-side | Server-side |
|---|---|---|
| Adblocker | ✗ Worden geblokkeerd | ✓ Niet herkenbaar |
| Cookie levensduur (Safari) | ✗ Max 7 dagen (ITP) | ✓ Tot 365 dagen |
| IP adres naar Google | ✗ Bezoeker-IP zichtbaar | ✓ Jouw server-IP |
| Controle over data | ✗ Alles gaat direct door | ✓ Jij filtert en bepaalt |
| Pagespeed score via GA4 | – | Verbetert niet web container blijft nodig |
| Pagespeed score via Meta, LinkedIn, etc | ✗ Zware externe scripts | ✓ Scripts verdwijnen volledig |
De juiste verwachting
Server-side tagging met alleen GA4 levert geen snelheidswinst op het GTM script blijft. De winst zit in meer data, betere cookies, privacy en controle. Vervang je ook externe tracking scripts zoals Meta Pixel of LinkedIn door een server-side API, dan verdwijnen die scripts uit de browser en verbetert de Page Speed score wel degelijk.
3 Web container én server container — je hebt allebei nodig
De meest gestelde vraag: “Kan ik de web container verwijderen nu ik een server container heb?” Het antwoord is nee. De twee containers doen fundamenteel verschillende dingen en zijn allebei onmisbaar.
De web container is je “ogen en oren” in de browser. Die ziet wat een bezoeker doet: klikken, scrollen, formulieren invullen, pagina’s bekijken. Een server heeft hier geen zicht op. Zonder de web container kun je dit soort interacties simpelweg niet meten.
De server container is je verwerkingsstation. Die ontvangt de data van de web container via jouw eigen server, filtert of verrijkt hem waar nodig, en stuurt hem door naar de juiste platforms.
Wat je aanpast in de web container
Je verwijdert de web container niet je past hem aan. De Google Tag krijgt een transport_url parameter zodat data via jouw server loopt in plaats van rechtstreeks naar Google.
4 Google Analytics 4 via server container instellen
De basissetup bestaat uit drie onderdelen: de web container aanpassen, en in de server container een client en een tag aanmaken.
Stap 1 — transport_url instellen in de web container
Open je web container en ga naar de Google Tag. Voeg onder Configuratieparameters het volgende toe:
GTM web container – Google tag aanpassen
| Parameternaam | transport_url |
| Waarde | https://gtm.jouwdomein.nl |
| Effect | GA4 data gaat voortaan via jouw server in plaats van rechtstreeks naar Google |
Stap 2 — GA4 client en tag in de server container
De server container heeft standaard al een GA4 client aangemaakt die binnenkomende GA4 data herkent. Je hoeft hier niets aan te veranderen. Wat je wél aanmaakt is een GA4 tag die de data doorstuurt naar Google Analytics.
GTM Server container – Trigger aanmaken
| Type | Aangepast |
| Activeer op | Sommige gebeurtenissen |
| Voorwaarde | Client Name gelijk is aan GA4 |
GTM Server container – GA4 Tag aanmaken
| Type | Google Analytics: GA4 |
| Measurement ID | G-XXXXXXXXXX (jouw GA4 ID) |
| Trigger | De trigger die je zojuist hebt aangemaakt |
Controleer via GA4 Realtime
Ga naar GA4 → Rapporten → Realtime en bezoek je website. Zie je jezelf verschijnen met een page_view event? Dan werkt de volledige keten via jouw server container.
5 DataLayer push en GTM events instellen
Naast standaard pageviews wil je vaak ook specifieke gebruikersacties meten, zoals klikken op een telefoonlink of het openen van een contactformulier. Dit doe je met een dataLayer.push in de code van je website, die GTM vervolgens opvangt.
Hoe een dataLayer push werkt
Een dataLayer.push is een stukje JavaScript dat je op een link of knop plaatst. Wanneer iemand erop klikt, stuurt het een “event” naar GTM met alle informatie die jij meegeeft: de naam van het event, de sector, het type contact en de persoon.
Voorbeeld – telefoonlink met dataLayer push
<!-- Telefoonlink met dataLayer push -->
<a href="tel:+31612345678"
onclick="dataLayer.push({
'event': 'contact_persoon',
‘url’: 'Wonen',
'contact_type': 'phone',
'contact_person': 'Annemiek'
})">
06-12 34 56 78
</a>
<!-- E-maillink met dataLayer push -->
<a href="mailto:annemiek@domein.nl"
onclick="dataLayer.push({
'event': 'contact_persoon',
‘url’: 'Wonen',
'contact_type': 'mail',
'contact_person': 'Annemiek'
})">
annemiek@domein.nl
</a>
Wat je in de web container instelt
GTM moet drie dingen weten: welke variabelen er binnenkomen, wanneer het event afgaat (trigger) en wat er mee moet gebeuren (tag).
GTM Web container – Stap 1: Data Layer variabelen aanmaken
| Variabele 1 | Naam: dlv – sector · Type: Data Layer-variabele · Laagnaam: sector |
| Variabele 2 | Naam: dlv – contact_type · Type: Data Layer-variabele · Laagnaam: contact_type |
| Variabele 3 | Naam: dlv – contact_person · Type: Data Layer-variabele · Laagnaam: contact_person |
GTM Web container – Stap 2: Trigger aanmaken
| Type | Aangepaste gebeurtenis |
| Gebeurtenisnaam | contact_persoon |
| Activeert op | Alle aangepaste gebeurtenissen |
GTM Web container – Stap 3: GA4 Event tag aanmaken
| Type | Google Analytics: GA4-gebeurtenis |
| Gebeurtenisnaam | contact_persoon |
| Parameters | sector → {{dlv – sector}} contact_type → {{dlv – contact_type}} contact_person → {{dlv – contact_person}} |
| Trigger | De trigger die je zojuist hebt aangemaakt |
Slim instellen: één keer, altijd werkt
Zet de dataLayer.push op de links in je website met de juiste waarden per persoon en sector. GTM hoeft daarna nooit meer aangepast te worden. Nieuwe contactpersoon toevoegen? Alleen de HTML aanpassen — GTM doet automatisch de rest.
6 GTM script vervangen door eigen subdomein
Data loopt nu via jouw server, maar het GTM script zelf laadt nog steeds van googletagmanager.com. Adblockers herkennen dit adres en kunnen het script volledig blokkeren. De oplossing: laad het script ook via jouw eigen subdomein.
1 GTM Web Container Client aanmaken in server container
Ga naar Clients → Nieuw → Google Tag Manager: Web Container. Voeg je web container ID toe onder Toegestane container-IDs. Publiceer daarna de server container.
2 GTM snippet op je website aanpassen
Je developer vervangt het bestaande GTM script door onderstaande versie. Alleen het domein verandert — het web container ID blijft hetzelfde.
3 Controleer via Network tab
Open DevTools (F12) → Network. Refresh de pagina. Je ziet nu een verzoek naar jouw eigen subdomein met status 200. Dan is alles correct.
Plaatsen in <head>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){
w[l]=w[l]||[];
w[l].push({'gtm.start':new Date().getTime(),
event:'gtm.js'});
var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),
dl=l!='dataLayer'?'&l='+l:'';
j.async=true;
j.src='https://gtm.jouwdomein.nl/gtm.js?id='+i+dl;
f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
<!-- End Google Tag Manager -->
Direct na <body> tag
<!-- Google Tag Manager (noscript) -->
<noscript><iframe
src="https://gtm.jouwdomein.nl/ns.html?id=GTM-XXXXXXX"
height="0" width="0"
style="display:none;visibility:hidden"
></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
Let op voor je developer
Vervang gtm.jouwdomein.nl door het geconfigureerde subdomein en GTM-XXXXXXX door het ID van de web container. Gebruik nooit het server container ID hier.
7 Wanneer verbetert de snelheid wél?
Zoals eerder gezegd: het GTM script zelf blijft aanwezig in de browser en wordt niet kleiner. De Lighthouse score verbetert dus niet direct door server-side tagging in te stellen. Maar er is wel degelijk snelheidswinst te behalen — op het moment dat je externe tracking scripts kunt vervangen door server-side alternatieven.
Elk tracking script dat je volledig uit de browser verwijdert scheelt laadtijd, requests en browserbelasting. Dat is waar de echte snelheidswinst vandaan komt.
Meta Pixel (fbevents.js)
Vervang de client-side pixel volledig door de Meta Conversions API in de server container. In GTM installeer je de Facebook Conversions API template vanuit de Community Template Gallery en vul je Pixel ID en Access Token in. Verwijder daarna de pixel uit de web container — dan verdwijnt dit script volledig uit de browser.
Grote snelheidswinst
Google Ads remarketing script
De Google Ads conversietag in je web container kun je vervangen door een Google Ads Conversion Tracking tag in de server container. Die ontvangt de conversie-events via de bestaande GA4 datastroom en stuurt ze server-side door naar Google Ads. Hiervoor heb je alleen je Conversion ID en Conversion Label nodig.
Minder scripts in browser
LinkedIn Insight Tag
De LinkedIn Insight Tag laadt een extern script van snap.licdn.com. Je kunt dit vervangen met een HTTP Request tag in de server container die conversie-events doorstuurt naar de LinkedIn Conversions API. Hiervoor heb je een LinkedIn Partner ID en een toegangstoken nodig uit LinkedIn Campaign Manager.
Extern script verdwijnt
TikTok Pixel
De TikTok Pixel laadt een extern script dat je vervangt door de TikTok Events API. In de server container installeer je de TikTok template vanuit de Community Template Gallery en koppel je je Pixel ID met een Events API Access Token. Verwijder daarna de client-side pixel tag uit de web container.
Geen extern script meer
Hotjar
Hotjar is een ander geval: het script zelf (voor heatmaps en sessie-opnames) moet in de browser blijven omdat het browsergedrag registreert. Wat je wél server-side kunt doen is Hotjar Events API gebruiken voor conversie-events en specifieke triggers, maar het volledige Hotjar script kun je niet elimineren.
Gedeeltelijk mogelijk
De vuistregel
Elk extern script dat je volledig vervangt door een server-side API levert directe laadtijdwinst op. Hoe meer externe scripts je elimineert, hoe groter het verschil in Lighthouse en Core Web Vitals. Begin met de zwaarste scripts: Meta Pixel en Google Ads zijn in de meeste gevallen de grootste winnaars.
8 Data naar eigen dashboard sturen
Naast GA4 kun je events ook rechtstreeks naar je eigen database sturen. Dit geeft je volledige onafhankelijkheid van Google en de mogelijkheid om data precies zo te tonen en analyseren als jij wilt in een eigen portal.
Hoe het werkt
In de server container maak je een extra HTTP Request tag aan die bij elk event een POST verstuurt naar een endpoint op jouw eigen server. Je developer bouwt dat endpoint en slaat de data op in jullie database.
GTM Server container – HTTP Request tag voor eigen dashboard
| Type | HTTP Request |
| URL | https://portal.jouwdomein.nl/api/tracking |
| Methode | POST |
| Header | Content-Type: application/json |
| Trigger | Zelfde als GA4 trigger — of een aparte trigger voor specifieke events |
Wat de server naar het endpoint stuurt
De body van het POST verzoek bevat alle informatie die je in je dashboard wilt tonen. Hier een voorbeeld voor het bijhouden van contactklikken:
Request body – JSON
{
"event": "contact_persoon",
"sector": "{{sector}}",
"contact_type": "{{contact_type}}",
"contact_person": "{{contact_person}}",
"page": "{{Page URL}}",
"timestamp": "{{Request Time}}",
"session_id": "{{ga_session_id}}"
}
Wat je developer nodig heeft
Je developer bouwt een POST endpoint dat de binnenkomende JSON opslaat in de database. Hier de minimale tabelstructuur die hij nodig heeft:
Database structuur
-- Tabel voor alle tracking events
CREATE TABLE tracking_events (
id INT AUTO_INCREMENT PRIMARY KEY,
event VARCHAR(80),
sector VARCHAR(120),
contact_type VARCHAR(30),
contact_person VARCHAR(120),
page VARCHAR(500),
session_id VARCHAR(100),
timestamp DATETIME,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel voor opgeslagen AI gesprekken (optioneel)
CREATE TABLE conversations (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
title VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
conversation_id INT,
role ENUM('user', 'assistant'),
content TEXT,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Tip: begin met GA4 Data API
Voor historische data als pageviews en sessies hoef je niets extra in te stellen. Gebruik de Google Analytics Data API v1 met een Service Account om bestaande GA4 data in je eigen database op te slaan. Dit is de snelste manier om je dashboard te vullen zonder extra tracking te bouwen.
9 Conclusie en checklist
Server-side tagging via GTM is geen snelheidsoplossing — het is een data- en privacyoplossing. De winst zit in meer volledige data, betere cookies, privacy en controle. De echte snelheidswinst komt pas wanneer je externe scripts één voor één vervangt door server-side API koppelingen.