<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[NotSet: Ojo al dato]]></title><description><![CDATA["Ojo al Dato" es tu punto de encuentro con lo técnico, donde exploramos aspectos profundos de la recolección de datos sin filtros ni atajos. Aquí te adentrarás en el análisis detallado, con guías prácticas que desglosan desde lo básico hasta lo avanzado. En "Ojo al Dato", no hay verdades absolutas: solo técnicas precisas y recomendaciones para que, con un enfoque claro y aplicable, lleves tu conocimiento al siguiente nivel.]]></description><link>https://notsetrawdata.substack.com/s/ojo-al-dato</link><image><url>https://substackcdn.com/image/fetch/$s_!-poc!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad8b540-2244-475c-8e08-ff8e35e4f80a_1300x1300.jpeg</url><title>NotSet: Ojo al dato</title><link>https://notsetrawdata.substack.com/s/ojo-al-dato</link></image><generator>Substack</generator><lastBuildDate>Sun, 26 Apr 2026 19:45:28 GMT</lastBuildDate><atom:link href="https://notsetrawdata.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Raúl Fernández Molina]]></copyright><language><![CDATA[es]]></language><webMaster><![CDATA[notsetrawdata@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[notsetrawdata@substack.com]]></itunes:email><itunes:name><![CDATA[NotSet]]></itunes:name></itunes:owner><itunes:author><![CDATA[NotSet]]></itunes:author><googleplay:owner><![CDATA[notsetrawdata@substack.com]]></googleplay:owner><googleplay:email><![CDATA[notsetrawdata@substack.com]]></googleplay:email><googleplay:author><![CDATA[NotSet]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[sGTM PreviewEZ: Porque depurar server-side GTM no debería ser un infierno]]></title><description><![CDATA[Simplifica la depuraci&#243;n de GTM server-side con una extensi&#243;n sencilla de utilizar, r&#225;pida y con todo lo necesario para saber qu&#233; ocurre realmente en bambalinas.]]></description><link>https://notsetrawdata.substack.com/p/sgtm-previewez-porque-depurar-server</link><guid isPermaLink="false">https://notsetrawdata.substack.com/p/sgtm-previewez-porque-depurar-server</guid><dc:creator><![CDATA[NotSet]]></dc:creator><pubDate>Sun, 16 Mar 2025 07:06:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!u-Nc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u-Nc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u-Nc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!u-Nc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!u-Nc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!u-Nc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u-Nc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29420,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u-Nc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!u-Nc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!u-Nc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!u-Nc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fae0d22-30ae-4e7f-a78d-7a7491fff511_1024x1024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>La historia detr&#225;s de otra extensi&#243;n que nadie me pidi&#243;</h2><p>Llevo a&#241;os pele&#225;ndome con GTM server-side. Desde que Google lo lanz&#243;, ha sido una monta&#241;a rusa de emociones: primero el subid&#243;n &#8212;"&#161;wow, esto es el futuro!"&#8212;, despu&#233;s la realidad de la implementaci&#243;n &#8212;ese momento en que te preguntas si no estar&#237;as mejor con tu huertecito all&#225; lejos, en la monta&#241;a&#8212;, y finalmente la aceptaci&#243;n de que algunas cosas podr&#237;an ser m&#225;s simples.</p><p>Y ese &#250;ltimo punto es el que me llev&#243; a crear <strong>sGTM PreviewEZ</strong>. Porque, seamos sinceros, el flujo de trabajo para depurar implementaciones server-side es un aut&#233;ntico dolor de muelas.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1>El problema: la realidad del modo vista previa en sGTM</h1><p>Antes de sumergirme en la soluci&#243;n, hablemos de c&#243;mo se depura normalmente GTM server-side. Existen dos m&#233;todos principales:</p><h2>M&#233;todo 1: El cl&#225;sico modo de vista previa de GTM</h2><p>El <a href="https://developers.google.com/tag-platform/tag-manager/server-side/debug?hl=es">m&#233;todo oficial de Google</a> funciona as&#237;:</p><ol><li><p>Abres la interfaz de GTM</p></li><li><p>Seleccionas el contenedor server-side</p></li><li><p>Pulsas <strong>"Preview"</strong></p></li><li><p>Se abre una nueva ventana con el depurador</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8Sgm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8Sgm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 424w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 848w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png" width="1456" height="698" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:698,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65114,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8Sgm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 424w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 848w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li><li><p>Navegas a tu sitio web en la <strong>misma sesi&#243;n del navegador </strong>e interact&#250;as con &#233;l siguiendo el flujo que quieras revisar</p></li><li><p>Las solicitudes que pasan por tu servidor GTM aparecen en la ventana de depuraci&#243;n</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XxPn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XxPn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 424w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 848w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 1272w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XxPn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png" width="1271" height="503" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:503,&quot;width&quot;:1271,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Captura de pantalla que muestra Tag Manager en el modo de vista previa&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Captura de pantalla que muestra Tag Manager en el modo de vista previa" title="Captura de pantalla que muestra Tag Manager en el modo de vista previa" srcset="https://substackcdn.com/image/fetch/$s_!XxPn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 424w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 848w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 1272w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ol><p></p><p>Como explica <a href="https://www.optimizesmart.com/gtm-server-side-preview-mode/">Optimize Smart en su gu&#237;a</a>, este m&#233;todo tiene algunas limitaciones importantes:</p><ul><li><p><strong>Restricci&#243;n a una misma sesi&#243;n</strong>: Solo funciona si navegas directamente desde la ventana de vista previa</p></li><li><p><strong>Problemas con iframes y redirecciones</strong>: Muchas veces se pierde la conexi&#243;n con el depurador</p></li><li><p><strong>No detecta todas las peticiones</strong>: Especialmente las que utilizan <code>sendBeacon</code> o se env&#237;an desde c&#243;digo de servidor</p></li><li><p><strong>Cookies de terceros</strong>: Con las restricciones actuales, el modo preview puede fallar en navegadores que bloquean cookies de terceros</p></li><li><p><strong>Limitaci&#243;n a un solo navegador</strong>: No puedes depurar en dispositivos m&#243;viles u otros navegadores simult&#225;neamente</p></li></ul><h2>M&#233;todo 2: La t&#233;cnica del token manual (X-Gtm-Server-Preview)</h2><p>Para casos m&#225;s complejos, como documenta detalladamente <a href="https://www.analyticsmania.com/post/see-incoming-requests-in-server-gtm-preview-mode-without-cookies/">Julius Fedorovicius en Analytics Mania</a>, existe una t&#233;cnica alternativa usando un header HTTP especial:</p><ol><li><p>Inicias el modo vista previa desde la interfaz de GTM</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8Sgm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8Sgm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 424w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 848w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png" width="1456" height="698" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:698,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65114,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!8Sgm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 424w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 848w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!8Sgm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fe740e0-7194-4e1e-8e25-68be03365f72_2513x1204.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>Clicas en los tres puntos que se ven en la esquina superior derecha y selecciona <em><strong>&#8220;Send Requests manually&#8220;</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CFWK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CFWK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png 424w, https://substackcdn.com/image/fetch/$s_!CFWK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png 848w, https://substackcdn.com/image/fetch/$s_!CFWK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png 1272w, https://substackcdn.com/image/fetch/$s_!CFWK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CFWK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png" width="520" height="229" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:229,&quot;width&quot;:520,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21678,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CFWK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png 424w, https://substackcdn.com/image/fetch/$s_!CFWK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png 848w, https://substackcdn.com/image/fetch/$s_!CFWK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png 1272w, https://substackcdn.com/image/fetch/$s_!CFWK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c29c26a-5619-4be7-bf27-f3644e75e7c2_520x229.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li><li><p>Se te abrir&#225; un pop-up con la cabecera m&#225;gica <code>X-Gtm-Server-Preview</code>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f3CG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f3CG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png 424w, https://substackcdn.com/image/fetch/$s_!f3CG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png 848w, https://substackcdn.com/image/fetch/$s_!f3CG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png 1272w, https://substackcdn.com/image/fetch/$s_!f3CG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f3CG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png" width="792" height="656" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:656,&quot;width&quot;:792,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:126250,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f3CG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png 424w, https://substackcdn.com/image/fetch/$s_!f3CG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png 848w, https://substackcdn.com/image/fetch/$s_!f3CG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png 1272w, https://substackcdn.com/image/fetch/$s_!f3CG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23caab37-9ab0-4e81-ac43-e287c60c3e95_792x656.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>Utiliza este valor codificado como valor de cabecera en tus peticiones</p></li><li><p>Env&#237;a la petici&#243;n directamente al endpoint de tu servidor GTM</p></li><li><p>Las solicitudes que pasen por tu servidor GTM aparecer&#225;n de nuevo en la ventana de depuraci&#243;n</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XxPn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XxPn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 424w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 848w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 1272w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XxPn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png" width="1271" height="503" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:503,&quot;width&quot;:1271,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Captura de pantalla que muestra Tag Manager en el modo de vista previa&quot;,&quot;title&quot;:&quot;Captura de pantalla que muestra Tag Manager en el modo de vista previa&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Captura de pantalla que muestra Tag Manager en el modo de vista previa" title="Captura de pantalla que muestra Tag Manager en el modo de vista previa" srcset="https://substackcdn.com/image/fetch/$s_!XxPn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 424w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 848w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 1272w, https://substackcdn.com/image/fetch/$s_!XxPn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e105637-c83a-43a0-b5f8-bcfaecf38cf3_1271x503.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ol><p></p><p>Esta t&#233;cnica te permite:</p><ul><li><p>Depurar peticiones desde cualquier dispositivo o herramienta (Postman, cURL, etc.)</p></li><li><p>Evitar las limitaciones de cookies y sesiones del navegador</p></li><li><p>Probar directamente contra el endpoint sin necesidad de navegar por el sitio web</p></li><li><p>Enviar datos de prueba incluso cuando el sitio no est&#225; disponible</p></li></ul><p>Sin embargo, como se&#241;ala Julius, este proceso es tedioso y propenso a errores:</p><ul><li><p>Necesitas reconstruir manualmente el token cada vez</p></li><li><p>El formato debe ser exactamente correcto</p></li><li><p>Cada vez que expira el preview (cada hora) debes generar un nuevo token</p></li><li><p>Tienes que modificar manualmente cada petici&#243;n que quieras depurar</p><p></p></li></ul><blockquote><p>Por satisfacer la curiosidad de muchos, este token no es m&#225;s que la combinaci&#243;n del valor de tres cookies &#8212;disponibles en la vista previa de GTM server-side&#8212;:</p><ol><li><p>El par&#225;metro <code>gtm_preview</code>, que suele ser algo como <code>env-XX</code></p></li><li><p>El par&#225;metro <code>gtm_auth </code>compuesto por un c&#243;digo alfanum&#233;rico</p></li><li><p>El par&#225;metro <code>gtm_debug</code>, que no es m&#225;s que otro c&#243;digo alfanum&#233;rico</p></li></ol><p>Bajo el formato: <code>btoa(&#8220;env-XX|gtm_auth_token|gtm_debug_token&#8221;) </code>(codificado en Base64, vaya)</p></blockquote><h1>La soluci&#243;n: automatizar el token sin perder el depurador oficial</h1><p><strong>sGTM PreviewEZ</strong> automatiza precisamente este segundo m&#233;todo. Hace todo el trabajo pesado:</p><ol><li><p>Genera autom&#225;ticamente el token de preview con el formato correcto</p></li><li><p>Lo codifica en Base64</p></li><li><p>Lo inyecta en todas las peticiones que coinciden con tu patr&#243;n configurado</p></li><li><p>Renueva el token autom&#225;ticamente cuando expira</p></li><li><p>Funciona incluso con peticiones <code>sendBeacon</code> que normalmente son dif&#237;ciles de interceptar</p></li></ol><p>Esto significa que puedes disfrutar de todos los beneficios del m&#233;todo manual, sin ninguno de sus inconvenientes:</p><ul><li><p>Depurar peticiones directas a tu endpoint sin navegaci&#243;n previa</p></li><li><p>Probar eventos enviados con <code>sendBeacon</code> (sobre todo si has montado alg&#250;n tipo de proxy o middleware)</p></li><li><p>Mantener el token activo sin tener que renovarlo manualmente (en el peor de los casos, es hacer un simple clic)</p></li><li><p>Interceptar y modificar las peticiones en tiempo real</p></li><li><p>Trabajar con m&#250;ltiples pesta&#241;as y contextos simult&#225;neamente</p></li></ul><h2>C&#243;mo funciona realmente (para los curiosos)</h2><p>Para los que quieran entender el funcionamiento interno, la extensi&#243;n hace lo siguiente:</p><ol><li><p><strong>Autenticaci&#243;n con Google</strong>: Usa las cookies existentes de Chrome para autenticarse con la API de GTM (sin almacenar tus credenciales)</p></li><li><p><strong>Generaci&#243;n de preview</strong>: Solicita un token de preview a trav&#233;s de las APIs oficiales de GTM (las mismas que usa la interfaz web)</p></li><li><p><strong>Construcci&#243;n del token X-Gtm-Server-Preview</strong>: Formatea y codifica en Base64 los par&#225;metros necesarios</p></li><li><p><strong>Interceptaci&#243;n de solicitudes</strong>: Utiliza las capacidades de Chrome para interceptar solicitudes antes de que salgan del navegador</p></li><li><p><strong>Inyecci&#243;n de headers</strong>: A&#241;ade el header <code>X-Gtm-Server-Preview</code> a las solicitudes que coinciden con tu patr&#243;n</p></li><li><p><strong>Monitorizaci&#243;n en tiempo real</strong>: Mantiene un ojo en tus solicitudes para asegurarse de que todo funciona correctamente</p></li></ol><p>Y para los que trabaj&#225;is con cuerpos de petici&#243;n JSON &#8212;&#191;qui&#233;n no hoy en d&#237;a?&#8212;, tambi&#233;n puede inyectar el token directamente en el payload, con tres modos diferentes de inyecci&#243;n para adaptarse a cualquier estructura de datos.</p><h2>Seguridad: la paranoia como filosof&#237;a</h2><p><em>"Esto suena genial, pero... &#191;qu&#233; pasa con mis datos?"</em> &#8212;dice el experto en privacidad que todos llevamos dentro.</p><p>Aqu&#237; va mi respuesta: la extensi&#243;n NO almacena credenciales, NO env&#237;a datos a servidores externos, y NO accede a nada m&#225;s all&#225; de lo estrictamente necesario para funcionar. Todo se procesa localmente en tu navegador.</p><p>El c&#243;digo est&#225; dise&#241;ado para ser lo m&#225;s transparente posible.</p><h1>C&#243;mo empezar a usarla</h1><ol><li><p>Instala la extensi&#243;n desde la <a href="https://chromewebstore.google.com/detail/sgtm-previewez/ipgojnkpoeganedphpmkelnmmfbjcjdk">Chrome Web Store</a></p></li><li><p>Haz clic en el icono de la extensi&#243;n y f&#237;jala en tu navegador</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uzaU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uzaU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png 424w, https://substackcdn.com/image/fetch/$s_!uzaU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png 848w, https://substackcdn.com/image/fetch/$s_!uzaU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png 1272w, https://substackcdn.com/image/fetch/$s_!uzaU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uzaU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png" width="413" height="734" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:734,&quot;width&quot;:413,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63297,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uzaU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png 424w, https://substackcdn.com/image/fetch/$s_!uzaU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png 848w, https://substackcdn.com/image/fetch/$s_!uzaU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png 1272w, https://substackcdn.com/image/fetch/$s_!uzaU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a4f91ab-15d0-4330-9b77-a2934b1a24a6_413x734.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>Introduce tu ID de cuenta GTM (ese primer n&#250;mero que aparece en la URL </p><p>https://tagmanager.google.com/#/container/accounts/<strong>123456789</strong>/containers/987654321/workspaces/4) o tambi&#233;n lo puedes consultar en la secci&#243;n <strong>&#8220;Administrador/Cuenta/Configuraci&#243;n de la cuenta&#8221;</strong> de GTM:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VFmx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VFmx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png 424w, https://substackcdn.com/image/fetch/$s_!VFmx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png 848w, https://substackcdn.com/image/fetch/$s_!VFmx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png 1272w, https://substackcdn.com/image/fetch/$s_!VFmx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VFmx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png" width="923" height="420" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:420,&quot;width&quot;:923,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31110,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VFmx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png 424w, https://substackcdn.com/image/fetch/$s_!VFmx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png 848w, https://substackcdn.com/image/fetch/$s_!VFmx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png 1272w, https://substackcdn.com/image/fetch/$s_!VFmx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e887e2-8ac1-48c7-8efc-1e112f709512_923x420.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>Selecciona tu contenedor server-side:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_9TN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_9TN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png 424w, https://substackcdn.com/image/fetch/$s_!_9TN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png 848w, https://substackcdn.com/image/fetch/$s_!_9TN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png 1272w, https://substackcdn.com/image/fetch/$s_!_9TN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_9TN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png" width="520" height="707" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:707,&quot;width&quot;:520,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41688,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_9TN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png 424w, https://substackcdn.com/image/fetch/$s_!_9TN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png 848w, https://substackcdn.com/image/fetch/$s_!_9TN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png 1272w, https://substackcdn.com/image/fetch/$s_!_9TN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bcac68-3748-4ed0-abf8-8292a14ff1fb_520x707.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>Si no tuvieras acceso a la cuenta, saldr&#225; un mensaje de error como este:</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fVnf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fVnf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png 424w, https://substackcdn.com/image/fetch/$s_!fVnf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png 848w, https://substackcdn.com/image/fetch/$s_!fVnf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png 1272w, https://substackcdn.com/image/fetch/$s_!fVnf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fVnf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png" width="518" height="577" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:577,&quot;width&quot;:518,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38572,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fVnf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png 424w, https://substackcdn.com/image/fetch/$s_!fVnf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png 848w, https://substackcdn.com/image/fetch/$s_!fVnf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png 1272w, https://substackcdn.com/image/fetch/$s_!fVnf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc05bded-71e9-4720-8b19-4b556d2e74bd_518x577.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></blockquote></li><li><p>Selecciona el contenedor GTM server-side</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mt4N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mt4N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png 424w, https://substackcdn.com/image/fetch/$s_!mt4N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png 848w, https://substackcdn.com/image/fetch/$s_!mt4N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png 1272w, https://substackcdn.com/image/fetch/$s_!mt4N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mt4N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png" width="520" height="707" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:707,&quot;width&quot;:520,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43762,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mt4N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png 424w, https://substackcdn.com/image/fetch/$s_!mt4N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png 848w, https://substackcdn.com/image/fetch/$s_!mt4N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png 1272w, https://substackcdn.com/image/fetch/$s_!mt4N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0935b9-e69d-45c6-ba23-cc1be5dd9260_520x707.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>Si esta cuenta no tiene contenedor GTM server-side, ver&#225;s un mensaje de error como este:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dH9c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dH9c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png 424w, https://substackcdn.com/image/fetch/$s_!dH9c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png 848w, https://substackcdn.com/image/fetch/$s_!dH9c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png 1272w, https://substackcdn.com/image/fetch/$s_!dH9c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dH9c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png" width="525" height="697" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:697,&quot;width&quot;:525,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48782,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dH9c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png 424w, https://substackcdn.com/image/fetch/$s_!dH9c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png 848w, https://substackcdn.com/image/fetch/$s_!dH9c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png 1272w, https://substackcdn.com/image/fetch/$s_!dH9c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7921cb5-ea08-413a-9fe6-0621b04d8fa0_525x697.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></blockquote></li><li><p>Elige el workspace que quieres depurar:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mbgU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mbgU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png 424w, https://substackcdn.com/image/fetch/$s_!mbgU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png 848w, https://substackcdn.com/image/fetch/$s_!mbgU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png 1272w, https://substackcdn.com/image/fetch/$s_!mbgU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mbgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png" width="553" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:553,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62650,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mbgU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png 424w, https://substackcdn.com/image/fetch/$s_!mbgU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png 848w, https://substackcdn.com/image/fetch/$s_!mbgU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png 1272w, https://substackcdn.com/image/fetch/$s_!mbgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1011f05e-5799-4ec2-b68e-2794db01babe_553x813.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>Configura el patr&#243;n de dominio (ej: <code>*.midominio.com</code>)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yNUh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yNUh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png 424w, https://substackcdn.com/image/fetch/$s_!yNUh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png 848w, https://substackcdn.com/image/fetch/$s_!yNUh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png 1272w, https://substackcdn.com/image/fetch/$s_!yNUh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yNUh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png" width="543" height="809" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:809,&quot;width&quot;:543,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63160,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yNUh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png 424w, https://substackcdn.com/image/fetch/$s_!yNUh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png 848w, https://substackcdn.com/image/fetch/$s_!yNUh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png 1272w, https://substackcdn.com/image/fetch/$s_!yNUh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2987dd2-0c69-4f57-a409-13e66188ba65_543x809.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>&#161;Activa y disfruta!</p></li></ol><p>La extensi&#243;n abrir&#225; autom&#225;ticamente el depurador oficial de GTM Server-Side para que puedas ver los resultados como lo har&#237;as normalmente, pero sin tener que lidiar con la gesti&#243;n manual del token.</p><blockquote><p>Recuerda activar la opci&#243;n de <strong>&#8220;Permitir acceso a URL de archivo&#8221;</strong> para que funcione correctamente todo:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RrQ_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RrQ_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png 424w, https://substackcdn.com/image/fetch/$s_!RrQ_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png 848w, https://substackcdn.com/image/fetch/$s_!RrQ_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png 1272w, https://substackcdn.com/image/fetch/$s_!RrQ_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RrQ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png" width="893" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:893,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47877,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RrQ_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png 424w, https://substackcdn.com/image/fetch/$s_!RrQ_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png 848w, https://substackcdn.com/image/fetch/$s_!RrQ_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png 1272w, https://substackcdn.com/image/fetch/$s_!RrQ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4320f2b6-3b76-4504-a216-8f56526ad9e0_893x490.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></blockquote><h2>Funcionalidades adicionales que facilitan tu vida</h2><ul><li><p><strong>Renovaci&#243;n autom&#225;tica de tokens</strong>: Olv&#237;date de la frustraci&#243;n de los tokens caducados (los tokens siguen caducando a la hora, pero tan solo tienes que recargar tu p&#225;gina para que se actualice la cabecera)</p></li><li><p><strong>Inyecci&#243;n en payload</strong>: Para APIs que no admiten cabeceras personalizadas</p></li><li><p><strong>Compatibilidad con sendBeacon</strong>: Captura eventos que el modo preview tradicional podr&#237;a perder</p></li><li><p><strong>Modo middleware</strong>: Perfecto para quienes trabajan con arquitecturas API m&#225;s complejas</p></li><li><p><strong>Modo debug GA4</strong>: Activa autom&#225;ticamente el modo debug de GA4 para una depuraci&#243;n a&#250;n m&#225;s detallada (en fase de pruebas, as&#237; que es posible que no est&#233; todav&#237;a habilitado correctamente)</p></li></ul><blockquote><p>Si clicas en <strong>&#8220;Open Configuration&#8221;</strong> podr&#225;s ver m&#225;s informaci&#243;n sobre la propiedad GTM server-side, as&#237; como diferentes funcionalidades:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5xtg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5xtg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png 424w, https://substackcdn.com/image/fetch/$s_!5xtg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png 848w, https://substackcdn.com/image/fetch/$s_!5xtg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!5xtg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5xtg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:253790,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5xtg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png 424w, https://substackcdn.com/image/fetch/$s_!5xtg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png 848w, https://substackcdn.com/image/fetch/$s_!5xtg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!5xtg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82584403-8ba9-4694-9834-fb49fc10be5b_2560x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></blockquote><div><hr></div><h2>Bonus Track: Vista mejorada para GA4, Meta y MixPanel</h2><p>Como si automatizar los tokens no fuera suficiente, he a&#241;adido una funcionalidad extra que hace la vida a&#250;n m&#225;s f&#225;cil: un visor mejorado de peticiones, al estilo Omnibug, para las llamadas m&#225;s comunes.</p><p>Cuando trabajas con implementaciones de <strong>GA4</strong>, <strong>Meta</strong> (Facebook) o <strong>MixPanel</strong> a trav&#233;s de GTM server-side, ahora podr&#225;s ver los datos en un formato mucho m&#225;s comprensible y estructurado. En lugar de tener que descifrar el JSON crudo de las peticiones, la extensi&#243;n te presenta los par&#225;metros importantes de forma clara y organizada.</p><p>Por ejemplo, para las llamadas a Meta (Facebook), podr&#225;s ver f&#225;cilmente:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ocU9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ocU9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ocU9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ocU9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ocU9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ocU9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg" width="1456" height="1582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1582,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:156048,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/158867166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ocU9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ocU9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ocU9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ocU9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9581a5ae-8740-4435-bfb4-33616c8f906d_1473x1600.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>El tipo de evento (PageView, Purchase, etc.)</p></li><li><p>La fuente de la acci&#243;n</p></li><li><p>Timestamp del evento</p></li><li><p>Datos de usuario</p></li><li><p>Toda la informaci&#243;n t&#233;cnica relevante</p></li></ul><p>Esto es especialmente &#250;til cuando est&#225;s depurando conversiones o eventos complejos y necesitas confirmar r&#225;pidamente que todos los par&#225;metros se est&#225;n enviando correctamente.</p><p>Esta visualizaci&#243;n mejorada funciona de forma autom&#225;tica: cuando la extensi&#243;n detecta una llamada a uno de estos servicios, reorganiza la informaci&#243;n para que puedas encontrar lo que buscas sin tener que navegar por monta&#241;as de c&#243;digo JSON.</p><p>Consid&#233;ralo un peque&#241;o regalo adicional para hacer tu experiencia de depuraci&#243;n a&#250;n m&#225;s agradable &#128521;.</p><blockquote><p>Esta secci&#243;n est&#225; todav&#237;a en fase beta &#8212;justo estoy trabajando ya corrigiendo algunas cosas en GA4&#8212;, por lo que si ves algo extra&#241;o o que no cuadra, te agradecr&#237;a un mont&#243;n que me contactaras y me dijeras qu&#233; has visto raruno.</p></blockquote><div><hr></div><p></p><p>Y como suelen decir que una imagen vale m&#225;s que mil palabras, aqu&#237; dejo un v&#237;deo (est&#225; difuminado a prop&#243;sito, no te has pasado con el alcohol ni te est&#225; dando un ictus, tranquilo):</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;c8e61ac5-038e-40e0-8945-613db3a060de&quot;,&quot;duration&quot;:null}"></div><p></p><h2>Conclusi&#243;n: el poder est&#225; en los detalles</h2><p>Esta extensi&#243;n no pretende sustituir las herramientas oficiales de Google. Su objetivo es simplemente hacer que el proceso de depuraci&#243;n sea m&#225;s fluido y menos tedioso, para que puedas centrarte en lo importante: <em>solucionar problemas reales</em>.</p><p>&#201;chale un vistazo y si tienes cualquier duda o detectas alg&#250;n <em>bug</em>, h&#225;zmelo saber. </p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/p/sgtm-previewez-porque-depurar-server/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notsetrawdata.substack.com/p/sgtm-previewez-porque-depurar-server/comments"><span>Deja un comentario</span></a></p>]]></content:encoded></item><item><title><![CDATA[El arte de esquivar bloqueadores de publicidad: Parte 3]]></title><description><![CDATA[Tercera y &#250;ltima parte: Limitaciones, contramedidas y la batalla contra la manipulaci&#243;n del DOM.]]></description><link>https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores-parte-3</link><guid isPermaLink="false">https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores-parte-3</guid><dc:creator><![CDATA[NotSet]]></dc:creator><pubDate>Fri, 21 Feb 2025 20:36:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RdH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RdH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RdH2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RdH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp (1024&#215;1024)&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="https://substack-post-media.s3.amazonaws.com/public/images/49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp (1024&#215;1024)" title="https://substack-post-media.s3.amazonaws.com/public/images/49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp (1024&#215;1024)" srcset="https://substackcdn.com/image/fetch/$s_!RdH2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>En los <a href="https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores-parte-2">art&#237;culos anteriores</a>, hemos explorado c&#243;mo implementar una soluci&#243;n basada en proxies para proteger nuestras herramientas anal&#237;ticas y de consentimiento. Pero seamos honestos: no hemos inventado la rueda. Si bien nuestra soluci&#243;n es robusta y est&#225; bien estructurada, sigue siendo vulnerable a bloqueadores m&#225;s sofisticados. Hoy vamos a hablar de estas limitaciones y c&#243;mo podemos fortalecer nuestra defensa.</p><div><hr></div><h2>El tal&#243;n de Aquiles: El CMP como punto &#250;nico de fallo</h2><p>Los bloqueadores de anuncios se han vuelto m&#225;s inteligentes. Muchos, en lugar de intentar bloquear todas las herramientas anal&#237;ticas una por una, han identificado un punto d&#233;bil cr&#237;tico: el <strong>CMP</strong> y han puesto todo de su parte por bloquearlo s&#237; o s&#237;. Aqu&#237; en Europa la l&#243;gica es simple y efectiva: si bloquean el gestor de consentimiento, indirectamente bloquean toda la anal&#237;tica que depende de &#233;l. Es como cortar el agua en la entrada del edificio en lugar de cerrar todos los grifos uno por uno.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jwQB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jwQB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jwQB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jwQB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jwQB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jwQB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg" width="1456" height="507" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:507,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A-9&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A-9" title="A-9" srcset="https://substackcdn.com/image/fetch/$s_!jwQB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jwQB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jwQB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jwQB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3f9f49c-10fe-4232-b8c0-e3e2409c8535_1600x557.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://www.enzuzo.com/blog/google-consent-mode">enzuzo</a></figcaption></figure></div><p>Justo ahora es cuando la cosa se pone interesante: las extensiones modernas y muchos navegadores no se limitan a bloquear solicitudes HTTP. Tambi&#233;n manipulan el DOM e interfieren con los objetos JavaScript que nuestro CMP y nuestras herramientas de anal&#237;tica generan &#8212;como ya hablamos en los anteriores art&#237;culos&#8212;. Pueden:</p><ul><li><p>Ocultar o eliminar el banner de consentimiento</p></li><li><p>Manipular las funciones del objeto JS de nuestro CMP</p></li><li><p>Simular interacciones de usuario para rechazar autom&#225;ticamente las cookies</p></li><li><p>Modificar el almacenamiento local y las cookies</p></li><li><p>Notificar a las herramientas de anal&#237;tica sobre el rechazo del consentimiento</p></li></ul><p>Y para muestra un bot&#243;n:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Ckt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Ckt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png 424w, https://substackcdn.com/image/fetch/$s_!-Ckt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png 848w, https://substackcdn.com/image/fetch/$s_!-Ckt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png 1272w, https://substackcdn.com/image/fetch/$s_!-Ckt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Ckt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png" width="1456" height="1310" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1310,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:576183,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notsetrawdata.substack.com/i/156814778?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Ckt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png 424w, https://substackcdn.com/image/fetch/$s_!-Ckt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png 848w, https://substackcdn.com/image/fetch/$s_!-Ckt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png 1272w, https://substackcdn.com/image/fetch/$s_!-Ckt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d4192b-2133-43d0-ad42-b2b7c3726f01_2037x1833.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Parte del c&#243;digo del navegador DuckDuck Go. Aqu&#237; ten&#233;is el <a href="https://github.com/duckduckgo/autoconsent">enlace</a> a su GitHub</figcaption></figure></div><p>Aqu&#237; os comparto un <a href="https://www.ghostery.com/blog/never-consent-by-ghostery">enlace</a> de Ghostery con m&#225;s informaci&#243;n al respecto.</p><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5f379462-ae2d-48ee-b18b-aae67de1ed5c&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Desmitificando los CMP: todo lo que no te han contado hasta ahora&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:280712290,&quot;name&quot;:&quot;NotSet&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f2cf0b-8630-4bfd-863b-839f496673d9_1523x1523.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-30T06:46:20.106Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa089d250-ee3d-497a-9aaa-f76c8aeade3e_479x403.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://notsetrawdata.substack.com/p/desmitificando-los-cmp&quot;,&quot;section_name&quot;:&quot;Desmitificando&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:150850999,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;NotSet&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad8b540-2244-475c-8e08-ff8e35e4f80a_1300x1300.jpeg&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>
      <p>
          <a href="https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores-parte-3">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[El arte de esquivar bloqueadores de publicidad: Parte 2]]></title><description><![CDATA[Segunda parte: Arquitectura t&#233;cnica para garantizar la continuidad de CMPs, TMS y herramientas anal&#237;ticas en entornos bloqueados.]]></description><link>https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores-parte-2</link><guid isPermaLink="false">https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores-parte-2</guid><dc:creator><![CDATA[NotSet]]></dc:creator><pubDate>Sat, 01 Feb 2025 18:17:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RdH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RdH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RdH2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RdH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RdH2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>En el <strong><a href="https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores">primer art&#237;culo </a></strong>de esta serie, exploramos c&#243;mo funcionan los sistemas de bloqueo de publicidad y recopilaci&#243;n de datos, y establecimos las bases te&#243;ricas para superar estas restricciones utilizando proxies y personalizaciones t&#233;cnicas. En este segundo art&#237;culo, profundizaremos en la implementaci&#243;n pr&#225;ctica de una soluci&#243;n robusta basada en el framework <strong>Flask </strong>&#8212;ay, mi querido Python&#8212;, dise&#241;ada para garantizar que herramientas cr&#237;ticas como <strong>la plataforma de consentimiento </strong>&#8212;Cookiebot en este caso&#8212;, <strong>Google Tag Manager </strong>y <strong>Google Analytics 4 </strong>funcionen sin interrupciones, incluso en entornos con bloqueadores activos. Y para muestra, un bot&#243;n:</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;e923e910-48a5-451d-8ef5-04e78cef6373&quot;,&quot;duration&quot;:null}"></div><div><hr></div><h2><strong>El desaf&#237;o t&#233;cnico de mantener la funcionalidad</strong></h2><p>Los bloqueadores de anuncios y navegadores centrados en la privacidad &#8212;como Ghostery o Brave&#8212; han evolucionado significativamente en los &#250;ltimos a&#241;os. Sus t&#233;cnicas de bloqueo, basadas en patrones regex, manipulaci&#243;n del DOM y limitaciones en las APIs de extensiones, hacen que herramientas como CMPs, GTM y GA4 sean vulnerables a interrupciones. Sin embargo, con una arquitectura bien dise&#241;ada, podemos garantizar que estas herramientas sigan funcionando correctamente, siempre respetando el consentimiento del usuario y cumpliendo con normativas como el GDPR y el CCPA.</p><p>En este art&#237;culo, detallar&#233; c&#243;mo he implementado una soluci&#243;n basada en <strong>proxies en Flask </strong>para gestionar las librer&#237;as de <strong>Cookiebot </strong>, <strong>GTM </strong>y <strong>GA4 </strong>, asegurando un flujo continuo de datos incluso en entornos bloqueados.</p><div><hr></div>
      <p>
          <a href="https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores-parte-2">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[El arte de esquivar bloqueadores de publicidad: Parte 1]]></title><description><![CDATA[Primera parte: C&#243;mo los bloqueadores de anuncios funcionan y la base t&#233;cnica para superarlos, garantizando la continuidad de CMPs y herramientas anal&#237;ticas en entornos restringidos.]]></description><link>https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores</link><guid isPermaLink="false">https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores</guid><dc:creator><![CDATA[NotSet]]></dc:creator><pubDate>Mon, 20 Jan 2025 12:43:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RdH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RdH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RdH2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RdH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:232078,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RdH2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!RdH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b2f9ef-9e2b-4b14-9f0f-a0bf9aaedf24_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>En este primer art&#237;culo de la serie, exploraremos c&#243;mo funcionan los sistemas de bloqueo de publicidad y recopilaci&#243;n de datos, y estableceremos las bases para entender c&#243;mo superarlos utilizando proxies y personalizaciones t&#233;cnicas. Antes de entrar en detalles, es esencial comprender los principios detr&#225;s de las herramientas que bloquean estas peticiones, ya sean extensiones como Adblock Plus o navegadores como Brave. Curiosamente, aunque difieren en implementaci&#243;n, todos se basan en principios similares.</p><h2>&#191;C&#243;mo funcionan los sistemas de bloqueo de peticiones?</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c9l2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c9l2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg 424w, https://substackcdn.com/image/fetch/$s_!c9l2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg 848w, https://substackcdn.com/image/fetch/$s_!c9l2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!c9l2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c9l2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg" width="1456" height="511" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:511,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;5 Best Performing Ad Blockers&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="5 Best Performing Ad Blockers" title="5 Best Performing Ad Blockers" srcset="https://substackcdn.com/image/fetch/$s_!c9l2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg 424w, https://substackcdn.com/image/fetch/$s_!c9l2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg 848w, https://substackcdn.com/image/fetch/$s_!c9l2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!c9l2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeac202d-992f-48ea-aeea-9f96a82d954d_1880x660.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://www.ghostery.com/blog/adblockers-performance-study">Ghostery</a></figcaption></figure></div><p>Antes de meternos en harina, vamos a hacer un repaso sobre las principales t&#233;cnicas utilizadas por extensiones y navegadores para bloquear &#8212;con bastante &#233;xito, todo sea dicho&#8212; las plataformas de consentimiento, herramientas de anal&#237;tica y de terceros en general m&#225;s conocidas del mercado.</p><h4>1. <strong>Bloqueo de requests basado en patrones (Regex)</strong></h4><p>Uno de los enfoques m&#225;s comunes que utilizan las herramientas de bloqueo es escuchar todas las solicitudes salientes (<em>requests</em>) realizadas por el navegador. Luego, comparan estas solicitudes contra una lista de patrones definidos con expresiones regulares (regex) o reglas espec&#237;ficas. Si una URL coincide con un proveedor de anuncios o anal&#237;tica conocido, la request se bloquea antes de que se realice.</p><p><strong>Ejemplo pr&#225;ctico:</strong></p><ul><li><p><strong>URL</strong>: <code>https://www.google-analytics.com/collect</code></p></li><li><p><strong>Regex</strong>: <code>.*google-analytics\.com.*</code></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dqKm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dqKm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png 424w, https://substackcdn.com/image/fetch/$s_!dqKm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png 848w, https://substackcdn.com/image/fetch/$s_!dqKm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png 1272w, https://substackcdn.com/image/fetch/$s_!dqKm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dqKm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png" width="1456" height="1150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1150,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:403775,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dqKm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png 424w, https://substackcdn.com/image/fetch/$s_!dqKm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png 848w, https://substackcdn.com/image/fetch/$s_!dqKm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png 1272w, https://substackcdn.com/image/fetch/$s_!dqKm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a1c8b8-432c-4f16-a7ad-a77424f6b257_2024x1598.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ejemplo de listado de elementos de Adblock Plus</figcaption></figure></div><p>Esto ocurre directamente desde el navegador, interceptando las solicitudes HTTP/HTTPS antes de que lleguen al servidor. Este mecanismo permite bloquear librer&#237;as como las de Google Analytics, OneTrust, o cualquier herramienta de marketing f&#225;cilmente identificable.</p><h4>2. <strong>Interacci&#243;n con objetos JavaScript en el DOM</strong></h4><p>Otra estrategia clave es monitorizar &#8212;o &#250;ltimamente tan solo interactuar con&#8212; los objetos JavaScript que se crean en el Document Object Model (DOM). Estas herramientas pueden identificar y manipular dichos objetos para evitar que env&#237;en datos al servidor, para bloquear el acceso a informaci&#243;n sensible o simplemente interactuar con ellos para simular determinados comportamientos.</p><p><strong>Ejemplo pr&#225;ctico para Cookiebot:</strong></p><pre><code>const CMPFunctions = {
    async detectCmp() {
        return await !!window.Cookiebot;
    },
    async detectPopup() {
        return !window.Cookiebot.hasResponse &amp;&amp; window.Cookiebot.dialog?.visible === true;
    },
    async optOut() {
        await this.wait(500);
        let res = await window.Cookiebot.withdraw() || true; // withdraw
        await this.wait(500); // prevent race conditions
        res = res &amp;&amp; (await window.Cookiebot.hide() || true); // hide
        return res;
    }
};</code></pre><blockquote><p>Este c&#243;digo que he compartido con vosotros, es una &#8220;ligera&#8221; adaptaci&#243;n de lo que hace la extensi&#243;n del fantasma &#8212;que no quiero l&#237;os&#8212; para rechazar cookies en el caso espec&#237;fico de Cookiebot, activ&#225;ndolo previamente desde su interfaz</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dBD_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dBD_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png 424w, https://substackcdn.com/image/fetch/$s_!dBD_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png 848w, https://substackcdn.com/image/fetch/$s_!dBD_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png 1272w, https://substackcdn.com/image/fetch/$s_!dBD_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dBD_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png" width="1456" height="866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:866,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:175122,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dBD_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png 424w, https://substackcdn.com/image/fetch/$s_!dBD_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png 848w, https://substackcdn.com/image/fetch/$s_!dBD_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png 1272w, https://substackcdn.com/image/fetch/$s_!dBD_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09ad0f41-f233-4d7c-a986-aa926fc319aa_1618x962.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></blockquote><h4>3. <strong>Manipulaci&#243;n del DOM para bloquear interacciones</strong></h4><p>El tercer enfoque com&#250;n se centra en interactuar directamente con los elementos del DOM generados por la p&#225;gina. Las herramientas de bloqueo pueden:</p><ul><li><p>Identificar banners o botones del CMP.</p></li><li><p>Simular clics para seleccionar autom&#225;ticamente configuraciones restrictivas (ej., "Denegar todo").</p></li><li><p>Ocultar o eliminar elementos visuales relacionados con anuncios o consentimientos.</p></li></ul><p><strong>Ejemplo pr&#225;ctico tambi&#233;n para Cookiebot:</strong> </p><pre><code> async optIn() {
        if (this.elementExists('#dtcookie-container')) {
            return this.click('.h-dtcookie-accept');
        }

        this.click('.CybotCookiebotDialogBodyLevelButton:not(:checked):enabled', true);
        this.click('#CybotCookiebotDialogBodyLevelButtonAccept');
        this.click('#CybotCookiebotDialogBodyButtonAccept');
        return true;
    }</code></pre><blockquote><p>En este ejemplo, vemos como se puede simular un clic en &#8220;Aceptar&#8221; dentro del banner de Cookiebot. Tambi&#233;n de nuestro amigo el fantasma.</p></blockquote><p></p><h3>Manifest V3 de Google y su impacto en los ad blockers</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_udm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_udm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg 424w, https://substackcdn.com/image/fetch/$s_!_udm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg 848w, https://substackcdn.com/image/fetch/$s_!_udm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg 1272w, https://substackcdn.com/image/fetch/$s_!_udm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_udm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg" width="150" height="150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:150,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_udm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg 424w, https://substackcdn.com/image/fetch/$s_!_udm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg 848w, https://substackcdn.com/image/fetch/$s_!_udm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg 1272w, https://substackcdn.com/image/fetch/$s_!_udm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815e527e-195c-457a-aa00-2218e4c2ba13_1000x1000.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Logo de Chrome Extensions</figcaption></figure></div><p>Lo mismo ahora, despu&#233;s de ver lo que una extensi&#243;n puede llegar a hacer, te preguntas sobre la legalidad de todo esto, y si se est&#225;n tomando medidas al respecto para controlar todo esto. La respuesta es <strong>s&#237;</strong>. En el caso espec&#237;fico de Google, con la actualizaci&#243;n del manifest de sus extensiones a la versi&#243;n 3.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6B1z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6B1z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png 424w, https://substackcdn.com/image/fetch/$s_!6B1z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png 848w, https://substackcdn.com/image/fetch/$s_!6B1z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png 1272w, https://substackcdn.com/image/fetch/$s_!6B1z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6B1z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png" width="960" height="540" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6B1z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png 424w, https://substackcdn.com/image/fetch/$s_!6B1z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png 848w, https://substackcdn.com/image/fetch/$s_!6B1z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png 1272w, https://substackcdn.com/image/fetch/$s_!6B1z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1b6cdb2-dc7c-4c3c-bf62-f1b53cc5eda2_960x540.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Gracias al <strong><a href="https://www.techspot.com/news/104136-google-chrome-finally-transitioning-manifest-v3-introducing-new.html">Manifest V3</a> (MV3)</strong>, Google ha dado un paso significativo para reformar el ecosistema de las extensiones en Chrome. Este cambio afecta directamente a los ad blockers y, en consecuencia, a las soluciones que buscan superar sus restricciones. Pero, &#191;qu&#233; implica realmente el Manifest V3?</p><ol><li><p><strong>Limitaciones t&#233;cnicas para extensiones:</strong></p><ul><li><p>Con el MV3, Google ha reemplazado la API <code>webRequest</code>, ampliamente utilizada por bloqueadores de anuncios para interceptar y modificar solicitudes de red, por la <code>API declarativeNetRequest</code>. Esta nueva API tiene restricciones importantes:</p><ul><li><p>Un l&#237;mite de <strong>30.000 reglas</strong> por extensi&#243;n, lo que puede ser insuficiente para bloquear todos los scripts relacionados con anal&#237;tica y publicidad en sitios web complejos.</p></li><li><p>Menor flexibilidad para aplicar bloqueos din&#225;micos o personalizados.</p></li></ul></li></ul></li><li><p><strong>Privacidad y rendimiento como justificaci&#243;n:</strong></p><ul><li><p>Seg&#250;n <a href="https://developer.chrome.com/docs/extensions/develop/migrate/what-is-mv3?hl=es-419">Google</a>, el MV3 mejora la privacidad y seguridad al limitar el acceso de las extensiones a datos sensibles y, al mismo tiempo, optimiza el rendimiento del navegador al reducir la carga de procesamiento de reglas.</p></li></ul></li><li><p><strong>Impacto en ad blockers:</strong></p><ul><li><p>Los desarrolladores de extensiones de bloqueo han adaptado sus herramientas a las nuevas limitaciones, pero no sin cr&#237;ticas. Herramientas como uBlock Origin han expresado preocupaci&#243;n por la p&#233;rdida de funcionalidades avanzadas que permit&#237;an un bloqueo m&#225;s preciso y din&#225;mico.</p></li></ul></li><li><p><strong>&#191;Un cambio estrat&#233;gico de Google?</strong></p><ul><li><p>Algunos <a href="https://itdconsulting.com/sin-categoria/la-transicion-a-manifest-v3-en-chrome-implicaciones-cambios-y-controversias/">cr&#237;ticos</a> ven el MV3 como una estrategia de Google para proteger su modelo publicitario. Al limitar la capacidad de los bloqueadores de anuncios, m&#225;s anuncios (y scripts anal&#237;ticos) pueden atravesar las barreras y llegar al usuario.</p></li></ul></li></ol><div><hr></div>
      <p>
          <a href="https://notsetrawdata.substack.com/p/el-arte-de-esquivar-bloqueadores">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Entiende la web y captura sus secretos: Solicitudes y Respuestas]]></title><description><![CDATA[Para destacar en el mundo de data collection, necesitas dominar la captura de peticiones web. &#191;Est&#225;s listo para marcar la diferencia sin depender de desarrolladores?]]></description><link>https://notsetrawdata.substack.com/p/entiende-la-web-y-captura-sus-secretos</link><guid isPermaLink="false">https://notsetrawdata.substack.com/p/entiende-la-web-y-captura-sus-secretos</guid><dc:creator><![CDATA[NotSet]]></dc:creator><pubDate>Sun, 29 Dec 2024 09:26:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6lw7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6lw7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6lw7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!6lw7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!6lw7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!6lw7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6lw7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:358642,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6lw7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!6lw7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!6lw7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!6lw7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd67d341b-90e3-4049-97f9-4ba24657593b_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen generar por IA</figcaption></figure></div><div><hr></div><p>Cuando navegamos por una p&#225;gina, nos enfrentamos a un flujo constante de solicitudes y respuestas que hacen posible todo: desde cargar im&#225;genes hasta obtener datos din&#225;micos de una API. Y es que internet es como una gran carretera&#8230; Si trabajas en <strong>data collection</strong>, <strong>anal&#237;tica digital</strong> o simplemente quieres entender mejor c&#243;mo funciona la web, aprender a capturar estas peticiones es una habilidad esencial.</p><p>Hoy te cuento c&#243;mo funciona este sistema, qu&#233; tipos de solicitudes puedes encontrar y, por supuesto, c&#243;mo interceptarlas de manera pr&#225;ctica con ejemplos que uso habitualmente.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">NotSet es una publicaci&#243;n apoyada por lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en suscriptor de contenido gratis o suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="pullquote"><p>"Entender c&#243;mo viajan los datos entre el navegador y el servidor es como aprender a hablar el idioma secreto de la web."</p></div><h2><strong>&#191;C&#243;mo funciona la web? Una historia de solicitudes y respuestas</strong></h2><p>En esencia, cada vez que cargas una p&#225;gina o interact&#250;as con ella, tu navegador env&#237;a una <strong>solicitud (request)</strong> a un servidor. El servidor procesa esa solicitud y env&#237;a una <strong>respuesta (response)</strong> con los datos necesarios: HTML, JSON, im&#225;genes, etc.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_SVx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_SVx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_SVx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_SVx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_SVx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_SVx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg" width="935" height="293" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:293,&quot;width&quot;:935,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;What Is a Server and How Does It Power My Website? | AwardSpace.com&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="What Is a Server and How Does It Power My Website? | AwardSpace.com" title="What Is a Server and How Does It Power My Website? | AwardSpace.com" srcset="https://substackcdn.com/image/fetch/$s_!_SVx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_SVx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_SVx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_SVx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf28bee8-28b9-477f-9877-04f9dec36dd7_935x293.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://www.awardspace.com/kb/what-is-server/">Award Space</a></figcaption></figure></div><p>Los<strong> tipos de solicitudes m&#225;s comunes:</strong></p><ul><li><p><strong>GET:</strong> Pide datos al servidor. Ejemplo: cargar una p&#225;gina o buscar productos.</p></li><li><p><strong>POST:</strong> Env&#237;a datos al servidor. Ejemplo: enviar un formulario o guardar una compra.</p></li><li><p><strong>AJAX:</strong> Solicitudes din&#225;micas sin recargar la p&#225;gina. Ejemplo: actualizar solo parte de una p&#225;gina en una SPA.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rpw6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rpw6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rpw6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rpw6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rpw6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rpw6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to use $.ajax() - DEV Community&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to use $.ajax() - DEV Community" title="How to use $.ajax() - DEV Community" srcset="https://substackcdn.com/image/fetch/$s_!rpw6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rpw6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rpw6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rpw6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bd29fb-9f6e-4623-ac6a-c964958906ef_3000x1500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://dev.to/williamragstad/how-to-use-ajax-3b5e">DEV</a></figcaption></figure></div><h3><strong>&#191;Qu&#233; es una API? (Explicado para mortales)</strong></h3><p>Una <a href="https://www.redhat.com/en/topics/api/what-are-application-programming-interfaces">API</a> (Application Programming Interface) es, b&#225;sicamente, un conjunto de reglas que permite a diferentes sistemas hablar entre s&#237;. Piensa en ella como <em>un camarero que lleva tus pedidos (solicitudes) a la cocina (el servidor) y te trae la comida (respuesta) </em>&#8212;este es, sin duda, mi s&#237;mil favorito para explicar a la gente c&#243;mo funciona internet&#8212;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!57e1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!57e1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif 424w, https://substackcdn.com/image/fetch/$s_!57e1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif 848w, https://substackcdn.com/image/fetch/$s_!57e1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif 1272w, https://substackcdn.com/image/fetch/$s_!57e1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!57e1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif" width="1440" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14423,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/avif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!57e1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif 424w, https://substackcdn.com/image/fetch/$s_!57e1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif 848w, https://substackcdn.com/image/fetch/$s_!57e1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif 1272w, https://substackcdn.com/image/fetch/$s_!57e1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d46cdf7-3ecd-4d7e-a577-c89f6c39d225_1440x810.avif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://www.akamai.com/glossary/how-do-apis-work">Akamai</a></figcaption></figure></div><p>Un ejemplo:</p><ul><li><p><strong>Petici&#243;n:</strong> "Quiero los productos m&#225;s vendidos en esta categor&#237;a."</p></li><li><p><strong>Respuesta:</strong> Una lista en formato JSON con esos productos.</p></li></ul><blockquote><p>Entender c&#243;mo las APIs env&#237;an y reciben datos es clave para capturar informaci&#243;n &#250;til para tu estrategia de datos. Y esto no lo digo yo; seg&#250;n un estudio de <a href="https://blog.educacionit.com/mas-del-70-de-las-empresas-ya-utilizan-apis-para-desarrollar-aplicaciones/">CA Technologies</a>, en 2016, m&#225;s del 70% de las empresas ya utilizaban APIs para desarrollar aplicaciones; as&#237; que imag&#237;nate ahora&#8230;</p></blockquote><p></p><h2><strong>C&#243;mo capturar peticiones en la pr&#225;ctica</strong></h2><p>Ya es hora de pasar a la acci&#243;n. Aqu&#237; tienes dos t&#233;cnicas clave para interceptar solicitudes: <strong>DevTools</strong> &#8212;la forma manual que se suele utilizar para auditar sitios web o para comprobar si una implementaci&#243;n se ha realizado correctamente&#8212; y <strong>c&#243;digo JavaScript</strong> &#8212;mi favorita, donde puedes hacer aut&#233;ntica magia&#8212;.</p><h3><strong>Capturar peticiones con DevTools</strong></h3><p>Cuando se trata de <strong>auditar sitios web</strong>, el navegador es tu mejor aliado. En el panel de red puedes ver todas las solicitudes realizadas por una p&#225;gina.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x3CK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x3CK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png 424w, https://substackcdn.com/image/fetch/$s_!x3CK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png 848w, https://substackcdn.com/image/fetch/$s_!x3CK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png 1272w, https://substackcdn.com/image/fetch/$s_!x3CK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x3CK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png" width="1456" height="778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:778,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Network features reference | Chrome DevTools | Chrome for Developers&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Network features reference | Chrome DevTools | Chrome for Developers" title="Network features reference | Chrome DevTools | Chrome for Developers" srcset="https://substackcdn.com/image/fetch/$s_!x3CK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png 424w, https://substackcdn.com/image/fetch/$s_!x3CK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png 848w, https://substackcdn.com/image/fetch/$s_!x3CK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png 1272w, https://substackcdn.com/image/fetch/$s_!x3CK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075843a7-d3ac-4cfd-ac9c-016b92df5a17_1702x910.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>C&#243;mo hacerlo:</strong></p><ol><li><p>Abre las herramientas de desarrollo (F12 en la mayor&#237;a de navegadores).</p></li><li><p>Ve a la pesta&#241;a "Network" o "Red".</p></li><li><p>Realiza una acci&#243;n en la p&#225;gina (como un clic o recarga).</p></li><li><p>Observa las solicitudes en tiempo real.</p></li></ol><p>&#191;Quieres saber qu&#233; datos viajan en esas solicitudes? Haz clic en una de ellas y revisa el apartado "Payload" (lo que el navegador env&#237;a) o "Response" (lo que el servidor devuelve).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3_xS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3_xS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png 424w, https://substackcdn.com/image/fetch/$s_!3_xS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png 848w, https://substackcdn.com/image/fetch/$s_!3_xS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!3_xS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3_xS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png" width="1456" height="888" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;What's New In DevTools (Chrome 96) | Blog | Chrome for Developers&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="What's New In DevTools (Chrome 96) | Blog | Chrome for Developers" title="What's New In DevTools (Chrome 96) | Blog | Chrome for Developers" srcset="https://substackcdn.com/image/fetch/$s_!3_xS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png 424w, https://substackcdn.com/image/fetch/$s_!3_xS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png 848w, https://substackcdn.com/image/fetch/$s_!3_xS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!3_xS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4abf57-90a6-44b2-bc65-4d475ddc33cd_1876x1144.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zh7V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zh7V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png 424w, https://substackcdn.com/image/fetch/$s_!Zh7V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png 848w, https://substackcdn.com/image/fetch/$s_!Zh7V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!Zh7V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zh7V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png" width="1456" height="872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:872,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Network features reference | Chrome DevTools | Chrome for Developers&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Network features reference | Chrome DevTools | Chrome for Developers" title="Network features reference | Chrome DevTools | Chrome for Developers" srcset="https://substackcdn.com/image/fetch/$s_!Zh7V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png 424w, https://substackcdn.com/image/fetch/$s_!Zh7V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png 848w, https://substackcdn.com/image/fetch/$s_!Zh7V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!Zh7V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67dc4358-6dec-4502-9836-46e3651dbb51_1904x1140.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Capturar peticiones con </strong><code>fetch</code><strong>, </strong><code>XMLHttpRequest </code>y <code>sendBeacon</code></h3><p>Si quieres automatizar el an&#225;lisis o capturar datos en tiempo real, puedes interceptar solicitudes usando JavaScript. Para ello se utilizan distintos m&#233;todos, cada uno con sus propias caracter&#237;sticas y ventajas&#8230; A continuaci&#243;n, te explico los tres m&#225;s conocidos &#8212;y utilizados&#8212;. </p><blockquote><p><strong>Importante</strong>: Si intentas interceptar cualquier petici&#243;n a trav&#233;s de un TMS client-side, ten en cuenta que este c&#243;digo se ejecutar&#225; en tu p&#225;gina despu&#233;s de que se haya cargado tu gestor de etiquetas, por lo que solo podr&#225;s capturar solicitudes a partir de ese momento. Si quieres capturar lo que ha ocurrido anteriormente, te aconsejo utilizar la API <a href="https://developer.mozilla.org/en-US/docs/Web/API/Performance">performance</a> con su m&#233;todo <code>getEntries()</code>:</p><pre><code>const entries = performance.getEntries();
entries.forEach(entry =&gt; {
    console.debug(`Solicitud capturada: ${entry.name}, tipo: ${entry.initiatorType}`);
});</code></pre></blockquote><p></p><h4><strong>Interceptando </strong><code>fetch</code></h4><p>El m&#233;todo <code>fetch</code> es el est&#225;ndar moderno para realizar solicitudes basadas en <em>promesas</em> &#8212;s&#237;, s&#237;, como lees&#8212;, por lo que funciona bastante bien con peticiones as&#237;ncronas. La elecci&#243;n moderna y flexible para la mayor&#237;a de solicitudes.</p><p>Aqu&#237; te muestro c&#243;mo capturarlas:</p><pre><code>// Guardamos el m&#233;todo fetch original
const originalFetch = window.fetch;

// Reemplazamos fetch con nuestra versi&#243;n personalizada
window.fetch = function (...args) {
    console.debug('Interceptando solicitud a:', args[0]); // URL de la solicitud

    // Continuamos con la solicitud original
    return originalFetch.apply(this, args).then(response =&gt; {
        console.debug('Respuesta interceptada:', response);
        return response;
    });
};</code></pre><blockquote><p>Esto te permitir&#225; ver cada solicitud que se realiza con <code>fetch</code>, adem&#225;s de analizar las respuestas. Cuando trabajaba en consultor&#237;a, este era uno de mis c&#243;digos de cabecera cuando no pod&#237;a contar con el equipo de desarrollo del cliente. De esta forma, pod&#237;a interceptar cualquier llamada que se realizara y as&#237; crear mis propios <em>triggers</em> o incluso modificar la respuesta de alguna petici&#243;n antes de que se llegara a ejecutar.</p></blockquote><p></p><h4><strong>Interceptando </strong><code>XMLHttpRequest</code></h4><p>Aunque cada vez menos com&#250;n, <code>XMLHttpRequest</code> se sigue utilizando en muchas p&#225;ginas &#8212;es el padre del <code>fetch</code>, por mucho que nos pese&#8212;. Si necesitas compatibilidad con navegadores antiguos, este es tu m&#233;todo.</p><p>As&#237; puedes capturarlo:</p><pre><code>// Guardamos el m&#233;todo open original
const originalOpen = XMLHttpRequest.prototype.open;

// Reemplazamos open con nuestra versi&#243;n personalizada
XMLHttpRequest.prototype.open = function (...args) {
    console.debug('Interceptando XHR a:', args[1]); // URL de la solicitud
    return originalOpen.apply(this, args);
};</code></pre><blockquote><p>Si bien es cierto que cada vez m&#225;s <em>frameworks</em> lo han reemplazado por <code>fetch</code>, muchas p&#225;ginas web siguen utiliz&#225;ndolo, por lo que no est&#225; de m&#225;s saber c&#243;mo interceptarlo, &#191;no?</p><p>Sin ir m&#225;s lejos, en Angular 17.3 se ha producido un cambio importante: el HttpClient ahora usa <code>fetch</code> por defecto en lugar de <code>XMLHttpRequest</code>. Este cambio est&#225; relacionado con c&#243;mo Angular ahora maneja internamente las peticiones HTTP usando su propio sistema de transformaci&#243;n antes de que lleguen al nivel de <code>fetch</code>, lo que hace que las t&#233;cnicas tradicionales de interceptaci&#243;n a nivel de cliente no funcionen como antes; por lo que si te enfrentas a este problema y se ha cambiado a <code>withFetch()</code>, llevas las de perder desde cliente, ya que la &#250;nica forma "oficial" de interceptar estas peticiones ahora ser&#237;a: utilizar los interceptores HTTP de Angular o revertir a <code>withXhrBackend()</code>.</p></blockquote><p></p><h4>Interceptando <code>sendBeacon</code></h4><p>La API <code>sendBeacon</code> est&#225; dise&#241;ada para enviar datos al servidor de forma as&#237;ncrona y sin bloquear el hilo principal, lo que la convierte en una excelente opci&#243;n para <strong>data collection</strong>. Es especialmente &#250;til cuando necesitas garantizar que los datos se env&#237;an incluso si el usuario cierra la pesta&#241;a o navega fuera de la p&#225;gina. En este caso, la mejor forma de interceptarlo es as&#237;:</p><pre><code>// Guardamos el m&#233;todo original de sendBeacon
const originalSendBeacon = navigator.sendBeacon;

// Reemplazamos sendBeacon con nuestra versi&#243;n personalizada
navigator.sendBeacon = function (url, data) {
    console.debug('Interceptando sendBeacon:');
    console.debug('URL:', url);
    console.debug('Datos enviados:', data);

    // Puedes analizar o modificar los datos antes de enviarlos
    if (url.includes('/analytics') &amp;&amp; typeof data === 'string') {
        const modifiedData = data.replace('session_end', 'modified_session_end');
        console.debug('Datos modificados:', modifiedData);
        return originalSendBeacon.call(this, url, modifiedData); // Enviamos los datos modificados
    }

    // Continuamos con el env&#237;o original si no hay cambios
    return originalSendBeacon.call(this, url, data);
};
</code></pre><p>Aunque <strong>sendBeacon</strong> es una excelente opci&#243;n, resulta clave conocer sus limitaciones:</p><ol><li><p><strong>Tama&#241;o m&#225;ximo</strong>: Los navegadores tienen l&#237;mites en el tama&#241;o de datos que puedes enviar. Chrome y Firefox permiten hasta 64KB, mientras Safari tiene un l&#237;mite de 2MB. Esto significa que debes ser cuidadoso con la cantidad de datos que intentas enviar en una sola llamada.</p></li><li><p><strong>Soporte de navegadores</strong>: Si bien la adopci&#243;n es bastante buena (m&#225;s del 97% seg&#250;n <a href="https://caniuse.com/?search=sendbeacon">Can I Use</a>), hay que tener en cuenta que Internet Explorer no lo soporta en absoluto. Es recomendable implementar un fallback siempre que se pueda :</p><pre><code>const enviarDatos = (url, datos) =&gt; {
    if (navigator.sendBeacon) {
        return navigator.sendBeacon(url, datos);
    } else {
        // Fallback a fetch
        return fetch(url, {
            method: 'POST',
            body: datos,
            keepalive: true // Importante para garantizar el env&#237;o
        });
    }
};</code></pre></li><li><p><strong>Sin respuesta del servidor</strong>: <code>sendBeacon</code> est&#225; dise&#241;ado para ser <em>fire-and-forget</em>. No devuelve ninguna informaci&#243;n sobre si la petici&#243;n fue exitosa o fall&#243;, lo cual puede ser un problema si necesitas confirmar la recepci&#243;n de datos.</p></li><li><p><strong>M&#233;todo POST &#250;nicamente</strong>: <code>sendBeacon</code> solo puede realizar peticiones POST. Si necesitas otro tipo de m&#233;todo HTTP, deber&#225;s usar <code>fetch</code> o <code>XMLHttpRequest</code>.</p></li><li><p><strong>No puedes establecer headers personalizados</strong>: A diferencia de <code>fetch</code>, no puedes configurar headers espec&#237;ficos, lo que puede ser limitante para algunas implementaciones.</p></li></ol><blockquote><p>Reconozco que soy muy fan de <code>sendBeacon </code>&#8212;el hecho de que sea as&#237;ncrono y no tengas que esperar a la respuesta del servidor para garantizar su env&#237;o me parece un plus para cualquier herramienta de anal&#237;tica&#8212;. De hecho, lo mismo en alg&#250;n art&#237;culo futuro cuento c&#243;mo hago yo para sustituir todas las <em>request</em> de los cl&#225;sicos collect de GA4 a <code>sendBeacon</code>. Esto para m&#237; resulta clave, sobre todo si quieres trabajar con <strong>GTM server-side</strong>.</p></blockquote><div><hr></div><h3><strong>Casos pr&#225;cticos en data collection</strong></h3><p>Lo mismo te est&#225;s preguntado para qu&#233; sirve todo esto, &#191;no? Aqu&#237; tienes algunos ejemplos reales:</p><p></p><h4><strong>&#8226; Auditar datos enviados a terceros:</strong></h4><p>Identifica qu&#233; datos est&#225; enviando tu sitio y aseg&#250;rate de que cumplen con la normativa (GDPR, por ejemplo) o que los datos llegan correctamente a su destino. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Ne7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Ne7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png 424w, https://substackcdn.com/image/fetch/$s_!-Ne7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png 848w, https://substackcdn.com/image/fetch/$s_!-Ne7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png 1272w, https://substackcdn.com/image/fetch/$s_!-Ne7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Ne7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png" width="1456" height="348" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:549674,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Ne7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png 424w, https://substackcdn.com/image/fetch/$s_!-Ne7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png 848w, https://substackcdn.com/image/fetch/$s_!-Ne7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png 1272w, https://substackcdn.com/image/fetch/$s_!-Ne7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1da22525-41a9-43ba-a36f-4ff957acc629_2555x611.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><blockquote><p>Vale, s&#237;, tal vez sea un <em>carca</em> y me digas que para eso tenemos extensiones &#8212;<a href="https://omnibug.io/">Omnibug</a> sin duda es mi favorita&#8212;. Pero muchas veces tenemos que identificar determinadas <em>requests</em> <strong>ad-hoc</strong> y, lamentablemente, no suele haber extensiones para ello (aunque siempre puedes crear tu propia extensi&#243;n, amigo m&#237;o).</p></blockquote><p></p><h4><strong>&#8226; Recuperar identificadores &#250;nicos:</strong></h4><p>Usa las respuestas para capturar datos como <code>userId</code> o <code>sessionId</code> y enviarlos al <code>dataLayer</code>.</p><pre><code>window.dataLayer = window.dataLayer || [];
fetch('/api/user-info').then(response =&gt; response.json()).then(data =&gt; {
    window.dataLayer.push({ userId: data.id });
    console.debug('Usuario capturado:', data.id);
});</code></pre><blockquote><p>Este es un trabajo que, en teor&#237;a, se deber&#237;a de haber implementado en el c&#243;digo fuente de la p&#225;gina; pero, lamentablemente, no siempre es as&#237;. Y es que muchas veces surgen problemas de &#250;ltima hora &#8212;implementaciones de la nada, cambio repentino de proveedores&#8230;</p></blockquote><p></p><h4><strong>&#8226; Redirigir o bloquear solicitudes:</strong></h4><p>Cambia endpoints obsoletos o bloquea solicitudes a endpoints no deseados.</p><pre><code>// Guardamos el m&#233;todo original de sendBeacon
const originalSendBeacon = navigator.sendBeacon;

// Reemplazamos sendBeacon con una versi&#243;n personalizada
navigator.sendBeacon = function (url, data) {
    console.debug('Interceptando sendBeacon:');
    console.debug('URL original:', url);
    console.debug('Datos enviados:', data);

    // Redirigir solicitudes a un nuevo endpoint
    if (url.includes('/old-endpoint')) {
        const newUrl = url.replace('/old-endpoint', '/new-endpoint');
        console.log('Redirigiendo solicitud a:', newUrl);
        return originalSendBeacon.call(this, newUrl, data);
    }

    // Bloquear solicitudes no deseadas
    if (url.includes('/blocked-endpoint')) {
        console.warn('Bloqueando solicitud a endpoint no deseado:', url);
        return false; // Indicamos que no se realiz&#243; la solicitud
    }

    // Continuar con la solicitud original si no cumple las condiciones anteriores
    return originalSendBeacon.call(this, url, data);
};</code></pre><blockquote><p><strong>Importante</strong>: esto que te indico no es la forma recomendable &#8212;aunque haya veces que sea la &#250;nica opci&#243;n disponible, la verdad&#8212;.</p></blockquote><p></p><h3><strong>Optimiza tu estrategia de datos</strong></h3><p>La <strong>captura de peticiones</strong> no es solo una habilidad t&#233;cnica; es una herramienta clave para <strong>auditar</strong>, <strong>enriquecer</strong> y <strong>controlar</strong> los datos que fluyen en tus proyectos. Y cr&#233;eme cuando te digo que no todos entienden de qu&#233; se trata, ni mucho menos saben c&#243;mo hacerlo correctamente.</p><p>&#128073; Si quieres llevar tu estrategia de datos al siguiente nivel, &#161;empieza a explorar estas t&#233;cnicas hoy mismo!</p><div><hr></div><h3><strong>Oye, &#191;y eso de los Proxies?</strong></h3><p>Si has llegado hasta aqu&#237; y quieres llevar tu conocimiento al siguiente nivel, d&#233;jame preguntarte algo: <strong>&#191;te interesa que hablemos de los Proxies en JavaScript?</strong></p><p>Los Proxies permiten interceptar no solo solicitudes, sino tambi&#233;n cualquier operaci&#243;n sobre objetos. Son una herramienta avanzada que podr&#237;a cambiar la forma en que manejas tu estrategia de datos.</p><p>&#128233; D&#233;jame un comentario si te interesa este tema, y prometo dedicarle un art&#237;culo completo.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/p/entiende-la-web-y-captura-sus-secretos/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notsetrawdata.substack.com/p/entiende-la-web-y-captura-sus-secretos/comments"><span>Deja un comentario</span></a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">NotSet es una publicaci&#243;n apoyada por lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en suscriptor de contenido gratis o suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Domina el DOM: alternativas y trucos para interactuar con elementos de tu página]]></title><description><![CDATA[Hoy te traigo un repaso t&#233;cnico y pr&#225;ctico sobre las principales herramientas para acceder al DOM, sus pros, contras, y algunos trucos que uso habitualmente en mis implementaciones.]]></description><link>https://notsetrawdata.substack.com/p/domina-el-dom-alternativas-y-trucos</link><guid isPermaLink="false">https://notsetrawdata.substack.com/p/domina-el-dom-alternativas-y-trucos</guid><dc:creator><![CDATA[NotSet]]></dc:creator><pubDate>Sun, 22 Dec 2024 12:49:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VwxA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VwxA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VwxA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!VwxA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!VwxA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!VwxA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VwxA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134938,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VwxA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!VwxA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!VwxA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!VwxA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3bd1e86-6284-4b66-8467-ae9498d6565f_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen generada por IA</figcaption></figure></div><div><hr></div><p>Una de las bases de cualquier implementaci&#243;n t&#233;cnica en el mundo digital es sin duda la interacci&#243;n con el DOM (Document Object Model). Ya sea para capturar interacciones, construir una capa de datos din&#225;mica o simplemente manipular elementos, entender c&#243;mo acceder al DOM y usarlo correctamente puede marcar la diferencia entre una soluci&#243;n robusta y un caos lleno de <a href="https://notsetrawdata.substack.com/p/race-conditions-en-data-collection">race conditions</a>. Para interactuar con el DOM, lo primero es identificar correctamente los elementos que necesitas manipular. Y aqu&#237; es donde entran en juego los IDs y las clases.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iiE1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iiE1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png 424w, https://substackcdn.com/image/fetch/$s_!iiE1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png 848w, https://substackcdn.com/image/fetch/$s_!iiE1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png 1272w, https://substackcdn.com/image/fetch/$s_!iiE1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iiE1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png" width="1200" height="1241" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1241,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Document Object Model - Wikipedia&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Document Object Model - Wikipedia" title="Document Object Model - Wikipedia" srcset="https://substackcdn.com/image/fetch/$s_!iiE1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png 424w, https://substackcdn.com/image/fetch/$s_!iiE1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png 848w, https://substackcdn.com/image/fetch/$s_!iiE1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png 1272w, https://substackcdn.com/image/fetch/$s_!iiE1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c087641-391d-4e81-8f2f-60fd57bbecf5_1200x1241.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://en.wikipedia.org/wiki/Document_Object_Model">Wikipedia</a></figcaption></figure></div><div class="pullquote"><p><em>&#171;Si en un aut&#233;ntico Maestro Jedi Digital llegar a ser quieres, interactuar con el DOM aprender debes&#187;</em>. </p></div><h2><strong>&#191;Qu&#233; son los IDs y las clases en el DOM?</strong></h2><p>Antes de meternos en harina con los m&#233;todos para acceder al DOM, es importante entender dos conceptos clave: <strong>ID</strong> y <strong>class</strong>. Son atributos fundamentales en HTML que sirven para identificar y agrupar elementos dentro de una p&#225;gina.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">NotSet es una publicaci&#243;n apoyada por lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en suscriptor de contenido gratis o suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><strong>ID: Un identificador &#250;nico</strong></h3><p>El atributo <code>id</code> se utiliza para identificar <strong>de manera &#250;nica</strong> un elemento en una p&#225;gina. Cada <code>id</code> debe ser &#250;nico dentro del DOM, lo que significa que no puede repetirse en otros elementos.</p><p><strong>Ejemplo en HTML:</strong></p><pre><code>&lt;div id="header"&gt;Este es el encabezado&lt;/div&gt;
&lt;p id="intro"&gt;Este es el p&#225;rrafo de introducci&#243;n&lt;/p&gt;</code></pre><h4><strong>C&#243;mo seleccionarlo en JavaScript:</strong></h4><ul><li><p>Usando <code>getElementById</code>:</p></li></ul><pre><code>const header = document.getElementById('header');
console.log(header.textContent); // Salida: Este es el encabezado</code></pre><ul><li><p>Usando <code>querySelector</code>:</p></li></ul><pre><code>const header = document.querySelector('#header');
console.log(header.textContent); // Salida: Este es el encabezado</code></pre><blockquote><p><strong>Nota:</strong> En <code>querySelector</code>, los IDs siempre se seleccionan con <code>#</code> antes del nombre del ID.</p></blockquote><p></p><h3><strong>Class: Agrupando elementos</strong></h3><p>El atributo <code>class</code> se utiliza para agrupar elementos que comparten caracter&#237;sticas similares. A diferencia de los IDs, las clases <strong>pueden repetirse</strong> en m&#250;ltiples elementos.</p><p><strong>Ejemplo en HTML:</strong></p><pre><code>&lt;div class="item"&gt;Elemento 1&lt;/div&gt;
&lt;div class="item highlighted"&gt;Elemento 2&lt;/div&gt;
&lt;div class="item"&gt;Elemento 3&lt;/div&gt;</code></pre><h4><strong>C&#243;mo seleccionarlo en JavaScript:</strong></h4><ul><li><p>Usando <code>getElementsByClassName</code>:</p></li></ul><pre><code>const items = document.getElementsByClassName('item');
console.log(items.length); // Salida: 3</code></pre><ul><li><p>Usando <code>querySelector</code> o <code>querySelectorAll</code>:</p></li></ul><pre><code>const firstItem = document.querySelector('.item'); // Selecciona el primer elemento con la clase "item"
const allItems = document.querySelectorAll('.item'); // Selecciona todos los elementos con la clase "item"
console.log(allItems.length); // Salida: 3</code></pre><blockquote><p><strong>Nota:</strong> En <code>querySelector</code> y <code>querySelectorAll</code>, las clases se seleccionan con un <code>.</code> antes del nombre de la clase.</p></blockquote><p></p><h3><strong>Clases combinadas y espacios en selectores</strong></h3><p>A veces los elementos tienen m&#250;ltiples clases. En esos casos:</p><ul><li><p>Los espacios entre clases en el HTML se traducen a <code>.</code> en los selectores CSS.</p></li></ul><p><strong>Ejemplo en HTML:</strong></p><pre><code>&lt;div class="item highlighted"&gt;Elemento destacado&lt;/div&gt;</code></pre><h4><strong>C&#243;mo seleccionarlo en JavaScript:</strong></h4><ul><li><p>Para seleccionar un elemento que tiene ambas clases:</p></li></ul><pre><code>const highlightedItem = document.querySelector('.item.highlighted');
console.log(highlightedItem.textContent); // Salida: Elemento destacado</code></pre><blockquote><p><strong>Nota importante:</strong> Si solo pones una de las clases (<code>.item</code> o <code>.highlighted</code>), seleccionar&#225; cualquier elemento que tenga esa clase, sin importar si tiene otras.</p></blockquote><p></p><h3><strong>Resumiendo: &#191;Cu&#225;ndo usar ID o class?</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DQiM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DQiM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DQiM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DQiM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DQiM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DQiM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg" width="475" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:475,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Difference Between id and class in CSS - Pediaa.Com&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Difference Between id and class in CSS - Pediaa.Com" title="Difference Between id and class in CSS - Pediaa.Com" srcset="https://substackcdn.com/image/fetch/$s_!DQiM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DQiM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DQiM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DQiM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20f551-86f1-46e5-90dd-6c5fcf5e9b06_475x378.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://pediaa.com/difference-between-id-and-class-in-css/">Pediaa</a></figcaption></figure></div><ul><li><p><strong>ID:</strong> Para identificar elementos &#250;nicos en la p&#225;gina, como un encabezado, un formulario o un bot&#243;n espec&#237;fico.</p></li><li><p><strong>Class:</strong> Para agrupar elementos similares o aplicar estilos y comportamientos repetidos, como botones de navegaci&#243;n, listas de productos, etc.</p></li></ul><h2><strong>M&#233;todos b&#225;sicos para acceder al DOM</strong></h2><p>Y ahora s&#237;, estos son los m&#233;todos m&#225;s conocidos &#8212;y, en mi opini&#243;n, imprescindibles si quieres trabajar en <em>data collection</em>&#8212; para acceder y capturar elementos del DOM. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DWXo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DWXo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png 424w, https://substackcdn.com/image/fetch/$s_!DWXo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png 848w, https://substackcdn.com/image/fetch/$s_!DWXo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png 1272w, https://substackcdn.com/image/fetch/$s_!DWXo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DWXo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png" width="1025" height="253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:253,&quot;width&quot;:1025,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51550,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DWXo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png 424w, https://substackcdn.com/image/fetch/$s_!DWXo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png 848w, https://substackcdn.com/image/fetch/$s_!DWXo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png 1272w, https://substackcdn.com/image/fetch/$s_!DWXo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fc66573-50d6-4fbb-9628-e823bb977f12_1025x253.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h4><code>getElementById</code></h4><p>El cl&#225;sico de los cl&#225;sicos. Accede a un &#250;nico elemento por su <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById">ID</a>.<br>Ejemplo:</p><pre><code>// Selecciona el elemento con el ID "header" y cambia su texto
const header = document.getElementById('header');
header.textContent = 'Nuevo t&#237;tulo';</code></pre><p><strong>Pros:</strong></p><ul><li><p>Muy r&#225;pido, ideal si sabes que el ID es &#250;nico y constante.</p></li></ul><p><strong>Contras:</strong></p><ul><li><p>Limitado a IDs, sin soporte para selectores m&#225;s complejos.</p></li></ul><blockquote><p>Mi recomendaci&#243;n es asegurarse de que el ID sea &#250;nico. De lo contrario, la puedes liar &#8212;ya que te devolver&#225; un <code>null</code> en caso de que no encuentre el elemento que le indicas&#8212;.</p></blockquote><p></p><h4><code>getElementsByClassName</code><strong> y </strong><code>getElementsByTagName</code></h4><p>Recuperan listas de elementos por <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName">clase</a> o <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName">etiqueta</a>.<br>Ejemplos:</p><pre><code>// Selecciona todos los elementos con la clase "item" y cambia su color de fondo
const items = document.getElementsByClassName('item');
for (let i = 0; i &lt; items.length; i++) {
    items[i].style.backgroundColor = 'lightblue';
}</code></pre><pre><code>// Selecciona todos los elementos `&lt;p&gt;` y los oculta
const paragraphs = document.getElementsByTagName('p');
for (let i = 0; i &lt; paragraphs.length; i++) {
    paragraphs[i].style.display = 'none';
}
</code></pre><p><strong>Pros:</strong></p><ul><li><p>M&#225;s flexible que <code>getElementById</code>.</p></li></ul><p><strong>Contras:</strong></p><ul><li><p>Devuelven una colecci&#243;n HTML (no un array), lo que puede ser menos pr&#225;ctico para trabajar.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oGlc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oGlc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png 424w, https://substackcdn.com/image/fetch/$s_!oGlc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png 848w, https://substackcdn.com/image/fetch/$s_!oGlc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png 1272w, https://substackcdn.com/image/fetch/$s_!oGlc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oGlc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png" width="1386" height="348" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:1386,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97819,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oGlc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png 424w, https://substackcdn.com/image/fetch/$s_!oGlc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png 848w, https://substackcdn.com/image/fetch/$s_!oGlc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png 1272w, https://substackcdn.com/image/fetch/$s_!oGlc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3eecd21-b9eb-4f56-8a45-e23cc93e31d2_1386x348.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>Personalmente, no soy muy partidario de este m&#233;todo y prefiero trabajar con <code>querySelector</code> y &#8212;sobre todo&#8212; <code>querySelectoAll</code> ya que, aunque a nivel de rendimiento puede ser peor, es mucho m&#225;s c&#243;modo y sencillo de trabajar.</p></blockquote><p></p><h4><code>querySelector</code><strong> y </strong><code>querySelectorAll</code></h4><p>Los reyes de la versatilidad, permiten usar selectores CSS para encontrar elementos. La principal diferencia es que con <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector">querySelector</a> accedes al primer elemento, mientras que con <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll">querySelectorAll</a> puedes acceder a todos los elementos de la selecci&#243;n.<br>Ejemplos:</p><pre><code>// Selecciona el primer elemento con el selector CSS ".menu-item" y cambia su texto
const menuItem = document.querySelector('.menu-item');
menuItem.textContent = 'Primer &#237;tem actualizado';</code></pre><pre><code>// Selecciona todos los elementos con el selector CSS ".menu-item" y los resalta
const menuItems = document.querySelectorAll('.menu-item');
menuItems.forEach(item =&gt; {
    item.style.color = 'red';
});</code></pre><p><strong>Pros:</strong></p><ul><li><p>Compatibles con cualquier selector CSS.</p></li><li><p><code>querySelectorAll</code> devuelve un <code>NodeList</code>, iterable f&#225;cilmente con <code>Array.from</code>.</p></li></ul><p><strong>Contras:</strong></p><ul><li><p>Menor rendimiento que los m&#233;todos anteriores si la estructura del DOM es masiva.</p></li></ul><blockquote><p>Los reyes en esto de capturar elementos si lugar a dudas, pero no los &#250;nicos que hay ni mucho menos&#8230; En p&#225;ginas con muchas etiquetas &#8212;o SPAs interminables&#8212;, se puede convertir en una aut&#233;nica odisea, ya que ralentiza mucho la recuperaci&#243;n de datos y puede afectar al rendimiento del site.</p></blockquote><p></p><h3><strong>M&#233;todos avanzados para situaciones especiales</strong></h3><p>Si conoces estos m&#233;todos &#8212;y los has utilizado alguna vez&#8212;, mi m&#225;s sincera enhorabuena; significa que te has tenido que pegar mucho con el DOM y ya dispones de muchas m&#225;s herramientas para acceder e interactuar con las p&#225;ginas web.</p><h4><code>closest()</code></h4><p>Encuentra el <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/closest">ancestro</a> m&#225;s cercano de un elemento que coincida con un selector.<br>Ejemplo:</p><pre><code><code>const button = document.querySelector('button'); 
const form = button.closest('form');</code></code></pre><blockquote><p>Perfecto para navegar hacia arriba en el DOM y mantener tus selectores limpios. Lo m&#225;s importante aqu&#237; es <strong>identificar al elemento &#8220;padre&#8221;</strong> para luego buscar lo que quieres.</p></blockquote><p></p><h4><code>MutationObserver</code></h4><p>Cuando trabajas con p&#225;ginas din&#225;micas, este <a href="https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver">m&#233;todo</a> te salva la vida. Permite "escuchar" cambios en el DOM y reaccionar a ellos en tiempo real.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q35h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q35h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q35h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q35h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q35h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q35h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg" width="1024" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to use Javascript Mutation observer - Simplify Script&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to use Javascript Mutation observer - Simplify Script" title="How to use Javascript Mutation observer - Simplify Script" srcset="https://substackcdn.com/image/fetch/$s_!q35h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q35h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q35h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q35h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38ec4260-bddc-41f5-80d2-9ea9ea754488_1024x576.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://simplifyscript.com/blogs/implementing-a-basic-mutation-observer/">SimplifyScript</a></figcaption></figure></div><p>Ejemplo b&#225;sico:</p><pre><code><code>const observer = new MutationObserver((mutations) =&gt; {
    mutations.forEach((mutation) =&gt; {
        console.log(mutation);
    });
});

