{"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-26T14:57:01","modified_gmt":"2026-05-26T14:57:01","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 je 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        <optgroup label=\"Ad platforms &amp; analytics\">\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        <\/optgroup>\n        <optgroup label=\"CRM &amp; email\">\n          <option value=\"klaviyo\">Klaviyo<\/option>\n          <option value=\"activecampaign\">ActiveCampaign<\/option>\n        <\/optgroup>\n        <optgroup label=\"Behaviour &amp; UX tools\">\n          <option value=\"hotjar\">Hotjar<\/option>\n          <option value=\"clarity\">Microsoft Clarity<\/option>\n          <option value=\"livechat\">LiveChat<\/option>\n          <option value=\"zendesk\">Zendesk Chat<\/option>\n          <option value=\"typeform\">Typeform<\/option>\n        <\/optgroup>\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 id=\"plc_steps_section\">\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      <\/div>\n      <div id=\"plc_cta_section\">\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      <\/div>\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    \/\/ \u2500\u2500 Client-side only platforms \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    hotjar: {\n      badge: 'web', badgeLabel: 'Web container only', badgeBg: '#3d6b8e',\n      placementLabel: 'Web container only \u2014 no server-side setup needed',\n      summary: 'Hotjar records sessions, heatmaps, and on-page user behaviour directly in the browser. It works by observing DOM interactions \u2014 mouse movements, scroll depth, and clicks \u2014 which only exist in the browser environment. There is no server-side equivalent, and none is needed: Hotjar does not send conversion signals to ad platforms, so there is no signal loss problem to solve here. Keep it in your web container and leave your server container untouched.',\n      dedup: false,\n      clientOnly: true,\n      steps: [\n        ['Keep Hotjar in the web container', 'Add the Hotjar tracking code via a Custom HTML tag in your <strong>web container<\/strong>, or install it directly in your site&#39;s <code>&lt;head&gt;<\/code>. Either approach is correct.'],\n        ['No server container changes needed', 'Do not add Hotjar to your server container. It has no API equivalent and routing it server-side would break its functionality entirely.']\n      ],\n      url: null\n    },\n    clarity: {\n      badge: 'web', badgeLabel: 'Web container only', badgeBg: '#3d6b8e',\n      placementLabel: 'Web container only \u2014 no server-side setup needed',\n      summary: 'Microsoft Clarity works the same way as Hotjar: session recordings and heatmaps captured directly in the browser. It relies on observing real DOM interactions and cannot function outside the browser context. It is free, integrates natively with GA4, and is widely used alongside server-side setups \u2014 just not as part of them.',\n      dedup: false,\n      clientOnly: true,\n      steps: [\n        ['Add Clarity via GTM web container', 'In your <strong>web container<\/strong>, add a Custom HTML tag with the Microsoft Clarity script. Set it to fire on All Pages.'],\n        ['Connect to GA4 (optional)', 'In the Clarity dashboard, link your GA4 property to see session recordings alongside GA4 segments. This connection is made inside Clarity \u2014 no GTM changes needed.'],\n        ['No server container changes needed', 'Clarity has no server-side API. Keep it client-side only.']\n      ],\n      url: null\n    },\n    livechat: {\n      badge: 'web', badgeLabel: 'Web container only', badgeBg: '#3d6b8e',\n      placementLabel: 'Web container only \u2014 no server-side setup needed',\n      summary: 'LiveChat injects a chat widget into the browser DOM and detects page activity, user idle time, and scroll behaviour to trigger conversations at the right moment. All of this requires direct browser access. The widget cannot be loaded or managed from a server container.',\n      dedup: false,\n      clientOnly: true,\n      steps: [\n        ['Add LiveChat via GTM web container', 'In your <strong>web container<\/strong>, add a Custom HTML tag with the LiveChat tracking code snippet. Fire it on All Pages.'],\n        ['No server container changes needed', 'LiveChat has no server-side API for widget delivery. It is a browser-only tool by design.']\n      ],\n      url: null\n    },\n    zendesk: {\n      badge: 'web', badgeLabel: 'Web container only', badgeBg: '#3d6b8e',\n      placementLabel: 'Web container only \u2014 no server-side setup needed',\n      summary: 'Zendesk Chat (Web Widget) renders a live chat interface directly in the browser. It uses client-side JavaScript to display the widget, detect visitor behaviour, and manage real-time conversations. Like all chat widgets of this type, it depends entirely on browser context and cannot be routed through a server container.',\n      dedup: false,\n      clientOnly: true,\n      steps: [\n        ['Add Zendesk Web Widget via GTM web container', 'In your <strong>web container<\/strong>, add a Custom HTML tag with the Zendesk Web Widget snippet from your Zendesk account (Admin Center \u2192 Channels \u2192 Messaging). Fire on All Pages.'],\n        ['No server container changes needed', 'The Zendesk Web Widget is browser-only. No server-side configuration is required or possible.']\n      ],\n      url: null\n    },\n    typeform: {\n      badge: 'web', badgeLabel: 'Web container only', badgeBg: '#3d6b8e',\n      placementLabel: 'Web container only \u2014 no server-side setup needed',\n      summary: 'Typeform embedded forms and popups run entirely in the browser. They rely on client-side JavaScript to render the form, respond to user input, and trigger display logic (scroll-based, time-based, or exit intent). Typeform does offer a Responses API for pulling submission data server-to-server, but the embed itself is browser-only and belongs in the web container.',\n      dedup: false,\n      clientOnly: true,\n      steps: [\n        ['Embed Typeform via GTM web container', 'In your <strong>web container<\/strong>, add a Custom HTML tag with the Typeform embed snippet or use the standard <code>&lt;script&gt;<\/code> + <code>&lt;div&gt;<\/code> embed method. Set the trigger based on your display logic (All Pages, specific page, or a custom event).'],\n        ['No server container changes needed', 'The Typeform embed is client-side only. If you need to push form submission data into your data layer for conversion tracking, use Typeform&#39;s hidden fields or webhook \u2192 server integration \u2014 but the embed itself stays in the web container.']\n      ],\n      url: null\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    var isClientOnly = !!p.clientOnly;\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:' + (isClientOnly ? '#3d6b8e' : '#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    \/\/ Show\/hide the CTA button\n    var ctaSection = document.getElementById('plc_cta_section');\n    if (isClientOnly) {\n      ctaSection.style.display = 'none';\n    } else {\n      ctaSection.style.display = 'block';\n      document.getElementById('plc_cta').href = p.url;\n    }\n\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-die-alleen-in-de-webcontainer-horen\">Platforms die alleen in de webcontainer horen<\/h2>\n\n\n\n<p>Sommige platforms zijn speciaal gemaakt om alleen in de browser te draaien. Ze zijn afhankelijk van directe interactie met de DOM: muisbewegingen opnemen, scrollgedrag meten, klikken tracken of overlays op de pagina tonen. Dit naar server-side verplaatsen is niet mogelijk, omdat de data die ze verzamelen simpelweg niet buiten de browser bestaat.<\/p>\n\n\n\n<p>Dit is een vraag die we vaak krijgen van klanten: \"Kan ik Hotjar naar server-side verplaatsen?\" Het korte antwoord is nee, en dat hoeft ook niet. Waarom niet? Deze tools sturen geen conversiesignalen naar advertentieplatforms, dus er is geen probleem met signaalverlies om op te lossen.<\/p>\n\n\n\n<p>Tools in deze categorie zijn bijvoorbeeld:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Hotjar.<\/strong> Neemt sessies op, maakt heatmaps en registreert gebruikersgedrag direct in de browser. Er is geen server-side variant en die is ook niet nodig: de data is visueel en kwalitatief, niet bedoeld voor bidding.<\/li>\n\n\n\n<li><strong>Microsoft Clarity. <\/strong>Werkt hetzelfde als Hotjar: sessie-opnames en heatmaps, volledig browser-based. Microsoft biedt het gratis aan en het wordt vaak naast GA4 gebruikt.<\/li>\n\n\n\n<li><strong>LiveChat of Zendesk Chat.<\/strong> Chatwidgets worden in de DOM geladen en hebben de browser nodig om pagina-activiteit te detecteren en gesprekken te starten.<\/li>\n\n\n\n<li><strong>Typeform (of vergelijkbare on-page survey tools).<\/strong> Verschijnt op basis van scroll- of tijdstriggers. Deze interacties gebeuren allemaal client-side.<\/li>\n<\/ul>\n\n\n\n<p>Wat betekent dit voor je setup? Houd deze tools gewoon in je webcontainer (GTM client-side). Er is geen reden om ze via je servercontainer te laten lopen, en als je dat probeert, breek je waarschijnlijk de functionaliteit. Voor UX- en gedragstools is client-side precies waar ze horen.<\/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-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 je 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 je 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":0,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/posts\/70555\/revisions"}],"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}]}}