{"id":70571,"date":"2026-05-22T12:04:05","date_gmt":"2026-05-22T12:04:05","guid":{"rendered":"https:\/\/taggrs.io\/que-plataformas-admiten-google-tag-manager-server-side\/"},"modified":"2026-05-22T12:35:42","modified_gmt":"2026-05-22T12:35:42","slug":"which-platforms-support-server-side-gtm","status":"publish","type":"post","link":"https:\/\/taggrs.io\/es\/which-platforms-support-server-side-gtm\/","title":{"rendered":"\u00bfQu\u00e9 plataformas admiten Google Tag Manager server-side?"},"content":{"rendered":"\n<p>El Google Tag Manager server-side (sGTM) es compatible con muchas plataformas de publicidad y an\u00e1lisis, como GA4, Google Ads, Meta, TikTok, Pinterest, LinkedIn, Snapchat, Klaviyo y ActiveCampaign. Las capas de datos de comercio electr\u00f3nico est\u00e1n disponibles para CMS como WordPress, Shopify, Lightspeed, Magento, WooCommerce y PrestaShop. Tambi\u00e9n se admiten aplicaciones m\u00f3viles en iOS y Android.  <\/p>\n\n\n\n<p>El destino de cada plataforma (contenedor web, contenedor servidor o ambos) determina <strong>si tus datos de conversi\u00f3n son precisos<\/strong>.<\/p>\n\n\n\n<p>Este art\u00edculo explica el porqu\u00e9 de cada decisi\u00f3n de colocaci\u00f3n, qu\u00e9 se rompe cuando te equivocas, y qu\u00e9 manejan los proveedores de alojamiento sGTM como TAGGRS a nivel de infraestructura que la configuraci\u00f3n del contenedor por s\u00ed sola no puede solucionar. Y si ya conoces tu(s) plataforma(s), utiliza el <strong>comprobador interactivo<\/strong> de abajo para saltar directamente a los pasos de configuraci\u00f3n. <\/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\">\u00bfQu\u00e9 es un contenedor de servidor GTM y qu\u00e9 aloja?<\/h2>\n\n\n\n<p>Un contenedor de servidor GTM se ejecuta en un servidor alojado y ejecuta etiquetas de servidor a servidor, separadas del navegador del visitante. Funciona junto al contenedor web GTM est\u00e1ndar utilizando una arquitectura de dos contenedores: <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>contenedor web,<\/strong> que se ejecuta en el navegador del visitante y ejecuta las etiquetas del lado del cliente<\/li>\n\n\n\n<li><strong>contenedor de servidor,<\/strong> que se ejecuta en un servidor alojado (como TAGGRS) y ejecuta etiquetas de servidor a servidor.<\/li>\n<\/ol>\n\n\n\n<p>El contenedor del servidor es donde ocurre el verdadero trabajo. Cuando est\u00e1 configurado correctamente, establece cookies de origen que duran hasta m\u00e1s de 365 d\u00edas. Y esto importa ahora m\u00e1s que nunca porque la PTI de Safari limita las cookies establecidas por el navegador a 7 d\u00edas, y Safari representa aproximadamente el 17% de la cuota de mercado mundial de navegadores a principios de 2026. (fuente: StatCounter, <a href=\"https:\/\/gs.statcounter.com\/browser-market-share\" target=\"_blank\" rel=\"noopener\">Browser Market Share Worldwide<\/a>)   <\/p>\n\n\n\n<p>En pocas palabras, <strong>casi 1 de cada 5 de tus sesiones est\u00e1 perdiendo datos de seguimiento por defecto si s\u00f3lo est\u00e1s ejecutando del lado del cliente<\/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\/es\/cookie-recovery-ios\/\">Aprende a ampliar la vida \u00fatil de las cookies<\/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\/es\/gtm-server-side-tagging-hosting\/\">El alojamiento TAGGRS sGTM<\/a> es un proveedor de seguimiento gestionado server-side que aloja tu contenedor de servidor GTM en una <a href=\"https:\/\/taggrs.io\/es\/infrastructure\/\">infraestructura europea independiente<\/a>. Funciona junto con Google Tag Manager utilizando dos contenedores: <\/p>\n\n\n\n<p>El alojamiento TAGGRS sGTM funciona con cualquier pila de sitios web. La regla es: si funciona con Google Tag Manager, tambi\u00e9n funciona con TAGGRS. Por tanto, los CMS compatibles con la capa de datos dedicada incluyen WordPress, Shopify, Lightspeed, Magento, WooCommerce y PrestaShop. Tambi\u00e9n son compatibles las aplicaciones m\u00f3viles en iOS y Android.   <\/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\">\u00bfD\u00f3nde colocar el contenedor?<\/h2>\n\n\n\n<p>Cada plataforma se coloca en 1 de 3 configuraciones. Se trata de una decisi\u00f3n arquitect\u00f3nica que afecta a si las conversiones se cuentan correctamente, si las cookies sobreviven a la PTI y si los datos salen de tu infraestructura antes o despu\u00e9s de aplicar el consentimiento. He aqu\u00ed el desglose:  <\/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>Configuraci\u00f3n<\/strong><\/td><td><strong>Qu\u00e9 significa<\/strong><\/td><td><strong>Cu\u00e1ndo utilizarlo<\/strong><\/td><\/tr><tr><td>S\u00f3lo contenedor web<\/td><td>La etiqueta se ejecuta en el navegador. No tiene componente de servidor. <\/td><td>No es relevante para las configuraciones sGTM.<\/td><\/tr><tr><td>S\u00f3lo contenedor servidor<\/td><td>Todos los datos fluyen desde el servidor. No hay etiqueta de navegador. <\/td><td>Cuando la plataforma no admite la deduplicaci\u00f3n, o cuando la etiqueta del navegador es innecesaria.  <br>Nota: sin una configuraci\u00f3n GTM existente del lado del cliente, una configuraci\u00f3n de s\u00f3lo servidor requiere una implementaci\u00f3n de seguimiento personalizada, tanto la recopilaci\u00f3n de eventos del frontend como el reenv\u00edo de eventos del backend deben construirse y mantenerse desde cero.<\/td><\/tr><tr><td>Ambos contenedores<\/td><td>La etiqueta del navegador env\u00eda datos al contenedor del servidor, que los reenv\u00eda a la plataforma. El contenedor web tambi\u00e9n puede enviar datos al server-side sin enviar nada directamente a una plataforma. La deduplicaci\u00f3n s\u00f3lo es necesaria cuando el navegador y el servidor env\u00edan simult\u00e1neamente a la misma plataforma.  <\/td><td>Cuando la plataforma se beneficia tanto de las se\u00f1ales del navegador como de la fiabilidad del servidor.<\/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\">\u00bfA qu\u00e9 contenedor pertenece tu plataforma?<\/h2>\n\n\n\n<p>\u00bfNo est\u00e1s seguro de d\u00f3nde colocar una plataforma espec\u00edfica?  <strong>Utiliza el comprobador de abajo.<\/strong>  Selecciona una plataforma y obt\u00e9n la ubicaci\u00f3n del contenedor, los requisitos de deduplicaci\u00f3n y los pasos exactos de configuraci\u00f3n.<\/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\">Plataformas que van s\u00f3lo en el contenedor del servidor<\/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\">Plataformas publicitarias<\/h3>\n\n\n\n<p><strong>El seguimiento server-side de Google Ads<\/strong> requiere 4 componentes en secuencia:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Etiqueta GA4 Config (contenedor web)<\/li>\n\n\n\n<li>Etiqueta de servidor GA4 (contenedor de servidor)<\/li>\n\n\n\n<li>Conversi\u00f3n Etiqueta enlazadora (contenedor servidor)<\/li>\n\n\n\n<li>Etiqueta de seguimiento de conversiones de Google Ads (contenedor del servidor)<\/li>\n<\/ol>\n\n\n\n<p>Seg\u00fan las preguntas frecuentes que recibe nuestro Servicio de Asistencia, el Vinculador de conversiones es el paso que se omite con m\u00e1s frecuencia. Sin \u00e9l, los datos de los clics no se unen a las conversiones correctamente y se rompe la atribuci\u00f3n. El Remarketing de Google Ads pasa por la misma cadena.  <\/p>\n\n\n\n<p>Google Ads Remarketing tambi\u00e9n se ejecuta \u00fanicamente server-side, utilizando la misma dependencia de GA4.<\/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\">C\u00f3mo configurar el seguimiento server-side de Google Ads<\/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> tambi\u00e9n es s\u00f3lo contenedor de servidor. El p\u00edxel de TikTok no admite la deduplicaci\u00f3n de eventos al nivel necesario para ejecutar el seguimiento del navegador y del servidor simult\u00e1neamente. Ejecutar ambos sin deduplicaci\u00f3n garantizada infla los recuentos de conversiones.La etiqueta del servidor env\u00eda eventos a la API de Eventos de TikTok y transforma autom\u00e1ticamente los datos requeridos del usuario (correo electr\u00f3nico, tel\u00e9fono) a min\u00fasculas y los hashifica utilizando SHA256 antes de la transmisi\u00f3n.  <\/p>\n\n\n\n<p>Verifica tu configuraci\u00f3n en el Gestor de Eventos de TikTok antes de activar cualquier seguimiento paralelo.<\/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 y automatizaci\u00f3n del marketing<\/h3>\n\n\n\n<p><strong>Klaviyo<\/strong> no admite la deduplicaci\u00f3n de eventos. Ejecutar tanto el navegador como el servidor env\u00eda eventos duplicados a Klaviyo. Configurar s\u00f3lo server-side. La etiqueta se comunica directamente con la API de Klaviyo y admite la adici\u00f3n de contactos, el seguimiento de la actividad in situ y el env\u00edo de par\u00e1metros de eventos.   <\/p>\n\n\n\n<p><strong>ActiveCampaign<\/strong> se conecta con la API de ActiveCampaign server-side. La etiqueta admite 3 tipos de acci\u00f3n: rastrear eventos, crear o actualizar un contacto, y crear o actualizar un contacto mientras se rastrea un evento simult\u00e1neamente. <\/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\">Plataformas que requieren tanto el contenedor web como el contenedor servidor<\/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\">Anal\u00edtica<\/h3>\n\n\n\n<p>Google Analytics 4 no es opcional en una configuraci\u00f3n server-side. La etiqueta GA4 Config del contenedor web env\u00eda datos al contenedor del servidor, que alimenta todas las etiquetas posteriores, incluida Google Ads. No se puede configurar Google Ads en el lado del servidor sin haber instalado GA4 en el lado del servidor.  <\/p>\n\n\n\n<p>\u00bfDeduplicaci\u00f3n para GA4? No es necesaria. La continuidad de la sesi\u00f3n se gestiona autom\u00e1ticamente en ambos contenedores.  <\/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\">Plataformas publicitarias<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Plataforma<\/strong><\/td><td><strong>\u00bfPor qu\u00e9 ambos contenedores?<\/strong><\/td><td><strong>\u00bfEs necesaria la deduplicaci\u00f3n?<\/strong><\/td><td><strong>Par\u00e1metro de coincidencia<\/strong><\/td><\/tr><tr><td>Meta <\/td><td>Meta recomienda ejecutar el p\u00edxel del navegador y el CAPI del servidor simult\u00e1neamente para maximizar las tasas de coincidencia y la cobertura del evento.<\/td><td>S\u00ed<\/td><td>event_id debe coincidir entre los eventos de la web y del servidor<\/td><\/tr><tr><td>Pinterest<\/td><td>La etiqueta del navegador + la API de conversiones funcionan en paralelo, con la misma l\u00f3gica de doble se\u00f1al que Meta.<\/td><td>S\u00ed<\/td><td>ID del anunciante + clave de deduplicaci\u00f3n del evento<\/td><\/tr><tr><td>LinkedIn<\/td><td>Insight Tag se ejecuta del lado del cliente; server tag env\u00eda eventos de conversi\u00f3n a trav\u00e9s de LinkedIn CAPI.<\/td><td>S\u00ed<\/td><td>conversionId<\/td><\/tr><tr><td>Snapchat<\/td><td>Snap Pixel (web) + Snap Conversions API (servidor) se ejecutan en paralelo. La etiqueta normaliza y hashtiza autom\u00e1ticamente los par\u00e1metros del usuario. <\/td><td>S\u00ed<\/td><td>evento_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>Pero, <strong>\u00bfqu\u00e9 significa la deduplicaci\u00f3n en la pr\u00e1ctica?<\/strong> La deduplicaci\u00f3n se produce cuando el mismo evento de conversi\u00f3n se dispara tanto en el navegador como en el servidor, por lo que la plataforma lo recibe dos veces. Sin una l\u00f3gica de deduplicaci\u00f3n (un ID de evento compartido que indique a la plataforma \"estos dos eventos son el mismo\") tus recuentos de conversiones se inflan. Para Meta espec\u00edficamente, esto significa <strong>que los informes ROAS se vuelven poco fiables<\/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\">Comercio electr\u00f3nico: Capas de datos espec\u00edficas del CMS<\/h2>\n\n\n\n<p>El seguimiento server-side s\u00f3lo es tan bueno como los datos del evento que llegan al contenedor del servidor. Para el comercio electr\u00f3nico, eso significa una <strong>capa de datos correctamente estructurada<\/strong>: que pase los eventos de compra, a\u00f1adir al carrito y vista del producto con los par\u00e1metros adecuados. <\/p>\n\n\n\n<p>TAGGRS dispone de configuraciones de capas de datos dedicadas para CMS como <strong>WordPress (con WooCommerce), Shopify, Lightspeed, Magento y 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 capas de datos apps para comercio electr\u00f3nico<\/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>Cada CMS tiene una estructura de capa de datos diferente. Utilizar un formato de evento incorrecto hace que los eventos de conversi\u00f3n lleguen al contenedor del servidor con par\u00e1metros que faltan o malformados: la raz\u00f3n m\u00e1s com\u00fan por la que el seguimiento de Google Ads server-side parece funcionar pero no informa de las conversiones. <\/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\">Aplicaciones m\u00f3viles: iOS y Android<\/h2>\n\n\n\n<p>TAGGRS admite el seguimiento server-side para aplicaciones m\u00f3viles en iOS y Android. Los eventos de la aplicaci\u00f3n pasan por el contenedor del servidor utilizando la misma infraestructura que el seguimiento web. Esto es importante para los equipos que ejecutan campa\u00f1as de Google Ads App o campa\u00f1as de instalaci\u00f3n de metaaplicaciones, en las que el seguimiento del lado del navegador no est\u00e1 disponible y los datos de eventos a nivel de SDK necesitan un rel\u00e9 de servidor antes de llegar a las plataformas publicitarias.  <\/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\">\u00bfQu\u00e9 configuraci\u00f3n se ajusta a tu pila de seguimiento?<\/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\">S\u00f3lo Google Ads + GA4  <\/h3>\n\n\n\n<p>Configura GA4 en ambos contenedores. Google Ads s\u00f3lo se ejecuta en el server-side. Esta es la configuraci\u00f3n sGTM m\u00ednima viable para los equipos que empiezan.  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"google-ads-meta-ga4\">Anuncios Google + Meta + GA4  <\/h3>\n\n\n\n<p>A\u00f1adir Meta CAPI con deduplicaci\u00f3n event_id. \u00c9sta es la configuraci\u00f3n m\u00e1s com\u00fan de las agencias. Cubre las dos plataformas de mayor gasto y proporciona la mayor ganancia de recuperaci\u00f3n de se\u00f1al para la mayor\u00eda de los clientes.  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"google-ads-meta-tiktok-linkedin-klaviyo\">Google Ads + Meta + TikTok + LinkedIn + Klaviyo  <\/h3>\n\n\n\n<p>Todas las plataformas anteriores son aplicables. A esta escala, la gesti\u00f3n de la infraestructura -tiempo de actividad del contenedor, acceso multicliente, rotaci\u00f3n de credenciales- se convierte en la limitaci\u00f3n operativa, no la configuraci\u00f3n de etiquetas. El alojamiento gestionado y los controles de acceso basados en roles de TAGGRS est\u00e1n dise\u00f1ados para este entorno.  <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"e-commerce-stack-shopify-woocommerce-lightspeed\">Pila de comercio electr\u00f3nico (Shopify \/ WooCommerce \/ Lightspeed)  <\/h3>\n\n\n\n<p>Empieza con la configuraci\u00f3n de la capa de datos espec\u00edfica del CMS antes de configurar ninguna etiqueta de la plataforma. Una capa de datos incompleta produce par\u00e1metros que faltan a nivel de servidor, y ninguna configuraci\u00f3n de etiquetas puede compensar eventos que nunca se formaron correctamente aguas arriba. <\/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\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"which-platforms-require-event-deduplication-in-server-side-gtm\">\u00bfQu\u00e9 plataformas requieren deduplicaci\u00f3n de eventos en GTM server-side?  <\/h3>\n\n\n\n<p>Meta (Facebook CAPI), Pinterest, LinkedIn CAPI y Snapchat CAPI requieren la deduplicaci\u00f3n de eventos cuando se ejecutan simult\u00e1neamente el seguimiento del navegador y del servidor. TikTok no admite la deduplicaci\u00f3n y debe configurarse s\u00f3lo en el servidor para evitar recuentos de conversi\u00f3n inflados. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfContenedor web, contenedor servidor o ambos? Comprueba qu\u00e9 necesita tu plataforma para un seguimiento fiable.<\/p>\n","protected":false},"author":10,"featured_media":70544,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[350],"tags":[731],"class_list":["post-70571","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server-side-tracking-es","tag-plataforma-publicitaria"],"acf":[],"_links":{"self":[{"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/posts\/70571","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/comments?post=70571"}],"version-history":[{"count":3,"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/posts\/70571\/revisions"}],"predecessor-version":[{"id":70576,"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/posts\/70571\/revisions\/70576"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/media\/70544"}],"wp:attachment":[{"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/media?parent=70571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/categories?post=70571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/taggrs.io\/es\/wp-json\/wp\/v2\/tags?post=70571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}