observer.observe(document.body, { childList: true, subtree: true });</code></code></pre><blockquote><p>El rey de las SPA. Muy socorrido, adem&#225;s de para acceder a elementos espec&#237;ficos, como trigger para accionar eventos y escuchar qu&#233; ocurre en tu p&#225;gina. Si trabajas con Angular, Node, Astro&#8230;, sin duda es tu mejor aliado.</p></blockquote><p></p><h4><code>document.evaluate</code> (XPath)</h4><p>Una <a href="https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator/evaluate">opci&#243;n</a> muy poco conocida para seleccionar nodos mediante expresiones <a href="https://www.mclibre.org/consultar/xml/lecciones/xml-xpath.html">XPath</a>.<br><strong>Pros:</strong></p><ul><li><p>Preciso, ideal para estructuras complejas donde los selectores CSS no son suficientes.</p></li></ul><p><strong>Contras:</strong></p><ul><li><p>Sintaxis m&#225;s compleja, menos intuitiva que los selectores CSS.</p></li></ul><pre><code>const xpathExpression = '//div[@data-role="admin" and contains(text(), "Panel")]';
const result = document.evaluate(
    xpathExpression,
    document,
    null,
    XPathResult.FIRST_ORDERED_NODE_TYPE,
    null
);
console.log(result.singleNodeValue);
</code></pre><blockquote><p><strong>Xpath es un lenguaje</strong> dise&#241;ado espec&#237;ficamente para <strong>localizar nodos en documentos XML</strong>, pero tambi&#233;n funciona perfectamente en HTML gracias a su <strong>estructura basada en nodos</strong>. Y justo por esa naturaleza, muchas veces resulta mejor soluci&#243;n que los selectores CSS (en los que se apoyan <code>querySelector </code>y <code>querySelectorAll</code>), limitados a una estructura descendente. </p><p>De esta forma, con Xpath podr&#225;s:</p><ul><li><p><strong>Navegar hacia abajo</strong>, seleccionando hijos y ascendentes.</p></li><li><p><strong>Navegar hacia arriba</strong>, seleccionando padres o ancestros.</p></li><li><p><strong>Navegar hacia los lados</strong>, seleccionando nodos hermanos.</p></li></ul><p>Adem&#225;s, podr&#225;s <strong>definir condiciones avanzadas</strong> y <strong>seleccionar</strong> otro tipo de nodos, como <strong>atributos</strong>, <strong>nodos de texto</strong> y <strong>comentarios</strong>. M&#225;s info <a href="https://www.w3schools.com/xml/xpath_syntax.asp">aqu&#237;</a>.</p></blockquote><p></p><h4>matches()</h4><p>Comprueba si un elemento <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/matches">coincide</a> con un selector, ideal para condicionales r&#225;pidas.<br>Ejemplo:</p><pre><code>const element = document.querySelector('div');
if (element.matches('.active')) {
    console.log('Element is active');
}</code></pre><blockquote><p>Sin m&#225;s, la verdad. Como digo, te puede servir para lanzar condiciones r&#225;pidas &#8212;detectar si un determinado elemento tiene una clase espec&#237;fica, por ejmplo&#8212;.</p></blockquote><p></p><h2><strong>Problemas comunes y c&#243;mo evitarlos</strong></h2><p>Creo que esta parte puede ser la m&#225;s &#250;til de todo el art&#237;culo, la verdad. Aqu&#237; te explico los t&#237;picos problemas que pueden surgir a la hora de recoger elementos del DOM, y las posibles soluciones que puedes utilizar para lograrlo.</p><h3><strong>IDs y clases din&#225;micos (ejemplo: Salesforce)</strong></h3><p>Hay veces que las clases e IDs cambian constantemente. En estos casos, usar selectores &#250;nicos como <code>data-attributes</code> &#8212;mis queridos <em>datasets</em>&#8212; o posiciones relativas (<code>nth-child</code>) es clave.</p><p>Ejemplo:</p><pre><code>// Seleccionar todos los productos
const products = document.querySelectorAll('.product');

