{"id":70555,"date":"2026-05-22T12:04:05","date_gmt":"2026-05-22T12:04:05","guid":{"rendered":"https:\/\/taggrs.io\/welke-platforms-ondersteunen-server-side-google-tag-manager\/"},"modified":"2026-05-22T12:34:09","modified_gmt":"2026-05-22T12:34:09","slug":"which-platforms-support-server-side-gtm","status":"publish","type":"post","link":"https:\/\/taggrs.io\/nl\/which-platforms-support-server-side-gtm\/","title":{"rendered":"Welke platforms ondersteunen server-side Google Tag Manager?"},"content":{"rendered":"\n<p>Server-side Google Tag Manager (sGTM) ondersteunt advertentie- en analyseplatforms zoals GA4, Google Ads, Meta, TikTok, Pinterest, LinkedIn, Snapchat, Klaviyo en ActiveCampaign. E-commerce datalagen zijn beschikbaar voor CMS'en zoals WordPress, Shopify, Lightspeed, Magento, WooCommerce en PrestaShop. Mobiele apps op iOS en Android worden ook ondersteund.<\/p>\n\n\n\n<p>Waar elk platform naartoe gaat (webcontainer, servercontainer of beide) bepaalt <strong>of je conversiegegevens nauwkeurig zijn<\/strong>.<\/p>\n\n\n\n<p>In dit artikel wordt het waarom achter elke plaatsingsbeslissing uitgelegd, wat er kapot gaat als je het fout doet en wat sGTM hostingproviders zoals TAGGRS doen op infrastructuurniveau dat de containerinstallatie alleen niet kan oplossen. En als je je platform(en) al kent, gebruik dan de <strong>interactieve checker<\/strong> hieronder om direct naar de configuratiestappen te gaan. <\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-a-gtm-server-container-and-what-does-it-host\">Wat is een GTM-servercontainer en wat wordt erin gehost?<\/h2>\n\n\n\n<p>Een GTM-servercontainer draait op een gehoste server en voert tags server-to-server uit, los van de browser van de bezoeker. Het werkt naast de standaard GTM webcontainer met behulp van een architectuur met twee containers: <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>webcontainer,<\/strong> die in de browser van de bezoeker draait en client-side tags uitvoert<\/li>\n\n\n\n<li><strong>servercontainer,<\/strong> die draait op een gehoste server (zoals TAGGRS) en tags server-to-server uitvoert.<\/li>\n<\/ol>\n\n\n\n<p>De servercontainer is waar het echte werk gebeurt. Als deze correct is geconfigureerd, worden er first-party cookies geplaatst die meer dan 365 dagen meegaan. En dit is nu belangrijker dan ooit, omdat Safari's ITP het aantal browser-set cookies beperkt tot 7 dagen en Safari vanaf begin 2026 ongeveer 17% van het wereldwijde marktaandeel van browsers vertegenwoordigt. (bron: StatCounter, <a href=\"https:\/\/gs.statcounter.com\/browser-market-share\" target=\"_blank\" rel=\"noopener\">Browser Marktaandeel Wereldwijd<\/a>)   <\/p>\n\n\n\n<p>Simpel gezegd <strong>verliest bijna 1 op de 5 van je sessies standaard trackinggegevens als je alleen client-side draait<\/strong>.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/taggrs.io\/nl\/cookie-recovery-ios\/\">Leer hoe u de levensduur van cookies kunt verlengen<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><a href=\"https:\/\/taggrs.io\/nl\/gtm-server-side-tagging-hosting\/\">TAGGRS sGTM hosting<\/a> is een beheerde Server-side Tracking provider die uw GTM server container host op een <a href=\"https:\/\/taggrs.io\/nl\/infrastructure\/\">onafhankelijke Europese infrastructuur<\/a>. Het werkt naast Google Tag Manager met behulp van twee containers: <\/p>\n\n\n\n<p>TAGGRS sGTM hosting werkt met elke website-stack. De regel is: als het werkt met Google Tag Manager, werkt het ook met TAGGRS. CMS'en met ondersteuning voor speciale datalagen zijn WordPress, Shopify, Lightspeed, Magento, WooCommerce en PrestaShop. Mobiele apps op iOS en Android worden ook ondersteund.   <\/p>\n<\/blockquote>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"where-to-place-the-container\">Waar plaats je de container?<\/h2>\n\n\n\n<p>Elk platform wordt in 1 van de 3 configuraties geplaatst. Dit is een architecturale beslissing die be\u00efnvloedt of conversies correct worden geteld, of cookies ITP overleven en of gegevens je infrastructuur verlaten voordat of nadat toestemming is gegeven. Hier is de uitsplitsing:  <\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Configuratie<\/strong><\/td><td><strong>Wat het betekent<\/strong><\/td><td><strong>Wanneer gebruiken?<\/strong><\/td><\/tr><tr><td>Alleen webcontainer<\/td><td>Tag wordt uitgevoerd in de browser. Geen servercomponent. <\/td><td>Niet relevant voor sGTM-opstellingen.<\/td><\/tr><tr><td>Alleen servercontainer<\/td><td>Alle gegevens komen van de server. Geen browser-tag. <\/td><td>Wanneer het platform geen deduplicatie ondersteunt of wanneer de browser tag onnodig is.  <br>Opmerking: zonder een bestaande GTM-setup aan de client-side vereist een server-only configuratie een aangepaste traceerimplementatie. Zowel frontend eventverzameling als backend event forwarding moeten vanaf nul worden opgebouwd en onderhouden.<\/td><\/tr><tr><td>Beide containers<\/td><td>De browser-tag stuurt gegevens naar de servercontainer, die ze doorstuurt naar het platform. De webcontainer kan ook gegevens naar de server-side sturen zonder iets rechtstreeks naar een platform te sturen. Deduplicatie is alleen nodig als zowel de browser als de server tegelijkertijd naar hetzelfde platform sturen.  <\/td><td>Wanneer het platform profiteert van zowel browsersignalen als serverbetrouwbaarheid.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-container-does-your-platform-belong-in\">In welke container hoort jouw platform thuis?<\/h2>\n\n\n\n<p>Weet je niet zeker waar je een specifiek platform moet plaatsen?  <strong>Gebruik de checker hieronder.<\/strong>  Selecteer een platform en bekijk de plaatsing van de containers, de vereisten voor deduplicatie en de exacte configuratiestappen.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<!-- TAGGRS Platform Checker - all styles inline, no <style> block -->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n\n<div id=\"plc-root\" style=\"font-family:'Poppins',sans-serif;max-width:800px;margin:0 auto;box-sizing:border-box\">\n\n  <div style=\"background:linear-gradient(145deg,#e4f5ee 0%,#ddedf8 55%,#e8f4fb 100%);border-radius:20px;padding:36px 40px 40px;box-sizing:border-box;font-size:14px;line-height:1.5;color:#0f3528\">\n\n    <div style=\"display:flex;align-items:center;gap:7px;margin-bottom:8px\">\n      <span style=\"width:6px;height:6px;border-radius:50%;background:#2a7a5e;display:inline-block;flex-shrink:0\"><\/span>\n      <span style=\"font-size:11px;font-weight:600;letter-spacing:0.09em;text-transform:uppercase;color:#2a7a5e\">Platform checker<\/span>\n    <\/div>\n\n    <h2 id=\"where-does-your-platform-belong\" style=\"font-size:21px;font-weight:700;color:#0f3528;line-height:1.2;margin:0 0 7px 0\">Where does your platform belong?<\/h2>\n    <p style=\"font-size:13px;color:#4d7a6a;line-height:1.6;margin:0 0 26px 0;max-width:540px\">Select a platform to see which container it goes in, why, and how to configure it correctly.<\/p>\n\n    <label style=\"font-size:11.5px;font-weight:600;color:#0f3528;margin-bottom:8px;display:block\" for=\"plc_platform\">Select a platform<\/label>\n    <div style=\"position:relative;margin-bottom:6px\">\n      <select id=\"plc_platform\" onchange=\"plcShow()\" style=\"width:100%;box-sizing:border-box;background:rgba(255,255,255,0.82);border:1.5px solid rgba(255,255,255,0.95);border-radius:11px;font-family:'Poppins',sans-serif;font-size:14px;font-weight:600;color:#0f3528;padding:12px 40px 12px 16px;outline:none;cursor:pointer;appearance:none;-webkit-appearance:none\">\n        <option value=\"\">\u2014 Choose a platform \u2014<\/option>\n        <option value=\"ga4\">Google Analytics 4<\/option>\n        <option value=\"google_ads\">Google Ads<\/option>\n        <option value=\"meta\">Meta \/ Facebook<\/option>\n        <option value=\"tiktok\">TikTok<\/option>\n        <option value=\"pinterest\">Pinterest<\/option>\n        <option value=\"linkedin\">LinkedIn<\/option>\n        <option value=\"snapchat\">Snapchat<\/option>\n        <option value=\"klaviyo\">Klaviyo<\/option>\n        <option value=\"activecampaign\">ActiveCampaign<\/option>\n      <\/select>\n    <\/div>\n\n    <div id=\"plc_result\" style=\"display:none;margin-top:26px\">\n      <div style=\"height:1px;background:rgba(15,53,40,0.1);margin-bottom:22px\"><\/div>\n      <div style=\"display:flex;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap\">\n        <span id=\"plc_badge\" style=\"display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;padding:6px 14px;border-radius:99px;letter-spacing:0.03em\"><\/span>\n        <span id=\"plc_placement_label\" style=\"font-size:13px;font-weight:600;color:#0f3528\"><\/span>\n      <\/div>\n      <div id=\"plc_summary\" style=\"background:rgba(255,255,255,0.65);border:1.5px solid rgba(255,255,255,0.9);border-radius:13px;padding:16px 18px;margin-bottom:18px;font-size:13px;color:#2a4a3e;line-height:1.65\"><\/div>\n      <div id=\"plc_dedup\" style=\"display:none;align-items:flex-start;gap:10px;background:rgba(107,191,160,0.15);border:1.5px solid rgba(107,191,160,0.35);border-radius:11px;padding:12px 15px;margin-bottom:18px;font-size:12px;color:#1a5240;line-height:1.6\">\n        <div style=\"flex-shrink:0;margin-top:1px;width:16px;height:16px;background:#2a7a5e;border-radius:50%;display:flex;align-items:center;justify-content:center\">\n          <svg width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\"><path d=\"M2 4.5l2 2 3-3\" stroke=\"#fff\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n        <\/div>\n        <div id=\"plc_dedup_text\"><\/div>\n      <\/div>\n      <div style=\"font-size:11.5px;font-weight:700;color:#0f3528;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:12px\">Configuration steps<\/div>\n      <div id=\"plc_steps\" style=\"display:flex;flex-direction:column;gap:10px;margin-bottom:22px\"><\/div>\n      <a id=\"plc_cta\" href=\"#\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-flex;align-items:center;gap:8px;background:#0f3528;color:#fff;font-family:'Poppins',sans-serif;font-size:14px;font-weight:600;padding:13px 22px;border-radius:11px;text-decoration:none;line-height:1;border:none;cursor:pointer\" onmouseover=\"this.style.background='#1a5240'\" onmouseout=\"this.style.background='#0f3528'\">\n        Switch to the server side\n        <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"><path d=\"M2.5 6.5h8M7.5 3.5l3 3-3 3\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n      <\/a>\n      <button onclick=\"plcReset()\" style=\"background:none;border:none;font-family:'Poppins',sans-serif;font-size:12px;color:#4d7a6a;cursor:pointer;margin-top:14px;padding:0;display:block;text-decoration:underline;text-underline-offset:3px\">Reset<\/button>\n    <\/div>\n\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  var platforms = {\n    ga4: {\n      badge: 'both', badgeLabel: 'Both containers', badgeBg: '#0f3528',\n      placementLabel: 'Web container + Server container',\n      summary: 'GA4 is the foundation of every server-side setup. The GA4 Config tag runs in the web container and sends data to the server container \u2014 feeding every downstream tag including Google Ads. Without server-side GA4 in place, no other platform in the server container receives data correctly.',\n      dedup: false,\n      steps: [\n        ['Add GA4 Config tag', 'In your <strong>web container<\/strong>, add a GA4 Configuration tag. Set the Measurement ID and point the server container URL to your first-party tagging subdomain (e.g. <em>sst.yourdomain.com<\/em>).'],\n        ['Deploy server container on TAGGRS', 'Connect your GTM server container to TAGGRS. Your tagging subdomain must be a first-party subdomain of the tracked domain.'],\n        ['Add GA4 server tag', 'In your <strong>server container<\/strong>, add the GA4 tag. It will automatically receive events forwarded by the web GA4 Config tag.'],\n        ['Verify data flow', 'Use GTM Preview mode and GA4 DebugView to confirm events are arriving in the server container before going live.']\n      ],\n      url: 'https:\/\/taggrs.io\/docs\/server-side-tracking\/ga4\/setup-in-gtm'\n    },\n    google_ads: {\n      badge: 'server', badgeLabel: 'Server container only', badgeBg: '#2a7a5e',\n      placementLabel: 'Server container only',\n      summary: 'Google Ads server-side measurement depends entirely on GA4 being configured in both containers first. Once GA4 is set up, all Google Ads tags \u2014 Conversion Tracking and Remarketing \u2014 run exclusively in the server container.',\n      dedup: false,\n      steps: [\n        ['Set up GA4 in both containers first', 'Google Ads has a hard dependency on GA4. Complete the GA4 server-side setup before adding any Google Ads tags.'],\n        ['Add Conversion Linker tag', 'In your <strong>server container<\/strong>, add the Conversion Linker tag. This attaches click data to conversion events \u2014 the most commonly skipped step, and the one that breaks attribution when missing.'],\n        ['Add Google Ads Conversion Tracking tag', 'In your <strong>server container<\/strong>, add the Google Ads Conversion Tracking tag. Configure your Conversion ID and label from your Google Ads account.'],\n        ['Add Google Ads Remarketing tag (optional)', 'If you run remarketing campaigns, add the Google Ads Remarketing tag to the <strong>server container<\/strong>. Same dependency chain as Conversion Tracking.'],\n        ['Test with Tag Assistant', 'Verify the full chain: GA4 Config (web) \u2192 GA4 server tag \u2192 Conversion Linker \u2192 Google Ads tag. Confirm conversions appear in Google Ads \u2192 Measurement \u2192 Conversions.']\n      ],\n      url: 'https:\/\/taggrs.io\/docs\/server-side-tracking\/google-ads\/conversion-linker'\n    },\n    meta: {\n      badge: 'both', badgeLabel: 'Both containers', badgeBg: '#0f3528',\n      placementLabel: 'Web container + Server container',\n      summary: 'Meta recommends running both the browser pixel and server CAPI simultaneously to maximise match rates and event coverage. Running both increases the chance that each conversion is attributed correctly \u2014 even when the browser signal is blocked or degraded.',\n      dedup: true,\n      dedupText: '<strong>Deduplication required.<\/strong> When both the browser pixel and server CAPI fire for the same event, Meta receives it twice. You must pass a matching <code>event_id<\/code> in both the browser and server events. Meta uses this ID to deduplicate and count the conversion once.',\n      steps: [\n        ['Keep Meta Pixel in the web container', 'Your existing Meta Pixel tag stays in the <strong>web container<\/strong>. Do not remove it \u2014 the browser signal improves match rates.'],\n        ['Add Meta CAPI tag in the server container', 'In your <strong>server container<\/strong>, add the Meta Conversions API tag. Configure your Pixel ID and Meta access token.'],\n        ['Implement event_id deduplication', 'Generate a unique <code>event_id<\/code> for each event (e.g. a UUID or timestamp-based string). Pass the same <code>event_id<\/code> in both the browser pixel event and the server CAPI event. Meta matches them and counts once.'],\n        ['Test in Meta Events Manager', 'Go to Meta Events Manager \u2192 Test Events. Confirm events arrive from both browser and server, and that duplicate events are being deduplicated correctly.']\n      ],\n      url: 'https:\/\/taggrs.io\/docs\/server-side-tracking\/facebook\/meta-pixel'\n    },\n    tiktok: {\n      badge: 'server', badgeLabel: 'Server container only', badgeBg: '#2a7a5e',\n      placementLabel: 'Server container only',\n      summary: \"Most guides \u2014 including AI overviews \u2014 list TikTok as a 'both containers' platform. This is incorrect. TikTok's pixel does not support event deduplication at the level required to run browser and server tracking simultaneously. Running both inflates conversion counts. Configure server-side only.\",\n      dedup: false,\n      steps: [\n        ['Remove or disable TikTok Pixel from the web container', 'If you have an existing TikTok Pixel tag in your web container, disable it. Running both without deduplication support results in double-counted conversions.'],\n        ['Add TikTok Events API tag in the server container', 'In your <strong>server container<\/strong>, add the TikTok Events API tag. Configure your Pixel ID and TikTok access token.'],\n        ['Confirm user data hashing', 'The tag automatically transforms user data (email, phone) to lowercase and hashes it using SHA256 before sending to TikTok. Verify this is active in the tag settings.'],\n        ['Verify in TikTok Events Manager', 'Go to TikTok Ads Manager \u2192 Assets \u2192 Events \u2192 Web Events. Confirm events are arriving from the server only, with no duplicate browser events.']\n      ],\n      url: 'https:\/\/taggrs.io\/docs\/server-side-tracking\/tiktok\/pixel'\n    },\n    pinterest: {\n      badge: 'both', badgeLabel: 'Both containers', badgeBg: '#0f3528',\n      placementLabel: 'Web container + Server container',\n      summary: 'Pinterest follows the same dual-signal logic as Meta: browser tag and Conversions API run in parallel. Both channels together give Pinterest the highest-fidelity view of conversion activity, improving attribution and campaign optimisation.',\n      dedup: true,\n      dedupText: '<strong>Deduplication required.<\/strong> With both the browser tag and Conversions API active, Pinterest receives each event from two sources. Pass a matching deduplication key in both the browser and server events so Pinterest counts each conversion once.',\n      steps: [\n        ['Keep Pinterest Tag in the web container', 'Your existing Pinterest Tag stays in the <strong>web container<\/strong>. It continues to fire on browser-level events.'],\n        ['Add Pinterest Conversions API tag in the server container', 'In your <strong>server container<\/strong>, add the Pinterest Conversions API tag. You only need your Pinterest Advertiser ID \u2014 no access token required.'],\n        ['Set up event deduplication', 'Pass a consistent deduplication key in both the browser and server events. Pinterest uses this to match and deduplicate conversion events.'],\n        ['Test with Pinterest Tag Helper', 'Use the Pinterest Tag Helper Chrome extension and Pinterest Events Manager to confirm events arrive from both channels and are deduplicated correctly.']\n      ],\n      url: 'https:\/\/taggrs.io\/docs\/server-side-tracking\/pinterest\/tag'\n    },\n    linkedin: {\n      badge: 'both', badgeLabel: 'Both containers', badgeBg: '#0f3528',\n      placementLabel: 'Web container + Server container',\n      summary: 'The LinkedIn Insight Tag runs client-side in the web container for audience building and page view data. Conversion events are sent server-side via LinkedIn CAPI, which is more reliable than browser-based conversion tracking \u2014 especially for lead generation campaigns where form submissions can be blocked client-side.',\n      dedup: true,\n      dedupText: '<strong>Deduplication required.<\/strong> LinkedIn uses a <code>conversionId<\/code> to match browser and server conversion events. Pass the same <code>conversionId<\/code> in both to prevent double-counting conversions.',\n      steps: [\n        ['Keep LinkedIn Insight Tag in the web container', 'The Insight Tag stays in the <strong>web container<\/strong> for audience building and page view tracking.'],\n        ['Add LinkedIn CAPI tag in the server container', 'In your <strong>server container<\/strong>, add the LinkedIn Conversions API tag. Configure your LinkedIn Ad Account ID and access token.'],\n        ['Configure conversion event deduplication', 'Pass a matching <code>conversionId<\/code> in both the browser Insight Tag and the server CAPI event. LinkedIn uses this to deduplicate.'],\n        ['Verify in LinkedIn Campaign Manager', 'Go to LinkedIn Campaign Manager \u2192 Analyze \u2192 Conversion Tracking. Confirm server-side conversion events are being received and attributed correctly.']\n      ],\n      url: 'https:\/\/taggrs.io\/docs\/server-side-tracking\/linkedin\/insights-tag'\n    },\n    snapchat: {\n      badge: 'both', badgeLabel: 'Both containers', badgeBg: '#0f3528',\n      placementLabel: 'Web container + Server container',\n      summary: 'Snap Pixel runs in the web container; Snap Conversions API runs in the server container. Both channels run in parallel. The server tag automatically normalises and hashes user parameters \u2014 including email, mobile identifier, IP address, and phone number \u2014 before sending to Snap.',\n      dedup: true,\n      dedupText: '<strong>Deduplication required.<\/strong> Pass a matching <code>event_id<\/code> in both the browser Snap Pixel and the server Conversions API events. Snapchat uses this to deduplicate and count each conversion once.',\n      steps: [\n        ['Keep Snap Pixel in the web container', 'Your existing Snap Pixel tag stays in the <strong>web container<\/strong>. It continues to fire browser-level events.'],\n        ['Add Snapchat Conversions API tag in the server container', 'In your <strong>server container<\/strong>, add the Snapchat CAPI tag. Configure your Snap Pixel ID and access token.'],\n        ['Confirm user data normalisation', 'The tag automatically normalises and hashes email, phone, IP address, and mobile identifier using SHA256. Verify this is enabled in the tag configuration.'],\n        ['Implement event_id deduplication', 'Pass a matching <code>event_id<\/code> in both the browser and server events so Snapchat deduplicates correctly.'],\n        ['Test in Snap Events Manager', 'Go to Snap Ads Manager \u2192 Events Manager. Confirm events arrive from both channels and are being deduplicated.']\n      ],\n      url: 'https:\/\/taggrs.io\/docs\/server-side-tracking\/snapchat\/snap-pixel'\n    },\n    klaviyo: {\n      badge: 'server', badgeLabel: 'Server container only', badgeBg: '#2a7a5e',\n      placementLabel: 'Server container only',\n      summary: 'Klaviyo does not support event deduplication. Running both browser and server tracking sends every event twice. Configure server-side only. The tag communicates directly with the Klaviyo API and supports adding contacts, tracking on-site activity, and sending event parameters.',\n      dedup: false,\n      steps: [\n        ['Remove any existing Klaviyo browser tag', 'If you have a Klaviyo JavaScript snippet in your web container or site code, disable it before adding the server-side tag. Running both creates duplicate events.'],\n        ['Add Klaviyo tag in the server container', 'In your <strong>server container<\/strong>, add the Klaviyo tag. Configure your Klaviyo Public API Key and Private API Key.'],\n        ['Configure supported actions', 'The tag supports three action types: <strong>track events<\/strong>, <strong>create or update a contact<\/strong>, and <strong>create or update a contact + track event simultaneously<\/strong>. Configure the action type per trigger.'],\n        ['Test via Klaviyo Activity Feed', 'Go to your Klaviyo account \u2192 Profiles. Trigger a test event and confirm it appears in the profile activity feed without duplicates.']\n      ],\n      url: 'https:\/\/taggrs.io\/docs\/server-side-tracking\/config\/klaviyo'\n    },\n    activecampaign: {\n      badge: 'server', badgeLabel: 'Server container only', badgeBg: '#2a7a5e',\n      placementLabel: 'Server container only',\n      summary: 'ActiveCampaign connects via API from the server container. The tag tracks events, creates or updates contacts, and can combine both actions in a single call. Configure server-side only for clean, deduplicated data into your CRM.',\n      dedup: false,\n      steps: [\n        ['Obtain your ActiveCampaign API credentials', 'In your ActiveCampaign account, go to Settings \u2192 Developer to find your API URL and API Key.'],\n        ['Add ActiveCampaign tag in the server container', 'In your <strong>server container<\/strong>, add the ActiveCampaign tag. Enter your API URL and API Key in the tag configuration.'],\n        ['Select the action type', 'Choose from three action types: <strong>Track event<\/strong>, <strong>Create or update contact<\/strong>, or <strong>Create or update contact + track event<\/strong>. Set the appropriate trigger for each action.'],\n        ['Map event and contact parameters', 'Configure which data layer variables map to ActiveCampaign event names, contact email, and any custom fields you want to populate.'],\n        ['Test in ActiveCampaign', 'Trigger a test event and confirm it appears in ActiveCampaign under Contacts \u2192 Activity or Reports \u2192 Event Tracking.']\n      ],\n      url: 'https:\/\/taggrs.io\/docs\/server-side-tracking\/config\/activecampaign'\n    }\n  };\n\n  window.plcShow = function() {\n    var key = document.getElementById('plc_platform').value;\n    var resultEl = document.getElementById('plc_result');\n    if (!key) { resultEl.style.display = 'none'; return; }\n\n    var p = platforms[key];\n\n    var badge = document.getElementById('plc_badge');\n    badge.innerHTML = '<span style=\"width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,0.65);flex-shrink:0;display:inline-block\"><\/span> ' + p.badgeLabel;\n    badge.style.background = p.badgeBg;\n    badge.style.color = '#fff';\n\n    document.getElementById('plc_placement_label').textContent = p.placementLabel;\n    document.getElementById('plc_summary').innerHTML = p.summary;\n\n    var dedupEl = document.getElementById('plc_dedup');\n    if (p.dedup) {\n      dedupEl.style.display = 'flex';\n      document.getElementById('plc_dedup_text').innerHTML = p.dedupText;\n    } else {\n      dedupEl.style.display = 'none';\n    }\n\n    var stepsEl = document.getElementById('plc_steps');\n    stepsEl.innerHTML = '';\n    p.steps.forEach(function(step, i) {\n      if (i > 0) {\n        var conn = document.createElement('div');\n        conn.style.cssText = 'width:1px;height:10px;background:rgba(15,53,40,0.2);margin-left:10px';\n        stepsEl.appendChild(conn);\n      }\n      var stepDiv = document.createElement('div');\n      stepDiv.style.cssText = 'display:flex;align-items:flex-start;gap:12px';\n      stepDiv.innerHTML =\n        '<div style=\"flex-shrink:0;width:22px;height:22px;border-radius:50%;background:#0f3528;color:#fff;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:1px;font-family:Poppins,sans-serif\">' + (i+1) + '<\/div>' +\n        '<div style=\"font-size:13px;color:#2a4a3e;line-height:1.55;padding-top:3px;font-family:Poppins,sans-serif\"><strong style=\"color:#0f3528\">' + step[0] + '<\/strong><br>' + step[1] + '<\/div>';\n      stepsEl.appendChild(stepDiv);\n    });\n\n    document.getElementById('plc_cta').href = p.url;\n    resultEl.style.display = 'block';\n  };\n\n  window.plcReset = function() {\n    document.getElementById('plc_platform').value = '';\n    document.getElementById('plc_result').style.display = 'none';\n  };\n})();\n<\/script>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"platforms-that-go-in-the-server-container-only\">Platforms die alleen in de servercontainer passen<\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"advertising-platforms\">Reclameplatforms<\/h3>\n\n\n\n<p><strong>Google Ads Server-side Tracking<\/strong> vereist achtereenvolgens 4 onderdelen:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>GA4 Config-tag (webcontainer)<\/li>\n\n\n\n<li>GA4-serverlabel (servercontainer)<\/li>\n\n\n\n<li>Label voor conversielink (servercontainer)<\/li>\n\n\n\n<li>Google Ads-tag voor het bijhouden van conversies (servercontainer)<\/li>\n<\/ol>\n\n\n\n<p>Volgens de veelgestelde vragen die onze Support krijgt, is de Conversielinker de stap die het vaakst wordt overgeslagen. Zonder deze stap worden klikgegevens niet correct gekoppeld aan conversies en wordt de attributie verbroken. Google Ads Remarketing doorloopt dezelfde keten.  <\/p>\n\n\n\n<p>Google Ads Remarketing draait ook alleen server-side en maakt gebruik van dezelfde GA4-afhankelijkheid.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/taggrs.io\/docs\/server-side-tracking\/google-ads\/conversion-linker\">Hoe Google Ads server-side Tracking instellen<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>TikTok<\/strong> is ook alleen servercontainer. De pixel van TikTok ondersteunt geen ontdubbeling van gebeurtenissen op het niveau dat vereist is om gelijktijdig browser- en servertracking uit te voeren. De server tag stuurt events naar TikTok's Events API en transformeert automatisch benodigde gebruikersgegevens (e-mail, telefoon) naar kleine letters en hasht deze met SHA256 voor verzending.  <\/p>\n\n\n\n<p>Controleer je instellingen in TikTok's Gebeurtenissenmanager voordat je parallelle tracering inschakelt.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"crm-and-marketing-automation\">CRM en marketingautomatisering<\/h3>\n\n\n\n<p><strong>Klaviyo<\/strong> ondersteunt geen ontdubbeling van gebeurtenissen. Door zowel de browser als de server te draaien worden dubbele gebeurtenissen naar Klaviyo gestuurd. Configureer alleen server-side. De tag communiceert rechtstreeks met de API van Klaviyo en ondersteunt het toevoegen van contacten, het bijhouden van on-site activiteiten en het verzenden van gebeurtenisparameters.   <\/p>\n\n\n\n<p><strong>ActiveCampaign<\/strong> maakt verbinding met de ActiveCampaign API server-side. De tag ondersteunt 3 actietypes: gebeurtenissen volgen, een contactpersoon maken of bijwerken, en een contactpersoon maken of bijwerken en tegelijkertijd een gebeurtenis volgen. <\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"platforms-that-require-both-the-web-container-and-the-server-container\">Platformen die zowel de webcontainer als de servercontainer nodig hebben<\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"analytics\">Analytics<\/h3>\n\n\n\n<p>Google Analytics 4 is niet optioneel in een server-side opstelling. De GA4 Config tag in de webcontainer stuurt gegevens naar de servercontainer, die elke downstream tag voedt, inclusief Google Ads. Er is geen server-side Google Ads setup zonder server-side GA4.  <\/p>\n\n\n\n<p>Deduplicatie voor GA4? Dat is niet nodig. Sessiecontinu\u00efteit wordt automatisch afgehandeld in beide containers.  <\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"advertising-platforms\">Reclameplatforms<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Platform<\/strong><\/td><td><strong>Waarom beide containers?<\/strong><\/td><td><strong>Deduplicatie vereist?<\/strong><\/td><td><strong>Overeenkomende parameter<\/strong><\/td><\/tr><tr><td>Meta <\/td><td>Meta raadt aan om browser pixel en server CAPI gelijktijdig uit te voeren voor maximale match rates en event coverage.<\/td><td>Ja<\/td><td>event_id moet overeenkomen tussen web- en servergebeurtenissen<\/td><\/tr><tr><td>Pinterest<\/td><td>Browser tag + Conversions API draaien parallel, dezelfde logica met twee signalen als Meta.<\/td><td>Ja<\/td><td>Adverteerder-ID + ontdubbelingssleutel voor gebeurtenis<\/td><\/tr><tr><td>LinkedIn<\/td><td>Insight Tag wordt client-side uitgevoerd; de server-tag stuurt conversiegebeurtenissen via LinkedIn CAPI.<\/td><td>Ja<\/td><td>conversieId<\/td><\/tr><tr><td>Snapchat<\/td><td>Snap Pixel (web) + Snap Conversions API (server) draaien parallel. Tag normaliseert en haset gebruikersparameters automatisch. <\/td><td>Ja<\/td><td>gebeurtenis_id<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Maar <strong>wat betekent ontdubbeling in de praktijk?<\/strong> Deduplicatie vindt plaats wanneer dezelfde conversiegebeurtenis zowel in de browser als op de server plaatsvindt, zodat het platform deze twee keer ontvangt. Zonder ontdubbelingslogica (een gedeelde gebeurtenis-ID die het platform vertelt dat \"deze twee gebeurtenissen hetzelfde zijn\") worden je conversietellingen opgeblazen. Specifiek voor Meta betekent dit <strong>dat de ROAS-rapportage onbetrouwbaar wordt<\/strong>.  <\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"e-commerce-cms-specific-data-layers\">E-commerce: CMS-specifieke gegevenslagen<\/h2>\n\n\n\n<p>Server-side Tracking is slechts zo goed als de gebeurtenisgegevens die de servercontainer bereiken. Voor e-commerce betekent dat een <strong>correct gestructureerde gegevenslaag<\/strong>: een laag die gebeurtenissen voor aankopen, toevoegen aan winkelwagentje en productweergave met de juiste parameters doorgeeft. <\/p>\n\n\n\n<p>TAGGRS heeft speciale configuraties voor datalagen voor CMS'en zoals <strong>WordPress (met WooCommerce), Shopify, Lightspeed, Magento en PrestaShop<\/strong>.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/taggrs.io\/docs\/server-side-tracking\/shopify-data-layer\">TAGGRS datalagen apps voor e-commerce<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Elk CMS heeft een andere datalaagstructuur. Het gebruik van het verkeerde gebeurtenisformaat zorgt ervoor dat conversie-events bij de servercontainer aankomen met ontbrekende of misvormde parameters: de meest voorkomende reden waarom server-side Google Ads tracking lijkt te werken, maar conversies te laag rapporteert. <\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mobile-apps-ios-and-android\">Mobiele apps: iOS en Android<\/h2>\n\n\n\n<p>TAGGRS ondersteunt server-side tracking voor mobiele apps op iOS en Android. App-events worden door de servercontainer geleid via dezelfde infrastructuur als webtracking. Dit is relevant voor teams die Google Ads App-campagnes of Meta App-installatiecampagnes uitvoeren waarbij tracking via de browser niet beschikbaar is en waarbij gebeurtenisgegevens op SDK-niveau via een server moeten worden getraceerd voordat ze bij advertentieplatforms terechtkomen.  <\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-setup-matches-your-tracking-stack\">Welke opstelling past bij jouw tracking stack?<\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"google-ads-ga4-only\">Alleen Google Advertenties + GA4  <\/h3>\n\n\n\n<p>Configureer GA4 in beide containers. Google Ads draait alleen server-side. Dit is de minimaal haalbare sGTM-instelling voor beginnende teams.  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"google-ads-meta-ga4\">Google-advertenties + Meta + GA4  <\/h3>\n\n\n\n<p>Meta CAPI met event_id ontdubbeling toevoegen. Dit is de meest voorkomende agentschapsconfiguratie. Het dekt de twee platforms met de hoogste uitgaven en levert de grootste signaalherstelwinst op voor de meeste klanten.  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"google-ads-meta-tiktok-linkedin-klaviyo\">Google Advertenties + Meta + TikTok + LinkedIn + Klaviyo  <\/h3>\n\n\n\n<p>Elk platform hierboven is van toepassing. Op deze schaal wordt infrastructuurbeheer - container uptime, multi-client toegang, credential rotatie - de operationele beperking, niet tag configuratie. TAGGRS's managed hosting en rolgebaseerde toegangscontroles zijn gemaakt voor deze omgeving.  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"e-commerce-stack-shopify-woocommerce-lightspeed\">E-commerce-stack (Shopify \/ WooCommerce \/ Lightspeed)  <\/h3>\n\n\n\n<p>Begin met CMS-specifieke datalaagconfiguratie voordat u platformtags instelt. Een onvolledige datalaag produceert ontbrekende parameters op serverniveau en geen enkele tagconfiguratie kan gebeurtenissen compenseren die stroomopwaarts nooit correct zijn gevormd. <\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faqs\">FAQs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"which-platforms-require-event-deduplication-in-server-side-gtm\">Welke platforms vereisen event deduplicatie in server-side GTM?  <\/h3>\n\n\n\n<p>Meta (Facebook CAPI), Pinterest, LinkedIn CAPI en Snapchat CAPI vereisen event deduplicatie wanneer zowel browser- als servertracking tegelijkertijd worden uitgevoerd. TikTok ondersteunt geen deduplicatie en moet alleen op de server worden geconfigureerd om opgeblazen conversietellingen te voorkomen. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Webcontainer, servercontainer of beide? Controleer wat jouw platform nodig heeft voor betrouwbare tracking.<\/p>\n","protected":false},"author":10,"featured_media":70541,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[326],"tags":[728],"class_list":["post-70555","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server-side-tracking","tag-advertentie-platform"],"acf":[],"_links":{"self":[{"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/posts\/70555","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/comments?post=70555"}],"version-history":[{"count":4,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/posts\/70555\/revisions"}],"predecessor-version":[{"id":70574,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/posts\/70555\/revisions\/70574"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/media\/70541"}],"wp:attachment":[{"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/media?parent=70555"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/categories?post=70555"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/tags?post=70555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}