根据单个用户的决定禁用谷歌标签管理器(选择退出)

Disable google tag manager according to the decision of single users (opt-out)

本文关键字:管理器 标签 选择 退出 谷歌 单个 用户 决定      更新时间:2023-09-26

在一些国家(如意大利),法律要求网站必须提供disable/enable分析cookie

例如:谷歌标签管理器。

我读过这篇文章,内容涉及"opt-in/opt-out分析主题"。


然而,我仍然有一个问题:

为什么我不能简单地读取一个cookie服务器端,其中包含用户首选项,如果我找到一个给定的值(即"禁用"),则设置一个属性,使其能够有条件地在我的JSP页面中包括(或不包括)GTM脚本

需要指出的是,GTM既不是一个跟踪工具,也不单独设置任何cookie。

与编程更相关的是,GTM代码不能基于cookie禁用自己,因为需要加载GTM来检查cookie是否存在。

Cookie仅作为http请求的一部分发送到设置了服务器的域;GTM位于谷歌服务器上,该服务器将无法访问您域上设置的cookie。因此,如果在您的域上设置了一个选择退出cookie,GTM服务器将不会知道它

Cookie主要是一种客户端技术;GTM通过将JavaScript注入您的页面,使其在您的域上下文中运行,然后让脚本评估cookie的内容(如果您设置了cookie变量或自定义脚本),从而与cookie进行交互。此时,GTM代码已经加载。

这就是为什么你不能使用cookie来阻止GTM加载;但是,您可以使用cookie禁用GTM中的所有标签。如果这还不够好,你必须编写自己的逻辑来有条件地禁用GTM(你甚至可以在CMS中编写一个例程,不基于cookie呈现GTM代码——毕竟这是你自己的域,所以cookie数据会随请求一起发送;你不能指望谷歌为你做这件事)。

GTM无法自行设置cookie(除非您编写了一个自定义HTML标记,其中包含设置cookie的脚本,这与通过内联代码进行设置没有什么不同),因此我假设您已经有了一个名为"opt-out"的cookie。不管cookie中存储了什么值,我们只会检查它是否存在。

转到GTM,进入"变量"部分,单击"新建"并选择"第一方Cookie"。将其命名为例如"选择退出Cookie",并将名称字段设置为"选择退出"。拯救现在,您有了一个变量,用于检查选择退出cookie,如果设置了值,则返回一个值,如果不存在cookie,则返回"未定义"。

现在转到触发器部分,创建一个页面视图类型的新触发器。称之为"选择退出触发器"。在"fire on"部分,您在第一个字段中选择"Opt Out Cookie"变量,将"not equals"设置为条件,将"undefined"设置为值(因此,设置Cookie时,触发器计算结果为true)。

现在浏览您的标签,并在设置cookie时将"选择退出触发器"添加到要禁用的标签中。保存、发布。

唯一需要注意的是,pageview触发器可能在pageview、DOM就绪或pageload时触发。在pageview上触发的异常触发器不会阻止触发设置为DOM就绪或pageload的标记,因此您可能需要多个异常,加载过程的每个阶段都有一个异常。

简而言之

Javascript/jQuery/js-cookie的解决方案;仅";部分适用于GTM(谷歌标签管理器)的情况,因为它有<noscript>实现。详见下文。


如何

HTML

<span class="js-ga-opt-out">Disable GA - Javascript solution</span>
<span class="js-ga-opt-in">Enable GA - Javascript solution</span>

Javascript

// note that setCookie(key, value) is a custom function
function optOutGoogleTracking(){
    setCookie('_ga', undefined);
    setCookie('optOutGoogleTracking', true);
    alert('disabling GA cookies');
    window.location.reload();
}
function optInGoogleTracking(){
    setCookie('optOutGoogleTracking', false);
    alert('enabling GA cookies');
    window.location.reload();
}
$('html').on("click", ".js-ga-opt-out", function(){
    optOutGoogleTracking();
});
$('html').on("click", ".js-ga-opt-in", function(){
    optInGoogleTracking();
});

谷歌标签管理器脚本

请注意,不能使用Javascript有条件地跳过<noscript></noscript>标记中的内容。

<script src="https://cdn.jsdelivr.net/npm/js-cookie@3.0.1/dist/js.cookie.min.js"></script>
<!-- Google Tag Manager -->
<noscript>
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-xxxxx"
height="0" width="0" style="display:none;visibility:hidden"></iframe>
</noscript>
<script>
if(Cookies.get('optOutGoogleTracking') === 'false') { // here is your condition
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-xxxxx');
}
</script>
<!-- End Google Tag Manager -->

我的理解是,<noscript>标记适用于禁用Javascript的情况。然后将通过iframe进行跟踪。

这种解决方案可能是";足够好";不过在大多数情况下。

这符合法律规定吗?可能不会。

简而言之:

是的,您可以将此opt-in/opt-out选项保存在server side上,并根据JSP中的相关属性值有条件地添加GTM(Google Tag Manager)脚本


如何

Html

<span class="js-ga-opt-out">Disable GA - Server side solution</span>
<span class="js-ga-opt-in">Enable GA - Server side solution</span>

Javascript

function optOutGoogleTracking(){
    setCookie('_ga', undefined);
    // AJAX call to your web service setting the relevant cookie
    $.ajax({ 
      url: <optOutGoogleTrackingUrl>,
      type: 'GET',
      data: { optOutGoogleTracking: true} 
    })
    alert('disabling GA cookies');
    window.location.reload();
}
function optInGoogleTracking(){
    // AJAX call to your web service setting the relevant cookie
    $.ajax({ 
      url: <optOutGoogleTrackingUrl>,
      type: 'GET',
      data: { optOutGoogleTracking: false} 
    })
    alert('enabling GA cookies');
    window.location.reload();
}
$('html').on("click", ".js-ga-opt-out", function(){
    optOutGoogleTracking();
});
$('html').on("click", ".js-ga-opt-in", function(){
    optInGoogleTracking();
});

JSP

在这里,我们假设您已经设置了一个名为optOutGoogleTracking的属性的值。

它存储在哪里取决于你,但可能是在应用程序级别,因为它在你的所有网站上都有使用。

我假设您有一个自定义的JSP标记,如这里所解释的,称为allThatJazz,它允许我访问这个值。

<c:if test="${allThatJazz.optOutGoogleTracking==false}">
    // put your Google Tag Manager script here
</c:if>

注意:我自己还没有实现