// Filtrar productos de la categor&#237;a "electronics" usando `dataset`
products.forEach(product =&gt; {
    if (product.dataset.category === 'electronics') {
        console.log(`Producto encontrado: ${product.querySelector('h3').textContent}`);
    }
});</code></pre><h4><strong>Mi truco:</strong> </h4><p>Una funci&#243;n que utilizo para buscar elementos en entornos complejos como estos, prescindiendo de <em>datasets</em> y <strong>posiciones relativas</strong> es esta:</p><pre><code>function getElementsByTextfromTag (tags, text, attribute) {
    var regex = new RegExp(text, 'i');
    var matchingElements = [];

    function getElementsByTextfromTagInternal(tag) {
        return Array.prototype.slice.call(document.getElementsByTagName(tag)).filter(function (el) {
            if (attribute) {
                return el.getAttribute(attribute) &amp;&amp; el.getAttribute(attribute).match(regex);
            } else {
                return el.outerHTML.match(regex);
            }
        });
    }

    for (var i = 0; i &lt; tags.length; i++) {
        var tag = tags[i];
        var elements = getElementsByTextfromTagInternal(tag);
        if (elements.length &gt; 0) {
            matchingElements = matchingElements.concat(elements);
        }
    }

    return matchingElements;
}

//Se utilizar&#237;a as&#237;: getElementsByTextfromTag(['div'], 'er$', 'data-role'); </code></pre><blockquote><p>Despu&#233;s de mucho pegarme con este tipo de p&#225;ginas, me di cuenta de una cosa: <strong>lo que no suele cambiar suelen ser los textos de estos elementos</strong>. Y as&#237; se me oucrri&#243; este script. B&#225;sicamente, itero por todas las etiquetas buscando un texto espec&#237;fico (al que adem&#225;s puedo <strong>a&#241;adir regex </strong>para hacerlo todav&#237;a m&#225;s potente) dentro de alg&#250;n <strong>dataset</strong> o atributo espec&#237;fico, en caso de que lo sepa (si lo dejas vac&#237;o, iterar&#225; por todo el elemento en s&#237;). La sintaxis es antigua, lo s&#233;, pero est&#225; hecho a drede para que funcione perfectamente dentro de Google Tag Manager.</p></blockquote><p></p><h3><strong>Race conditions</strong></h3><p>Siempre que trabajes con el DOM, aseg&#250;rate de que est&#233; listo antes de manipularlo. Usa eventos como <code>DOMContentLoaded</code> o <code>load</code> para evitar sorpresas desagradables.</p><pre><code>document.addEventListener('DOMContentLoaded', () =&gt; {
    console.log('DOM fully loaded and parsed');
});</code></pre><blockquote><p>En este art&#237;culo, hablo largo y tendido sobre las Race Conditions:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;14cfa264-022d-4970-a209-5d91f6034174&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Race Conditions en Data Collection: qu&#233; son y c&#243;mo solucionarlas&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:280712290,&quot;name&quot;:&quot;NotSet&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f2cf0b-8630-4bfd-863b-839f496673d9_1523x1523.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-11-08T07:32:26.693Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://notsetrawdata.substack.com/p/race-conditions-en-data-collection&quot;,&quot;section_name&quot;:&quot;Ojo al dato&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:151286019,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;NotSet&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ad8b540-2244-475c-8e08-ff8e35e4f80a_1300x1300.jpeg&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div></blockquote><p></p><h3><strong>Shadow DOM</strong></h3><p>Si trabajas con componentes modernos como Web Components, deber&#225;s lidiar con el encapsulamiento. Usa el <a href="https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot">shadowRoot</a> para acceder a los nodos dentro de un Shadow DOM.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uZnn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uZnn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png 424w, https://substackcdn.com/image/fetch/$s_!uZnn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png 848w, https://substackcdn.com/image/fetch/$s_!uZnn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png 1272w, https://substackcdn.com/image/fetch/$s_!uZnn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uZnn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png" width="1386" height="776" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2799692-c17d-4ba2-a844-726f13bde128_1386x776.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:776,&quot;width&quot;:1386,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Shadow DOM: &#191;qu&#233; es y c&#243;mo funciona? - IONOS Espa&#241;a&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Shadow DOM: &#191;qu&#233; es y c&#243;mo funciona? - IONOS Espa&#241;a" title="Shadow DOM: &#191;qu&#233; es y c&#243;mo funciona? - IONOS Espa&#241;a" srcset="https://substackcdn.com/image/fetch/$s_!uZnn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png 424w, https://substackcdn.com/image/fetch/$s_!uZnn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png 848w, https://substackcdn.com/image/fetch/$s_!uZnn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png 1272w, https://substackcdn.com/image/fetch/$s_!uZnn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2799692-c17d-4ba2-a844-726f13bde128_1386x776.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/shadow-dom/">IONOS</a></figcaption></figure></div><p><br>Ejemplo:</p><pre><code>const shadowRoot = document.querySelector('custom-element').shadowRoot;
if (shadowRoot) {
    const button = shadowRoot.querySelector('button');
    console.log(button);
} else {
    console.log('Shadow root is closed or not accessible');
}</code></pre><blockquote><p><strong>Nota importante</strong>: Si el shadow DOM est&#225; definido como <code>closed</code>, no podr&#225;s acceder a &#233;l de ninguna forma</p></blockquote><p></p><h3><strong>Elige sabiamente</strong></h3><p>El DOM es un mundo lleno de posibilidades, pero cada m&#233;todo tiene su lugar. En p&#225;ginas est&#225;ticas, opta por soluciones r&#225;pidas y espec&#237;ficas como <code>getElementById</code>. Para estructuras complejas o din&#225;micas, herramientas como <code>querySelector</code>, <code>MutationObserver</code>, y mis funciones personalizadas ser&#225;n tus mejores aliadas.</p><p>Y recuerda: un buen acceso al DOM no solo mejora el rendimiento, tambi&#233;n asegura que tu implementaci&#243;n sea escalable y mantenible. Y si est&#225;s lidiando con Salesforce o plataformas similares, &#161;prueba mi funci&#243;n! Te ahorrar&#225; horas de frustraci&#243;n.</p><p>&#191;Te ha resultado &#250;til esta gu&#237;a? Si tienes dudas o quieres compartir alg&#250;n truco propio para trabajar con el DOM, &#161;d&#233;jalo en los comentarios o escr&#237;beme! Me encantar&#237;a saber tu opini&#243;n.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/p/domina-el-dom-alternativas-y-trucos/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notsetrawdata.substack.com/p/domina-el-dom-alternativas-y-trucos/comments"><span>Deja un comentario</span></a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">NotSet es una publicaci&#243;n apoyada por lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en suscriptor de contenido gratis o suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Cómo una capa de datos salvó la atribución]]></title><description><![CDATA[Hoy quiero contarte c&#243;mo llevar la l&#243;gica de atribuci&#243;n al pre-render del servidor puede marcar la diferencia, asegurando datos precisos y fiables para tus campa&#241;as &#8212;o al menos datos, que ya es mucho.]]></description><link>https://notsetrawdata.substack.com/p/como-una-capa-de-datos-salvo-la-atribucion</link><guid isPermaLink="false">https://notsetrawdata.substack.com/p/como-una-capa-de-datos-salvo-la-atribucion</guid><dc:creator><![CDATA[NotSet]]></dc:creator><pubDate>Mon, 09 Dec 2024 07:07:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IK6B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IK6B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IK6B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!IK6B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!IK6B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!IK6B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IK6B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:330890,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IK6B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!IK6B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!IK6B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!IK6B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdedd83-8798-4322-b9cd-768547a83bfa_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen generada por IA</figcaption></figure></div><div><hr></div><p>Hablar de atribuci&#243;n en<strong> herramientas de anal&#237;tica digital</strong> implica aceptar ciertas limitaciones, sobre todo cuando dependemos exclusivamente del cliente. Navegadores que bloquean cookies, <code>document.referrer </code>restringidos, single-page applications, redirecciones interminables o sistemas operativos que pr&#225;cticamente ocultan cualquier atisbo de rastreo, hacen que atribuir correctamente las campa&#241;as sea muchas veces todo un reto.</p><p>En el mundo del marketing digital, la precisi&#243;n en la atribuci&#243;n de campa&#241;as es esencial. Sin embargo, con las crecientes preocupaciones por la privacidad, los navegadores y sistemas operativos est&#225;n implementando medidas que complican este proceso. Un ejemplo claro puede ser la introducci&#243;n de la <strong>Protecci&#243;n de Rastreo de Enlaces</strong> en iOS 17 de Apple del pasado 2023, que eliminaba autom&#225;ticamente ciertos par&#225;metros de seguimiento en las URL para proteger la privacidad del usuario (<a href="https://www.adsmurai.com/es/articulos/ios17-link-tracking?utm_source=chatgpt.com">Adsmurai</a>).</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">NotSet es una publicaci&#243;n apoyada por lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en suscriptor de contenido gratis o suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Estas medidas, aunque beneficiosas para la privacidad, presentan desaf&#237;os significativos para los profesionales del marketing que dependen de estos par&#225;metros para la atribuci&#243;n precisa de campa&#241;as. La eliminaci&#243;n de par&#225;metros como <code>utm_source</code> o <code>gclid</code> dificulta la identificaci&#243;n de la fuente de tr&#225;fico y la evaluaci&#243;n del rendimiento de las campa&#241;as. </p><blockquote><p>Ya he le&#237;do estas &#250;ltimas semanas a muchas personas quej&#225;ndose y diciendo: &#171;si se ha hecho as&#237;, ser&#225; para algo&#187; en lo que respecta a la privacidad y buscar soluciones dentro de la legalidad para capturar el m&#225;ximo de datos. Yo no voy a entrar en debates sobre si est&#225; bien o no querer saber de d&#243;nde provienen las ventas de tu ecommerce, o en qu&#233; medios se deben invertir para mejorar el rendimiento de tus campa&#241;as, solo ofrezco una alternativa legal.</p></blockquote><p></p><h2>El problema: dependencia del cliente</h2><p>Tradicionalmente, la atribuci&#243;n en <strong>Google Analytics 4 (GA4)</strong> se basa en par&#225;metros de URL y el <code>document.referrer</code>. Sin embargo, con las nuevas protecciones de privacidad:</p><ul><li><p><strong>En dispositivos m&#243;viles</strong>: iOS y Android presentan problemas al gestionar cookies y <code>referrer</code>, especialmente al navegar entre aplicaciones o cuando se utilizan navegadores como Safari. La eliminaci&#243;n autom&#225;tica de par&#225;metros de seguimiento en Safari y otras aplicaciones complica a&#250;n m&#225;s la identificaci&#243;n de la fuente de tr&#225;fico (<a href="https://www.adsmurai.com/es/articulos/ios17-link-tracking">Adsmurai</a>).</p></li><li><p><strong>Limitaciones del cliente</strong>: Dependemos de variables que pueden no estar disponibles o ser manipuladas por extensiones, navegadores o configuraciones de privacidad.</p></li></ul><p><strong>El resultado</strong>: Atribuciones incorrectas y campa&#241;as subestimadas. Esto lo hemos visto claramente reflejado en la reacci&#243;n de la comunidad frente al cambio de pol&#237;ticas de Apple con iOS 17 y las restricciones a los par&#225;metros de seguimiento. Como se analiza en el art&#237;culo de <a href="https://www.branch.io/es/resources/blog/atribucion-en-ios14-dando-la-bienvenida-al-nuevo-orden-mundial-de-apple">Branch.io</a>, estas medidas dificultan a&#250;n m&#225;s la atribuci&#243;n precisa en entornos m&#243;viles.</p><p></p><h2>Una posible soluci&#243;n: implementaci&#243;n en el servidor</h2><p>Para superar estas limitaciones, hemos trasladado la l&#243;gica de atribuci&#243;n al <strong>pre-render del servidor</strong>. Esto nos permite acceder a las cabeceras HTTP de las peticiones de origen, obteniendo datos m&#225;s precisos antes de que el navegador aplique sus restricciones.</p><h4><strong>Ventajas de este enfoque</strong>:</h4><ul><li><p><strong>Acceso directo a las cabeceras HTTP</strong>: Podemos analizar el <code>Referer</code> y otros encabezados para determinar la fuente de tr&#225;fico sin depender del cliente, como el <code>User-Agent</code>.</p></li><li><p><strong>Eliminaci&#243;n de dependencias del navegador</strong>: No estamos sujetos a las restricciones o manipulaciones que los navegadores puedan aplicar en el lado del cliente.</p></li><li><p><strong>Datos m&#225;s fiables</strong>: Al trabajar con informaci&#243;n directa del servidor, reducimos la posibilidad de errores o datos incompletos.</p></li></ul><h4><strong>Desventajas</strong>:</h4><ul><li><p><strong>Conocimientos t&#233;cnicos</strong>: Necesitas trabajar en el c&#243;digo fuente del back en el que est&#233; montado tu sitio web, por lo que no est&#225; al alcance de todo el mundo &#8212;aunque siempre puedes tirar del equipo de desarrollo&#8212;.</p></li><li><p><strong>Dependencia del stock tecnol&#243;gico</strong>: No todos los sitios web cuentan con un prerrenderizado, por lo que lo primero es saber sobre su viabilidad &#8212;si en alg&#250;n momento has escuchado a los desarrolladores hablar de la <em>hidrataci&#243;n</em> del sitio web, no es que el pobre se muriera de sed&#8230; Pregunta que es probable que puedas hacerlo&#8212;.</p></li><li><p><strong>Mantenimiento y escalabilidad</strong>: Al ser una soluci&#243;n <em>ad-hoc</em>, necesitar&#225; un mantenimiento m&#237;nimo, as&#237; como una actualizaci&#243;n contin&#250;a del listado de proveedores&#8230; La clave aqu&#237; est&#225; en el orden y limpieza del c&#243;digo.</p><p></p></li></ul><h4><strong>Art&#237;culos relacionados</strong>:</h4><ul><li><p>Merkle en este <a href="https://www.merkle.com/es/merkle-now/articles-blogs/2023/atribucion-en-ga4-modelos-de-atribucion-nueva-interfaz-y-funcionalidades">art&#237;culo</a> destaca c&#243;mo los modelos de atribuci&#243;n de GA4 pueden complicarse sin un manejo adecuado de las fuentes de tr&#225;fico.</p></li><li><p>Como destaca <a href="https://www.adjust.com/es/blog/the-loss-of-a-full-bit-single-source-ios-14-5-attribution">Adjust</a> en su an&#225;lisis sobre iOS 14.5, las restricciones en clics han complicado la atribuci&#243;n basada en par&#225;metros tradicionales.</p><p></p></li></ul><h3><strong>Implementaci&#243;n</strong>:</h3><p>En el servidor, utilizamos un script que analiza las cabeceras de cada solicitud entrante para identificar la fuente de tr&#225;fico. Bas&#225;ndonos en el <code>referrer</code> y otros par&#225;metros, determinamos si el tr&#225;fico proviene de motores de b&#250;squeda, redes sociales, correos electr&#243;nicos u otras fuentes. Esta informaci&#243;n se procesa y se incluye en la capa de datos que se env&#237;a al cliente, permitiendo as&#237; tener una variable adicional donde registrar eventos con una atribuci&#243;n precisa y luego poder revisar con la atribuci&#243;n que hace tu herramienta de anal&#237;tica favorita &#8212;gui&#241;o, gui&#241;o&#8212;.</p><p><strong>Ejemplo de c&#243;digo en el servidor</strong>:</p><pre><code>var Se = function() {
    this.searchEngines = ["google", "bing", "yahoo", "duckduckgo", "ask", "ecosia", "aol"...]; //listado de motores de b&#250;squeda
    this.socialMedia = {
        Facebook: "facebook.com",
        Twitter: "twitter.com",
        LinkedIn: "linkedin.com",
        Instagram: "instagram.com",
        Reddit: "reddit.com",
        Pinterest: "pinterest.com",
        TikTok: "tiktok.com"
    };
    this.mailServices = {
        Gmail: "mail.google.com",
        YahooMail: "mail.yahoo.com",
        Outlook: "outlook.live.com"
    };
};

Se.prototype.getTrafficDetails = function(headers) {
    var referrer = headers['referer'] || headers['referrer'];
    var userAgent = headers['user-agent'];
    var source = this.getSource(referrer.toLowerCase());
    var channel = this.getChannel(source);

    return {
        channel: channel,
        source: source,
        medium: channel !== "direct" ? "organic" : "direct"
    };
};

Se.prototype.getSource = function(referrer) {
    if (!referrer) {
        return "direct";
    }

    var source = this.findInSources(referrer, this.searchEngines, this.socialMedia, this.mailServices);
    return source || "direct";
};

Se.prototype.findInSources = function(referrer, ...sources) {
    for (var i = 0; i &lt; sources.length; i++) {
        var currentSource = sources[i];
        if (Array.isArray(currentSource)) {
            if (currentSource.some(function(domain) { return referrer.includes(domain); })) {
                return currentSource.find(function(domain) { return referrer.includes(domain); });
            }
        } else {
            for (var key in currentSource) {
                if (referrer.includes(currentSource[key])) {
                    return key;
                }
            }
        }
    }
    return null;
};

Se.prototype.getChannel = function(source) {
    if (Object.keys(this.socialMedia).includes(source)) {
        return "social";
    } else if (this.searchEngines.includes(source)) {
        return "search";
    } else if (Object.keys(this.mailServices).includes(source)) {
        return "email";
    } else {
        return "direct";
    }
};

// Uso en el servidor
function handleRequest(headers) {
    var trafficDetails = new Se().getTrafficDetails(headers);
    console.log("Detalles del tr&#225;fico:", trafficDetails);

    return trafficDetails;
}</code></pre><p> Las claves de este c&#243;digo ser&#237;an estas:</p><pre><code>this.searchEngineAppAndroid = {
    "Google Discover": "android-app://com.google.android.googlequicksearchbox/" // Ejemplo
    // Otros motores de b&#250;squeda en Android
};

this.mailAppAndroid = {
    Gmail: "android-app://com.google.android.gm/" // Ejemplo
    // Otras aplicaciones de correo en Android
};

this.socialMediaAppAndroid = {
    Twitter: "android-app://com.twitter.android/" // Ejemplo
    // Otras redes sociales en Android
};

this.socialMediaAppIOS = {
    Facebook: "FBAV" // Ejemplo
    // Otras redes sociales en iOS
};

this.aiSearchEnginesAppAndroid = {
    ChatGPT: "android-app://com.openai.chatgpt" // Ejemplo
    // Otros motores de b&#250;squeda con IA en Android
};

this.aiSearchEnginesDesktop = {
    "Google Bard": ["bard.google.com"] // Ejemplo
    // Otros motores de b&#250;squeda con IA en Desktop
};

this.aiSearchEnginesAppIOS = {
    "Bing Chat": "bing" // Ejemplo
    // Otros motores de b&#250;squeda con IA en iOS
};</code></pre><p>Primero, definimos los listados para desktop, Android e iOS de foma independiente. Lo que veis no es m&#225;s que un ejemplo y los bloques pueden variar en funci&#243;n de la precisi&#243;n y fuentes &#8212;por ejemplo, pod&#233;is a&#241;adir vuestros canales de referrals habituales&#8212;. De esta forma podemos definir nuestro <strong>&#171;source&#187; </strong>con bastante precisi&#243;n:</p><pre><code> getSource(r, f, u) {
        let s;
        switch (r) {
        case "android":
            s = f.startsWith("android-app://") ? this.findInSources(f, this.mailAppAndroid, this.searchEngineAppAndroid, this.socialMediaAppAndroid, this.aiSearchEnginesAppAndroid) : this.findInSources(f, this.searchEnginesDesktop, this.socialMediaDesktop, this.aiSearchEnginesDesktop, this.mailDesktop);
            break;
        case "ios":
            s = u ? this.findInSources(u, this.searchEnginesDesktop, this.socialMediaAppIOS, this.aiSearchEnginesAppIOS) : this.findInSources(f, this.searchEnginesDesktop, this.socialMediaDesktop, this.aiSearchEnginesDesktop, this.mailDesktop);
            break;
        default:
            s = this.findInSources(f, this.searchEnginesDesktop, this.socialMediaDesktop, this.aiSearchEnginesDesktop, this.mailDesktop);
            break
        }
        return s ?? "direct"
    }</code></pre><p>As&#237;, sabiendo el dispositivo, f&#225;cilmente podremos iterar por las distintas casu&#237;sticas de dispositivo que haya y, luego, mapear por nuestros listados. La clave, compa&#241;ero, consiste en iterar de forma independiente por cada tipo de dispositivo, para acceder a donde &#8220;est&#225; la chicha&#8221;; en el caso de Android, tienes su propio listado con la cl&#225;sica cabecera de referrers de sus apps <code>android-app://</code>, mientras que en iOS nos centramos en su <code>userAgent </code>para sacar el m&#225;ximo provecho de lo que haya disponible. Y siempre, siempre, dejamos como default la cl&#225;sica cabecera de <code>document.referrer</code> de desktop, para as&#237; poder &#8220;rascar&#8221; algo m&#225;s (incluso en Android e iOS).</p><blockquote><p>Es importante tener definido previamente el dispositivo &#8212;aqu&#237; s&#237; que se puede utilizar el <code>userAgent</code> sin ning&#250;n problema&#8212;.</p></blockquote><p>Si queremos hacerlo m&#225;s redondo si cabe, podemos identificar en la propia URL si proviene de alg&#250;n tipo de campa&#241;a utilizando el mismo ejemplo anterior de los listados:</p><pre><code>var Pt = {
    googleAds: ["gclid"],
    bingAds: ["msclkid"],
    criteo: ["criteo_uid"],
    facebookAds: ["fbclid"]
    //Incluye m&#225;s proveedores
};</code></pre><p>De esta manera, podremos crear un par de variables indicando si <strong>existe campa&#241;a</strong> y el <strong>proveedor</strong> en cuesti&#243;n.</p><h3><strong>Integraci&#243;n con GA4</strong>:</h3><p>Una vez que la informaci&#243;n de la fuente de tr&#225;fico se ha procesado en el servidor, se incluye en la capa de datos que se env&#237;a al cliente. Podremos entonces utilizar esta informaci&#243;n para atribuir correctamente las conversiones y otros eventos al origen adecuado.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AaFc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AaFc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png 424w, https://substackcdn.com/image/fetch/$s_!AaFc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png 848w, https://substackcdn.com/image/fetch/$s_!AaFc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png 1272w, https://substackcdn.com/image/fetch/$s_!AaFc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AaFc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png" width="1456" height="295" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:295,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85065,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AaFc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png 424w, https://substackcdn.com/image/fetch/$s_!AaFc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png 848w, https://substackcdn.com/image/fetch/$s_!AaFc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png 1272w, https://substackcdn.com/image/fetch/$s_!AaFc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa961f2dc-199a-40ed-a5af-c6e6ddd6285a_1978x401.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Datos de tr&#225;fico en dispositivos Android, donde las fuentes como Google Discover aparecen incorrectamente como <code>(direct)</code> o <code>(not set)</code>. El an&#225;lisis en el pre-render permite identificar estos casos con mayor exactitud.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8ugM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8ugM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png 424w, https://substackcdn.com/image/fetch/$s_!8ugM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png 848w, https://substackcdn.com/image/fetch/$s_!8ugM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png 1272w, https://substackcdn.com/image/fetch/$s_!8ugM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8ugM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png" width="1456" height="607" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:607,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82212,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8ugM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png 424w, https://substackcdn.com/image/fetch/$s_!8ugM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png 848w, https://substackcdn.com/image/fetch/$s_!8ugM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png 1272w, https://substackcdn.com/image/fetch/$s_!8ugM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50da48de-a279-412b-bce4-e24b2f54bf3c_1556x649.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ejemplo de sesiones en dispositivos iOS clasificadas como <code>(direct)</code> o <code>(not set)</code>, dificultando la evaluaci&#243;n precisa de la fuente de tr&#225;fico. Una implementaci&#243;n en el servidor puede reinterpretar estas fuentes con mayor precisi&#243;n.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!usUb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!usUb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png 424w, https://substackcdn.com/image/fetch/$s_!usUb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png 848w, https://substackcdn.com/image/fetch/$s_!usUb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png 1272w, https://substackcdn.com/image/fetch/$s_!usUb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!usUb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png" width="1456" height="507" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:507,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:120553,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!usUb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png 424w, https://substackcdn.com/image/fetch/$s_!usUb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png 848w, https://substackcdn.com/image/fetch/$s_!usUb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png 1272w, https://substackcdn.com/image/fetch/$s_!usUb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f3dfa3-f401-4cd8-b366-482aa6f11209_2425x845.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Resultados obtenidos tras la implementaci&#243;n de una l&#243;gica de atribuci&#243;n avanzada en el pre-render del servidor, mostrando la identificaci&#243;n correcta de fuentes y campa&#241;as previamente clasificadas como directas o no establecidas.</figcaption></figure></div><h4><strong>Beneficios adicionales</strong>:</h4><ul><li><p><strong>Cumplimiento con las pol&#237;ticas de privacidad</strong>: Al manejar la atribuci&#243;n en el servidor, respetamos las configuraciones de privacidad del usuario y las pol&#237;ticas de los navegadores.</p></li><li><p><strong>Resiliencia ante cambios futuros</strong>: Este enfoque nos prepara para adaptarnos a futuras actualizaciones de privacidad en navegadores y sistemas operativos.</p></li><li><p><strong>Datos para comparar</strong>: Ahora contamos con variables adicionales que nos permiten hacer doble check antes de confiar ciegamente en lo que nos dicen nuestras herramientas de anal&#237;tica.</p></li></ul><blockquote><p>Me gustar&#237;a cerrar dando un porcentaje de mejora, pero me temo que es algo reciente todav&#237;a para aventurarme a dar cifras. Lo que s&#237; que puedo decir es que se ha conseguido aumentar la precisi&#243;n en dispositivos iOS &#8212;de nada a recoger algo, ya es un gran avance&#8212;, y hemos detectado falsos &#171;direct&#187; en todo tipo de dispositivos. </p><p>Sin duda, este enfoque no solo resuelve problemas inmediatos, sino que tambi&#233;n sienta las bases para una atribuci&#243;n m&#225;s precisa a largo plazo, mejorando la confianza en los datos.</p></blockquote><h3>Adaptarse o morir</h3><p>En un entorno donde la privacidad del usuario es cada vez m&#225;s prioritaria, es esencial adaptar nuestras estrategias de atribuci&#243;n. Implementar la l&#243;gica de atribuci&#243;n en el pre-render del servidor nos permite obtener datos precisos y fiables, superando las limitaciones del cliente y respetando las nuevas medidas de privacidad.</p><p>Si los navegadores y sistemas operativos han cambiado las reglas del juego, depende de nosotros adaptarnos y optimizar nuestras estrategias para no solo seguir en la partida, sino ganar, &#191;o no est&#225;s de acuerdo?</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscr&#237;bete ahora&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notsetrawdata.substack.com/subscribe?"><span>Suscr&#237;bete ahora</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Race Conditions en Data Collection: qué son y cómo solucionarlas]]></title><description><![CDATA[As&#237;ncron&#237;a, problemas de timings, desajuste en los tiempo de carga... Seguro que todo esto te suena, &#191;verdad?]]></description><link>https://notsetrawdata.substack.com/p/race-conditions-en-data-collection</link><guid isPermaLink="false">https://notsetrawdata.substack.com/p/race-conditions-en-data-collection</guid><dc:creator><![CDATA[NotSet]]></dc:creator><pubDate>Fri, 08 Nov 2024 07:32:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9kA6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9kA6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9kA6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp 424w, https://substackcdn.com/image/fetch/$s_!9kA6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp 848w, https://substackcdn.com/image/fetch/$s_!9kA6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp 1272w, https://substackcdn.com/image/fetch/$s_!9kA6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9kA6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp" width="1024" height="858" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:858,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:142448,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9kA6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp 424w, https://substackcdn.com/image/fetch/$s_!9kA6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp 848w, https://substackcdn.com/image/fetch/$s_!9kA6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp 1272w, https://substackcdn.com/image/fetch/$s_!9kA6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0e79a8-824d-4a6d-89a9-acdbe0c28fc8_1024x858.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen generada por IA</figcaption></figure></div><div><hr></div><h2><strong>&#191;Qu&#233; es una Race Condition?</strong></h2><p>En t&#233;rminos sencillos, dentro del mundo del desarrollo una <strong>race condition</strong> es una situaci&#243;n en la que dos o m&#225;s operaciones intentan acceder o modificar los mismos recursos al mismo tiempo, sin una coordinaci&#243;n clara en el orden de ejecuci&#243;n. Esto puede resultar en comportamientos impredecibles, datos incorrectos o procesos incompletos, especialmente en entornos asincr&#243;nicos como el navegador web, donde los tiempos de carga de scripts y eventos pueden variar enormemente.</p><p>Las race conditions son particularmente problem&#225;ticas en <strong>sistemas de gesti&#243;n de etiquetas (TMS)</strong> como Google Tag Manager, donde es com&#250;n que m&#250;ltiples etiquetas dependan de una secuencia o disponibilidad de datos espec&#237;ficos. Sin un control adecuado, se puede perder informaci&#243;n cr&#237;tica o, peor a&#250;n, se puede recolectar informaci&#243;n incorrecta.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">NotSet es una publicaci&#243;n apoyada por lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en suscriptor de contenido gratis o suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>Ejemplos cl&#225;sicos dentro de Data Collection</h3><h4><strong>Race Condition en Thank you Page</strong></h4><p>Imaginemos que tienes una etiqueta de conversi&#243;n que depende de que se haya completado una compra y que los datos relevantes est&#233;n presentes en el <code>dataLayer</code>. Sup&#243;n que la etiqueta de conversi&#243;n se dispara en la p&#225;gina de confirmaci&#243;n, pero en algunos casos, debido a la latencia de la red o al tiempo de procesamiento de otros scripts, el <code>dataLayer</code> a&#250;n no tiene los datos completos cuando la etiqueta intenta acceder a &#233;l, o peor, no se llega a ejecutar nunca y el usuario cierra la p&#225;gina. Como resultado, la conversi&#243;n podr&#237;a registrarse sin la informaci&#243;n correcta o no registrarse en absoluto. <em>Un cl&#225;sico bastante m&#225;s habitual de lo que uno piensa.</em></p><h4><strong>Race Condition en la Gesti&#243;n de Consentimiento</strong></h4><p>Otro caso com&#250;n de race condition se presenta en la gesti&#243;n del consentimiento, donde GTM espera que el <code>consent.update</code> est&#233; configurado antes de disparar etiquetas que dependen de dicho consentimiento. En algunas implementaciones, debido a la carga asincr&#243;nica de los CMP (Consent Management Platforms) o el retraso en el <code>dataLayer</code>, el evento <code>consent.update</code> puede no estar disponible inmediatamente, y la vista previa de GTM muestra un mensaje de advertencia en rojo en la vista previa, indicando que se ha intentado leer el estado del consentimiento antes de que se hubiese establecido. <em>&#191;Te suena?</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CmAt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CmAt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CmAt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CmAt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CmAt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CmAt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg" width="541" height="348" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:541,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22886,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CmAt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CmAt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CmAt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CmAt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc4031c-54a6-43c3-bd53-97bb4be8d41a_541x348.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>Estrategias para evitarlas</strong></h2><p>Ahora que entendemos el problema &#8212;y lo hemos sufrido en nuestras propias carnes, seguro 100%&#8212;, vamos a analizar c&#243;mo podemos evitarlo utilizando diferentes estrategias de programaci&#243;n y herramientas disponibles en JavaScript y en los TMS.</p><h4>1. <strong>Uso de </strong><code>dispatchEvent</code><strong> para coordinar eventos</strong></h4><p>Una soluci&#243;n efectiva para evitar que una etiqueta se ejecute antes de que el <code>dataLayer</code> est&#233; listo es <strong>usar un evento personalizado</strong> (<code>CustomEvent</code>) que notifique cu&#225;ndo los datos est&#225;n disponibles.</p><p><strong>Ejemplo:</strong></p><pre><code>// Funci&#243;n para obtener datos de una API y actualizar el dataLayer con un evento espec&#237;fico
function fetchDataAndUpdateDataLayer(url, eventName) {
    fetch(url)
        .then(response =&gt; response.json())
        .then(data =&gt; {
            dataLayer.push({
                'event': eventName,
                'data': data
            });
            document.dispatchEvent(new CustomEvent('apiReady'));
        })
        .catch(error =&gt; {
            console.error("Error al obtener datos de la API:", error);
        });
}

// Listener para 'apiReady' que ejecuta la l&#243;gica dependiente de los datos
document.addEventListener('apiReady', function() {
    console.log("Datos de la API disponibles en el dataLayer, ejecutando l&#243;gica dependiente.");
    // Aqu&#237; podr&#237;as disparar una etiqueta o funci&#243;n dependiente de estos datos
});

// Ejemplo de uso de la funci&#243;n
fetchDataAndUpdateDataLayer("https://api.example.com/user-data", "userDataReady");
</code></pre><p>Este enfoque <strong>modular y flexible </strong>es ideal para implementar en escenarios donde m&#250;ltiples fuentes de datos pueden estar en juego y cada llamada debe estar perfectamente sincronizada con la carga de etiquetas.</p><blockquote><p>Al hilo de esto, os ofrezco un <em><strong>desarrollo de la casa</strong></em> para elevar al cubo la gesti&#243;n de eventos sin tener que iterar sobre m&#250;ltiples <em>eventListeners</em>:</p><pre><code>// Creamos un proxy para interceptar los cambios en el dataLayer
const dataLayer = new Proxy([], {
    set: function(target, property, value) {
        target[property] = value;
        // Detectamos si el evento que necesitamos est&#225; en el dataLayer
        if (value.event === 'userDataReady') {
            console.log("userDataReady detectado en el dataLayer, ejecutando l&#243;gica dependiente.");
            // Ejecutamos la l&#243;gica necesaria cuando se detecta el evento espec&#237;fico
            executeDependentLogic(value.data);
        }
        return true;
    }
});

// Funci&#243;n gen&#233;rica para obtener datos de una API y actualizar el dataLayer con un evento espec&#237;fico
function fetchDataAndUpdateDataLayer(url, eventName) {
    fetch(url)
        .then(response =&gt; response.json())
        .then(data =&gt; {
            // A&#241;adimos los datos necesarios al dataLayer tras la respuesta de la API
            dataLayer.push({
                'event': eventName,
                'data': data
            });
        })
        .catch(error =&gt; {
            console.error("Error al obtener datos de la API:", error);
        });
}

// Funci&#243;n que se ejecuta cuando el evento 'userDataReady' es detectado en el dataLayer
function executeDependentLogic(data) {
    // Aqu&#237; podr&#237;as disparar una etiqueta, enviar datos adicionales, o cualquier otra l&#243;gica
    console.log("L&#243;gica dependiente ejecutada con los datos:", data);
}

// Ejemplo de uso: Llamada a la API y especificaci&#243;n de un evento &#250;nico
fetchDataAndUpdateDataLayer("https://api.example.com/user-data", "userDataReady");</code></pre><p>En esta implementaci&#243;n, usamos un proxy para monitorear el <code>dataLayer</code> y ejecutar autom&#225;ticamente una l&#243;gica espec&#237;fica cuando se detecta un evento particular, en este caso, <code>userDataReady</code>. Al definir el <code>dataLayer</code> como un proxy, podemos interceptar cada vez que se realiza un <code>push</code> en &#233;l. Cuando el proxy detecta que el evento agregado es <code>userDataReady</code>, activa la funci&#243;n <code>executeDependentLogic</code> y le pasa los datos asociados a este evento.</p><p>Este enfoque elimina la necesidad de configurar listeners expl&#237;citos cada vez que queremos ejecutar una acci&#243;n dependiente de un evento en el <code>dataLayer</code>. En lugar de eso, el proxy se encarga de observar todos los cambios en el <code>dataLayer</code> y de activar la l&#243;gica dependiente de forma autom&#225;tica cuando encuentra un evento que coincide con <code>userDataReady</code>.</p><p>La funci&#243;n <code>executeDependentLogic</code> se convierte en el punto donde centralizamos la l&#243;gica espec&#237;fica para este evento. Por ejemplo, en lugar de esperar manualmente con listeners o eventos personalizados, el proxy ejecuta cualquier acci&#243;n necesaria, como disparar una etiqueta o procesar datos, en el momento en que detecta el evento.</p><p><em>Este enfoque hace que la gesti&#243;n de m&#250;ltiples eventos en el </em><code>dataLayer</code><em> sea m&#225;s eficiente y reduce la necesidad de listeners repetitivos, permitiendo una implementaci&#243;n m&#225;s limpia y adaptada a entornos de data collection complejos. Vamos, una fumada muy guapa.</em></p></blockquote><div><hr></div><h4>2. <strong>Uso de </strong><code>callbacks()</code><em><strong> </strong></em><strong>para garantizar el orden de ejecuci&#243;n</strong></h4><p>Un <strong><a href="https://developer.mozilla.org/en-US/docs/Glossary/Callback_function">callback</a></strong> es una funci&#243;n que se ejecuta una vez que otra funci&#243;n ha terminado su tarea. Esto asegura un orden de ejecuci&#243;n cuando hay dependencias directas entre tareas.</p><p><strong>Ejemplo de callback para la ejecuci&#243;n secuencial:</strong></p><pre><code>function loadConversionData(callback) {
    // Simulamos la carga de datos del servidor o dataLayer
    setTimeout(() =&gt; {
        dataLayer.push({ 'event': 'conversion', 'transactionId': '67890', 'value': 200 });
        console.log("Datos de conversi&#243;n cargados.");
        callback(); // Llamamos al callback cuando los datos est&#225;n listos
    }, 1000); // Simulamos un retraso de 1 segundo
}

function executeConversionTag() {
    console.log("Ejecutando etiqueta de conversi&#243;n.");
}

// Ejecutamos loadConversionData y pasamos executeConversionTag como callback
loadConversionData(executeConversionTag);</code></pre><p>En este ejemplo, <code>executeConversionTag</code> solo se ejecutar&#225; despu&#233;s de que <code>loadConversionData</code> haya completado la carga de datos.</p><blockquote><p>Dentro de Google Tag Manager, tenemos una opci&#243;n similar, especialmente &#250;til para coordinar el flujo de eventos: el m&#233;todo <code>eventCallback</code>. Este m&#233;todo permite asociar una funci&#243;n que se ejecutar&#225; despu&#233;s de que se complete el <code>dataLayer.push()</code>. De esta forma, podemos asegurarnos de que cualquier acci&#243;n dependiente de los datos en el <code>dataLayer</code> ocurra solo despu&#233;s de que estos se hayan procesado.</p><p>El uso de <code>eventCallback</code> es particularmente &#250;til en casos donde queremos que una acci&#243;n, como una redirecci&#243;n, se ejecute solo despu&#233;s de que los datos de un evento, como un clic en un producto, se hayan enviado al <code>dataLayer</code>. A continuaci&#243;n, te mostramos un ejemplo pr&#225;ctico de su implementaci&#243;n:</p><p><strong>Ejemplo de Uso de </strong><code>eventCallback</code><strong> en un Evento de Clic en Producto:</strong></p><pre><code>dataLayer.push({
    'event': 'newsletterSubscription',
    'subscription': {
        'email': subscriberObj.email,
        'firstName': subscriberObj.firstName,
        'source': 'Homepage Signup Form'
    },
    'eventCallback': function() {
        // Redirige a la p&#225;gina de agradecimiento solo despu&#233;s de procesar el evento
        window.location.href = '/thank-you';
    }
});</code></pre><p><em>Para asegurar que los datos de una suscripci&#243;n se registren en el </em><code>dataLayer</code><em> antes de redirigir al usuario, usamos </em><code>eventCallback</code><em>. Este m&#233;todo permite ejecutar una acci&#243;n (como una redirecci&#243;n) solo despu&#233;s de que el evento haya sido procesado.</em></p></blockquote><div><hr></div><h4>3. <strong>Implementaci&#243;n de </strong><code>Promises</code><strong> y </strong><code>async/await</code><strong> para la sincronizaci&#243;n de tareas as&#237;ncronas</strong></h4><p>Para casos en los que tienes m&#250;ltiples dependencias que deben completarse antes de continuar, las <strong>Promises</strong> o <code>async/await</code> pueden ofrecer un control robusto. Esto es especialmente &#250;til si manejas llamadas a APIs o recursos externos.</p><p><strong>Ejemplo usando Promises:</strong></p><pre><code>function fetchData() {
    return new Promise((resolve, reject) =&gt; {
        setTimeout(() =&gt; {
            dataLayer.push({ 'event': 'fetchComplete', 'data': 'sample data' });
            resolve("Datos cargados exitosamente.");
        }, 1500); // Retraso de 1.5 segundos
    });
}

fetchData().then((message) =&gt; {
    console.log(message); // "Datos cargados exitosamente."
    console.log("Ejecutando l&#243;gica despu&#233;s de fetchData");
}).catch((error) =&gt; {
    console.error("Error cargando datos: ", error);
});</code></pre><p>Con <code>async/await</code>:</p><pre><code>async function executeDataFlow() {
    await fetchData();
    console.log("Datos listos, ejecutando l&#243;gica dependiente.");
}

executeDataFlow();</code></pre><p>Este m&#233;todo garantiza que <code>executeDataFlow</code> se ejecute solo despu&#233;s de que <code>fetchData</code> haya completado su tarea, ayudando a evitar conflictos de sincronizaci&#243;n.</p><blockquote><p><em>Poco m&#225;s que decir. &#191;Dime si has visto algo m&#225;s limpio? El &#250;nico pero es que async/await no funciona en todos los TMS </em>&#8212;no miro a nadie, GTM&#8212;<em>, por lo que si decides inyectar algo de esto, tendr&#225;s que probar con una promesa&#8230;</em></p></blockquote><div><hr></div><h4>4. <strong>Uso de </strong><code>MutationObserver</code><strong> para monitorizar cambios en el DOM</strong></h4><p>Si tu etiqueta depende de la existencia de elementos espec&#237;ficos en el DOM (como cuando usas un TMS que necesita detectar cambios en el contenido de la p&#225;gina), el <strong>MutationObserver</strong> es una herramienta muy potente. Permite escuchar cambios en el DOM y responder a ellos solo cuando ciertos elementos est&#225;n disponibles.</p><p><strong>Ejemplo de </strong><code>MutationObserver</code><strong>:</strong></p><pre><code>const observer = new MutationObserver((mutations) =&gt; {
    mutations.forEach((mutation) =&gt; {
        if (document.querySelector('#conversionElement')) {
            console.log('Elemento de conversi&#243;n detectado en el DOM.');
            // Ejecuta la l&#243;gica dependiente
            observer.disconnect(); // Detenemos la observaci&#243;n despu&#233;s de detectarlo
        }
    });
});

// Observamos el cuerpo del documento en busca de cambios
observer.observe(document.body, { childList: true, subtree: true });</code></pre><blockquote><p>Este enfoque permite que tu c&#243;digo reaccione a la aparici&#243;n de elementos espec&#237;ficos en el DOM, eliminando las race conditions que pueden surgir por la carga as&#237;ncrona de contenido. <em>En SPA, te vas a hartar de utilizar mutationObserver, cr&#233;eme</em>.</p></blockquote><div><hr></div><h4>5. <strong>Implementaci&#243;n de estrategias de reintentos (</strong><code>Retries</code><strong>)</strong></h4><p>Cuando no puedes garantizar el orden de carga o necesitas intentar varias veces para obtener un recurso, implementar un sistema de <strong>reintentos con l&#237;mite</strong> es una soluci&#243;n efectiva. Esto es &#250;til en situaciones donde la disponibilidad de los datos puede variar.</p><p><strong>Ejemplo de retry con </strong><code>setTimeout</code><strong>:</strong></p><pre><code>function tryLoadData(attempts = 5) {
    if (checkDataLayerData()) {
        console.log("Datos listos, ejecutando etiqueta.");
    } else if (attempts &gt; 0) {
        setTimeout(() =&gt; tryLoadData(attempts - 1), 500); // Intento cada 500ms
    } else {
        console.log("L&#237;mite de intentos alcanzado, abortando.");
    }
}

function checkDataLayerData() {
    return dataLayer.some(item =&gt; item.event === 'purchase');
}

tryLoadData(); // Iniciamos la funci&#243;n de reintento</code></pre><p>Esta funci&#243;n intenta obtener los datos necesarios hasta cinco veces antes de abortar, aumentando las probabilidades de &#233;xito en entornos as&#237;ncronos.</p><blockquote><p><em>Personalmente, he utilizado m&#225;s veces de las que pensaba este tipo de funciones&#8230; Es una soluci&#243;n bastante &#250;til, pero tenemos que ajustar muy bien los intentos para <strong>no afectar en el rendimieto</strong> del sitio web y, lo que es m&#225;s importante, que <strong>funcione correctamente un alto porcentaje de las veces</strong>.</em></p></blockquote><div><hr></div><h3><strong>Conclusi&#243;n</strong></h3><p>Las race conditions son un desaf&#237;o com&#250;n en nuestro campo, especialmente en entornos de TMS como GTM. Afortunadamente, existen m&#250;ltiples estrategias y herramientas en JavaScript para minimizar su impacto y asegurar que las etiquetas y scripts se ejecuten en el orden correcto, con los datos completos y precisos. Desde el uso de eventos personalizados y callbacks hasta herramientas avanzadas como MutationObserver, dominar estas t&#233;cnicas te permitir&#225; asegurar la calidad y confiabilidad de tus datos.</p><p>Espero que este art&#237;culo te haya sido &#250;til para abordar las <em>race conditions</em> en tus implementaciones y mejore la precisi&#243;n de tus resultados en data collection. &#161;Me cuentas!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/p/race-conditions-en-data-collection/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notsetrawdata.substack.com/p/race-conditions-en-data-collection/comments"><span>Deja un comentario</span></a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">NotSet es una publicaci&#243;n apoyada por lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en suscriptor de contenido gratis o suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Persistencia del dato: no solo de cookies vive el hombre ]]></title><description><![CDATA[M&#225;s all&#225; de las cookies: una gu&#237;a completa para la persistencia de datos en el cliente y el servidor]]></description><link>https://notsetrawdata.substack.com/p/persistencia-del-dato</link><guid isPermaLink="false">https://notsetrawdata.substack.com/p/persistencia-del-dato</guid><dc:creator><![CDATA[NotSet]]></dc:creator><pubDate>Fri, 01 Nov 2024 06:55:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!onzb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!onzb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!onzb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg 424w, https://substackcdn.com/image/fetch/$s_!onzb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg 848w, https://substackcdn.com/image/fetch/$s_!onzb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!onzb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!onzb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg" width="1024" height="731" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:731,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:146715,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!onzb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg 424w, https://substackcdn.com/image/fetch/$s_!onzb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg 848w, https://substackcdn.com/image/fetch/$s_!onzb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!onzb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84376657-4b0c-4780-bba3-8d242013b905_1024x731.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen generada por IA</figcaption></figure></div><div class="pullquote"><p>En este art&#237;culo, exploraremos c&#243;mo utilizar <strong>sessionStorage</strong>,&nbsp;<strong>localStorage</strong>,&nbsp;<strong>indexedDB </strong>y las<strong> APIs</strong> <strong>propias</strong> para que los datos persistan, y c&#243;mo podemos valernos de otros recursos, como&nbsp;<strong>postMessage</strong> o&nbsp;<strong>broadcastChannel</strong>,&nbsp;para comunicarnos de forma m&#225;s efectiva y ofrecer as&#237; una mejor experiencia de usuario</p></div><p>Cuando hablamos de persistencia del dato en aplicaciones web, inmediatamente pensamos en nuestras amigas las cookies, &#191;o no? Sin embargo, existen otras herramientas esenciales para mantener la informaci&#243;n disponible durante la navegaci&#243;n del usuario, m&#225;s all&#225; de estas. En este art&#237;culo, exploraremos c&#243;mo utilizar <strong>sessionStorage</strong>,&nbsp;<strong>localStorage</strong>,&nbsp;<strong>indexedDB </strong>y las<strong> APIs</strong> <strong>propias</strong> para que los datos persistan, y c&#243;mo podemos valernos de otros recursos, como&nbsp;<strong>postMessage</strong> o&nbsp;<strong>broadcastChannel</strong>,&nbsp;para comunicarnos de forma m&#225;s efectiva y ofrecer as&#237; una mejor experiencia de usuario. Con esta gu&#237;a, intentar&#233; mostrarte los matices, pros y contras de cada m&#233;todo y c&#243;mo se implementan en un contexto de eCommerce y de interacci&#243;n en tiempo real.</p><h1>SessionStorage y LocalStorage: persistencia cl&#225;sica en el cliente</h1><p><strong><a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage">sessionStorage</a></strong>&nbsp;y&nbsp;<strong><a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage">localStorage</a></strong>&nbsp;son APIs de almacenamiento web que ofrecen diferentes niveles de persistencia en el cliente. Disponibles en <strong>cualquier navegador</strong>, ambos m&#233;todos son extremadamente &#250;tiles, no solo en el contexto de la capa de datos, sino para el propio funcionamiento del sitio web, permiti&#233;ndote gestionar el estado de la aplicaci&#243;n a medida que el usuario interact&#250;a con el sitio.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">NotSet es una publicaci&#243;n apoyada por lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en suscriptor de contenido gratis o suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n7Us!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n7Us!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png 424w, https://substackcdn.com/image/fetch/$s_!n7Us!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png 848w, https://substackcdn.com/image/fetch/$s_!n7Us!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png 1272w, https://substackcdn.com/image/fetch/$s_!n7Us!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n7Us!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png" width="1456" height="749" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:749,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1525102,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n7Us!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png 424w, https://substackcdn.com/image/fetch/$s_!n7Us!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png 848w, https://substackcdn.com/image/fetch/$s_!n7Us!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png 1272w, https://substackcdn.com/image/fetch/$s_!n7Us!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42951588-e8f4-4673-81da-6f5920c88c52_1805x929.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>SessionStorage</h3><p><code>sessionStorage</code>&nbsp;almacena datos que solo deben persistir durante la sesi&#243;n del usuario y desaparecen al cerrar la pesta&#241;a. Este almacenamiento es perfecto para manejar datos temporales como el estado de un carrito de compras o las preferencias de visualizaci&#243;n, por ejemplo.</p><p><strong>Ejemplo pr&#225;ctico</strong>: Almacenamiento temporal de estado de carrito en <em>JavaScript</em></p><pre><code><code>// Guardar el estado del carrito en sessionStorage sessionStorage.setItem("cartItems", JSON.stringify(cartItems));
  
// Recuperar datos del carrito al cambiar de p&#225;gina en la misma sesi&#243;n const cartData = JSON.parse(sessionStorage.getItem("cartItems")); console.log("Datos del carrito:", cartData);   </code></code></pre><h3>LocalStorage</h3><p><code>localStorage</code>, en cambio, permite que los datos persistan incluso despu&#233;s de que el usuario cierre el navegador, ideal para almacenar configuraciones a largo plazo como temas de usuario o tokens de autenticaci&#243;n.</p><p><strong>Ejemplo pr&#225;ctico</strong>: Guardar la preferencia de tema de usuario en <em>JavaScript</em></p><pre><code>// Almacenar la preferencia de tema&nbsp;localStorage.setItem("theme",&nbsp;"dark");&nbsp;

// Recuperar el tema seleccionado al cargar la p&#225;gina&nbsp;const&nbsp;userTheme =&nbsp;localStorage.getItem("theme");document.body.classList.add(userTheme);</code></pre><blockquote><p><strong>Consideraciones de seguridad:</strong>&nbsp;Ambos m&#233;todos pueden ser susceptibles a ataques XSS. Evita almacenar datos sensibles y utiliza solo scripts de fuentes confiables.</p></blockquote><p></p><h2><a href="https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API">IndexedDB</a>: persistencia avanzada</h2><p><code>indexedDB</code>&nbsp;es una API de bajo nivel &#8212;esto quiere decir que proporciona acceso directo a todos los recursos, pero requiere de un conocimiento profundo sobre la API en cuesti&#243;n para sacarle el m&#225;ximo provecho&#8212; que ofrece acceso a una base de datos no relacional en el navegador, permiti&#233;ndote almacenar grandes vol&#250;menes de datos en formato JSON. Es ideal para aplicaciones complejas y de alto rendimiento, como aquellas en el &#225;mbito del&nbsp;<strong>eCommerce</strong>&nbsp;y la&nbsp;<strong>anal&#237;tica</strong>, donde almacenar localmente el estado completo de objetos (por ejemplo, un producto o el carrito de compras) puede optimizar la experiencia del usuario y reducir la dependencia del servidor, ya que no bloquea el comportamiento del sitio web. </p><h4>&#191;C&#243;mo funciona IndexedDB?</h4><p>IndexedDB ofrece acceso tanto s&#237;ncrono como as&#237;ncrono, aunque yo siempre que lo he utilizado ha sido con su API as&#237;ncrona. Funciona mediante una interfaz basada en eventos, con una API predominantemente&nbsp;<strong>as&#237;ncrona</strong>&nbsp;para que las operaciones de lectura y escritura no bloqueen la interfaz de usuario. Si bien no es nativamente una API de promesas, es posible envolver sus operaciones en promesas para aprovechar una sintaxis m&#225;s moderna y limpia, compatible con&nbsp;<code>async</code>&nbsp;y&nbsp;<code>await</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J0yM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J0yM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp 424w, https://substackcdn.com/image/fetch/$s_!J0yM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp 848w, https://substackcdn.com/image/fetch/$s_!J0yM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp 1272w, https://substackcdn.com/image/fetch/$s_!J0yM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J0yM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp" width="1100" height="529" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:529,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47092,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J0yM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp 424w, https://substackcdn.com/image/fetch/$s_!J0yM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp 848w, https://substackcdn.com/image/fetch/$s_!J0yM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp 1272w, https://substackcdn.com/image/fetch/$s_!J0yM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f76b977-0df0-42a9-8b1c-e60ce70289b5_1100x529.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://developers.google.com/web/ilt/pwa/working-with-indexeddb">Google Developers</a></figcaption></figure></div><p>Este sistema de base de datos maneja&nbsp;<strong>transacciones</strong>&nbsp;y&nbsp;<strong>objetos clave-valor</strong>, permitiendo estructuras de datos complejas y multitabla. Adem&#225;s, IndexedDB permite establecer&nbsp;<strong>&#237;ndices </strong>para realizar b&#250;squedas optimizadas, lo que facilita consultas avanzadas dentro de la base de datos. Sin embargo, esta API es compleja y tiene ciertas limitaciones, como su dependencia en el almacenamiento local del navegador y la falta de sincronizaci&#243;n entre dispositivos (aunque puedes combinarlo con otros m&#233;todos para conseguir cosas muy chulas).</p><h4>Ejemplo pr&#225;ctico: Almacenamiento y recuperaci&#243;n de datos en IndexedDB</h4><p>Aqu&#237; te muestro un ejemplo b&#225;sico en <em>JavaScript</em> que utiliza promesas para gestionar una base de datos de productos en IndexedDB. Este ejemplo crea o abre una base de datos, a&#241;ade un producto y lo recupera para mostrarlo en la consola.</p><pre><code>// Funci&#243;n para abrir la base de datos
function openDatabase() {
    return new Promise((resolve, reject) =&gt; {
        const request = indexedDB.open("ecommerceDB", 1);
        request.onupgradeneeded = (event) =&gt; {
            const db = event.target.result;
            db.createObjectStore("products", { keyPath: "productId" });
        };
        request.onsuccess = (event) =&gt; resolve(event.target.result);
        request.onerror = (event) =&gt; reject("Error al abrir la base de datos");
    });
}

// Funci&#243;n para a&#241;adir un producto
function addProduct(db, product) {
    return new Promise((resolve, reject) =&gt; {
        const transaction = db.transaction("products", "readwrite");
        const store = transaction.objectStore("products");
        const request = store.put(product);
        request.onsuccess = () =&gt; resolve("Producto a&#241;adido con &#233;xito");
        request.onerror = () =&gt; reject("Error al a&#241;adir el producto");
    });
}

// Funci&#243;n para recuperar un producto por ID
function getProduct(db, productId) {
    return new Promise((resolve, reject) =&gt; {
        const transaction = db.transaction("products", "readonly");
        const store = transaction.objectStore("products");
        const request = store.get(productId);
        request.onsuccess = () =&gt; resolve(request.result);
        request.onerror = () =&gt; reject("Error al recuperar el producto");
    });
}</code></pre><p>Este c&#243;digo ilustra c&#243;mo utilizar promesas para hacer que las operaciones en IndexedDB sean m&#225;s intuitivas y sencillas de leer. La API permite ejecutar operaciones de transacci&#243;n y lectura/escritura de manera as&#237;ncrona, optimizando el rendimiento de aplicaciones con grandes cantidades de datos.</p><h4>Ventajas y limitaciones de IndexedDB</h4><ul><li><p><strong>Ventajas</strong>: IndexedDB permite almacenar grandes vol&#250;menes de datos y realizar consultas complejas de forma local, siendo ideal para aplicaciones que manejan estructuras de datos complejas en el lado del cliente.</p></li><li><p><strong>Limitaciones</strong>: Al tratarse de una API de bajo nivel, su uso requiere una mayor inversi&#243;n en desarrollo y conocimiento t&#233;cnico. Adem&#225;s, es limitada en cuanto a sincronizaci&#243;n entre dispositivos y puede tener lagunas t&#233;cnicas al compararla con bases de datos de servidor.</p></li></ul><blockquote><p><strong>Consejo avanzado</strong>: Herramientas como notificaciones push se apoyan en IndexedDB para almacenar datos del usuario de forma local, asegurando que las notificaciones sean relevantes sin tener que hacer llamadas al servidor en cada carga de p&#225;gina.</p></blockquote><p><em>Personalmente, la he utilizado para mantener la persistencia del producto en formato array de objeto &#8212;vamos, el cl&#225;sico formato items de GA4 con todas sus variables y casi media docena de variables custom&#8212; desde que se a&#241;ad&#237;a el producto al carrito hasta que finalizaba su compra; con toda la l&#243;gica de a&#241;adir m&#225;s unidades, eliminarlas, as&#237; como eliminar el producto de forma definitiva si finalizaba la compra. Adem&#225;s, gracias a su persistencia entre sesiones y su capacidad de almacenamiento (que var&#237;a entre navegadores, pero para que te hagas una idea, en Chrome tienes hasta 500 MB de espacio), te permite incluso recuperar carritos al iniciar sesi&#243;n&#8230; Ah&#237; es nada ;)</em></p><pre><code>function getIndexedDBItem() {
    var openRequest = indexedDB.open("XXX", 1);

    openRequest.onsuccess = function() {
        var db = openRequest.result;
        var products = [];
        var oldItems = google_tag_manager["GTM-XXXXX"].dataLayer.get("cdl_cart_products");

        if (oldItems &amp;&amp; oldItems.length &gt; 1) {
            var transaction = db.transaction(["Products"], "readonly");
            var store = transaction.objectStore("Products");

            oldItems.forEach(function(oldItem) {
                var request = store.get(oldItem.sku);
                request.onsuccess = function(e) {
                    var productData = e.target.result;

                    if (productData) {
                        products.push({
                            'item_id': productData.product_id || productData.sku,
                            'item_name': productData.name || productData.product_name,
                            'item_brand': productData.brand || "N/A",
                            'item_category': productData.category1 || 'not_set',
                            'item_category2': productData.category2 || '',
                            'item_category3': productData.category3 || '',
                            'quantity': oldItem.quantity,
                            'price': parseFloat(oldItem.unitprice_ati * oldItem.quantity),
                            'discount': parseFloat(productData.discount) ? parseFloat(productData.discount * oldItem.quantity) : 0,
                            'deliveryHomeAvailability': productData.dimension148,
                            'deliverySFSAvailability': productData.dimension149,
                            'deliveryStoreAvailability': productData.dimension150,
                            'productRating': productData.rating || undefined,
                            'productNumReviews': productData.number_reviews || undefined,
                            'item_list_id': productData.zone_id || undefined,
                            'item_list_name': productData.zone_name || undefined
                        });
                    }
                };
            });

            transaction.oncomplete = function() {
                dataLayer.push({
                    'event': 'funnelEcommerceGA4',
                    'funnelItemsGA4': products
                });
            };
        }
    };

    openRequest.onerror = function() {
        console.error("Error al abrir la base de datos:", openRequest.error);
    };
}

getIndexedDBItem();</code></pre><h2>APIs Propias: persistencia en el servidor</h2><p>Adem&#225;s de los m&#233;todos de persistencia en el cliente, el uso de&nbsp;<strong>APIs propias</strong>&nbsp;ofrece una forma de persistencia en el servidor, conect&#225;ndose a bases de datos alojadas en la nube, por ejemplo. Este enfoque asegura que los datos persistan de manera segura y puedan compartirse entre dispositivos y sesiones, ideal para casos de uso donde se necesita centralizar y gestionar grandes vol&#250;menes de datos.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ecVC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ecVC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif 424w, https://substackcdn.com/image/fetch/$s_!ecVC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif 848w, https://substackcdn.com/image/fetch/$s_!ecVC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif 1272w, https://substackcdn.com/image/fetch/$s_!ecVC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ecVC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif" width="1440" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14423,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/avif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ecVC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif 424w, https://substackcdn.com/image/fetch/$s_!ecVC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif 848w, https://substackcdn.com/image/fetch/$s_!ecVC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif 1272w, https://substackcdn.com/image/fetch/$s_!ecVC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be93d9b-0df3-4459-bacd-666f67c531ef_1440x810.avif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://www.akamai.com/glossary/how-do-apis-work">Akamai</a></figcaption></figure></div><p>Las APIs propias son especialmente &#250;tiles en&nbsp;<strong>contextos de anal&#237;tica avanzada o personalizaci&#243;n</strong>. Si nos abstraemos un poco, hasta sistemas como&nbsp;<strong>GTM Server-Side</strong>&nbsp;pueden actuar como sistemas de persistencia de datos al hacer de intermediarios entre el cliente y la base de datos, facilitando el almacenamiento en tiempo real sin afectar el rendimiento del sitio. Esto permite recopilar informaci&#243;n en el servidor y procesarla de manera centralizada, minimizando la carga en el cliente y ofreciendo persistencia multidispositivo.</p><h4>Ejemplo pr&#225;ctico: Persistencia con API en Firestore y TMS Server-Side</h4><p>Imaginemos que queremos almacenar y recuperar los datos de usuario en tiempo real:</p><ol><li><p><strong>Recopilaci&#243;n en el cliente</strong>: El cliente dispara un evento, enviando datos a nuestro sistema de tagging Server-Side.</p></li><li><p><strong>Almacenamiento en Firestore</strong>: Nuestro TMS procesa y guarda los datos en Firestore.</p></li><li><p><strong>Recuperaci&#243;n a trav&#233;s de la API</strong>: Otra API en el servidor consulta los datos en tiempo real, permitiendo su uso en anal&#237;tica o personalizaci&#243;n de la experiencia del usuario.</p></li></ol><p><strong>C&#243;digo ilustrativo en </strong><em><strong>python</strong></em><strong> FastAPI para acceder a datos en Firestore:</strong></p><pre><code>from fastapi import FastAPI
from google.cloud import firestore

app = FastAPI()
db = firestore.Client()

@app.get("/get_user_data/{user_id}")
async def get_user_data(user_id: str):
    doc_ref = db.collection("users").document(user_id)
    doc = doc_ref.get()
    if doc.exists:
        return doc.to_dict()
    else:
        return {"error": "User data not found"}</code></pre><p>Con esta API, los datos de usuario se almacenan en Firestore y se acceden en tiempo real, permitiendo persistencia multidispositivo y sincronizaci&#243;n entre sesiones. <em>Imag&#237;nate la de posibilidades que se te abren con una soluci&#243;n que funcione en el lado servidor&#8230;</em></p><h2>Comunicaci&#243;n en tiempo real: BroadcastChannel y postMessage</h2><p>Adem&#225;s de los m&#233;todos de almacenamiento, existen alternativas potentes para &#8220;persistencia temporal&#8221; y comunicaci&#243;n entre diferentes contextos de navegaci&#243;n:&nbsp;<strong><a href="https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API">broadcastChannel</a></strong>&nbsp;y&nbsp;<strong><a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage">postMessage</a></strong>. Aunque no se trata de APIs y m&#233;todos desarrollados para persistir dato, s&#237; se pueden utilizar y combinar con los m&#233;todos mencionados anteriormente de persistencia bajo determinadas circunstancias&#8230;</p><h4>BroadcastChannel: Comunicaci&#243;n entre pesta&#241;as del mismo dominio</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2twQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2twQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp 424w, https://substackcdn.com/image/fetch/$s_!2twQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp 848w, https://substackcdn.com/image/fetch/$s_!2twQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp 1272w, https://substackcdn.com/image/fetch/$s_!2twQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2twQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp" width="774" height="439" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:439,&quot;width&quot;:774,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26378,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2twQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp 424w, https://substackcdn.com/image/fetch/$s_!2twQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp 848w, https://substackcdn.com/image/fetch/$s_!2twQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp 1272w, https://substackcdn.com/image/fetch/$s_!2twQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624583cb-ac6f-4e53-bb42-2a42bef964e5_774x439.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Imagen cortes&#237;a de <a href="https://aristeksystems.com/blog/four-handy-js-apis-that-you-didnt-know-about/">Aristek Systems</a></figcaption></figure></div><p></p><p><code>broadcastChannel</code>&nbsp;es una API que permite que diferentes pesta&#241;as de una misma aplicaci&#243;n compartan informaci&#243;n en tiempo real. Es ideal para sincronizar el estado de autenticaci&#243;n o los datos del carrito en distintas pesta&#241;as. Esto resulta clave en experiencias de usuario que requieren que las acciones en una pesta&#241;a se reflejen en otra.</p><p><strong>Ejemplo pr&#225;ctico</strong>: Sincronizaci&#243;n de autenticaci&#243;n entre pesta&#241;as en <em>JavaScript</em></p><pre><code>// Crear un canal para la autenticaci&#243;n
const authChannel = new BroadcastChannel("authChannel");

// Enviar un mensaje de autenticaci&#243;n desde una pesta&#241;a
authChannel.postMessage({ event: "login", userId: "12345" });

// Escuchar el mensaje en otra pesta&#241;a
authChannel.onmessage = (event) =&gt; {
  if (event.data.event === "login") {
    console.log("Usuario autenticado en otra pesta&#241;a:", event.data.userId);
    // Actualizar el estado de la sesi&#243;n o capa de datos
  }
};</code></pre><p><em>Yo lo he utilizado en aquellos eCommerce que, debido a la l&#243;gica de programaci&#243;n del sitio web, se abr&#237;an pesta&#241;as nuevas de otras p&#225;ginas para continuar el proceso de compra. De esta manera, era capaz de registrar las transacciones en el propio eCommerce padre, aunque el usuario lo hiciera desde otra p&#225;gina (incluso con dominio diferente). La magia de la persistencia una vez m&#225;s en acci&#243;n.</em></p><pre><code>//Canal para recibir mensajes de pesta&#241;as
const transactionChannel = new BroadcastChannel("transactionChannel");

transactionChannel.onmessage = (event) =&gt; {
    if (event.data.event === "transactionComplete") {
        const transactionData = event.data.transactionDetails;
        console.log("Transacci&#243;n completada recibida:", transactionData);

        dataLayer.push({
            'event': 'purchase',
            'transactionDetails': transactionData
        });
    }
};

//Enviar mensajes al dominio padre
const transactionChannel = new BroadcastChannel("transactionChannel");

function completeTransaction(transactionDetails) {
    // Env&#237;a los datos de la transacci&#243;n al canal
    transactionChannel.postMessage({
        'event': 'transactionComplete',
        'transactionDetails': transactionDetails
    });
    console.log("Transacci&#243;n completada y enviada al canal");
}


const transactionDetails = {
    'transaction_id': '12345ABC',
    'value': 100.50,
    'currency': 'USD',
    'items': [
        {
            'item_id': '001',
            'item_name': 'Producto A',
            'quantity': 1,
            'price': 50.25
        },
        {
            'item_id': '002',
            'item_name': 'Producto B',
            'quantity': 1,
            'price': 50.25
        }
    ]
};

completeTransaction(transactionDetails);</code></pre><h4>PostMessage: Comunicaci&#243;n entre ventanas y iframes</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y37U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y37U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y37U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y37U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y37U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y37U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg" width="813" height="442" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:442,&quot;width&quot;:813,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32093,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y37U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y37U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y37U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y37U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F241e9d81-45b7-4033-aa1b-351c5f275aff_813x442.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>El m&#233;todo<code> postMessage</code>&nbsp;permite la transferencia segura de datos entre ventanas o&nbsp;<code>iframes</code>&nbsp;de distintos dominios, lo cual es invaluable cuando integras servicios externos como pasarelas de pago. Este m&#233;todo facilita que el estado de transacciones y otras interacciones dentro de un&nbsp;<code>iframe</code>&nbsp;se comuniquen con la ventana principal.</p><p><strong>Ejemplo pr&#225;ctico</strong>: Enviar el estado de la transacci&#243;n desde un iframe de pago en <em>JavaScript</em></p><pre><code>// Enviar un mensaje desde el iframe al sitio principal
iframe.contentWindow.postMessage({ event: "paymentSuccess", transactionId: "abc123" }, "*");

// Escuchar y procesar el mensaje en el sitio principal
window.addEventListener("message", (event) =&gt; {
  if (event.origin === "https://trusted-payment.com") {
    console.log("Estado de la transacci&#243;n recibido:", event.data.transactionId);
    // L&#243;gica para actualizar la capa de datos o registrar el evento
  }
});</code></pre><blockquote><p><strong>Nota de seguridad:</strong>&nbsp;Siempre valida&nbsp;<code>event.origin</code>&nbsp;para asegurarte de que los datos provienen de una fuente confiable antes de procesarlos. M&#225;s vale prevenir que curar, cr&#233;eme.</p></blockquote><p><em>Mi soluci&#243;n de cabecera para comunicarme con pasarelas de pago desde el DOM y almacenar informaci&#243;n en la capa de datos de forma c&#243;moda y &#8212;sobre todo&#8212; segura.</em></p><pre><code>window.addEventListener("message", function (event) {
  if (event.origin === "https://js.stripe.com") {
    try {
      var data = JSON.parse(event.data);

      if (
        data.message &amp;&amp;
        data.message.payload &amp;&amp;
        data.message.payload.response &amp;&amp;
        data.message.payload.response.object &amp;&amp;
        data.message.payload.response.object.status
      ) {
        
        if (
          data.message.payload.response.object.status === "requires_capture"
        ) {
          
          digitalData.events.push("postMessage-stripe_gateway");
          dataLayer.push({
            event: "gateway_confirmation",
            digitalData: digitalData,
          });
        }
      }
    } catch (error) {
      console.debug("Error procesando el mensaje de Stripe:", error);
    }
  } 
});</code></pre><h1>Comparativa de m&#233;todos de persistencia</h1><p>Cada &#8220;m&#233;todo de persistencia&#8221; comentado aqu&#237; tiene sus caracter&#237;sticas, fortalezas y limitaciones. La siguiente tabla te ayuda a identificar cu&#225;l elegir en funci&#243;n del tipo de dato y la duraci&#243;n deseada:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b6eM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b6eM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png 424w, https://substackcdn.com/image/fetch/$s_!b6eM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png 848w, https://substackcdn.com/image/fetch/$s_!b6eM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png 1272w, https://substackcdn.com/image/fetch/$s_!b6eM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b6eM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png" width="1088" height="445" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:445,&quot;width&quot;:1088,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:122443,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!b6eM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png 424w, https://substackcdn.com/image/fetch/$s_!b6eM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png 848w, https://substackcdn.com/image/fetch/$s_!b6eM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png 1272w, https://substackcdn.com/image/fetch/$s_!b6eM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0baf2fd4-3f5c-4c17-8982-6f63e6606299_1088x445.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="pullquote"><p>Al combinar todos estos m&#233;todos, tienes a tu disposici&#243;n un abanico completo de opciones para asegurar que el dato, al igual que la experiencia de usuario, persista de la mejor manera. </p></div><h3>Ad&#225;ptate a las necesidades del sitio web</h3><p>La persistencia del dato es una pieza fundamental en la experiencia de usuario moderna. Al entender y aplicar estos m&#233;todos en funci&#243;n de la necesidad espec&#237;fica de tu aplicaci&#243;n, puedes garantizar que los datos relevantes est&#233;n disponibles cuando el usuario los necesite, mejorando tanto el rendimiento como la consistencia de la experiencia. Al combinar todos estos m&#233;todos, tienes a tu disposici&#243;n un abanico completo de opciones para asegurar que el dato, al igual que la experiencia de usuario, persista de la mejor manera. </p><p>&#191;Y a ti, se te ocurre alg&#250;n otro?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/p/persistencia-del-dato/comments&quot;,&quot;text&quot;:&quot;Deja un comentario&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notsetrawdata.substack.com/p/persistencia-del-dato/comments"><span>Deja un comentario</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notsetrawdata.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">NotSet es una publicaci&#243;n apoyada por lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en suscriptor de contenido gratis o suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>