根据单个用户的决定禁用谷歌标签管理器(选择退出)
Disable google tag manager according to the decision of single users (opt-out)
在一些国家(如意大利),法律要求网站必须提供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>
注意:我自己还没有实现
- 根据单个用户的决定禁用谷歌标签管理器(选择退出)
- jquery在通过谷歌标签管理器交付时点击不工作
- 删除$fromtataLayertotal-google标签管理器
- 谷歌标签管理器点击事件没有冒泡到家长
- 谷歌标签管理器,事件推送到数据层
- 从谷歌标签管理器提取标签
- 我使用谷歌标签管理器在我的网站上启动标签.变量“;未定义的“;在任何版本的Internet Explorer的自定义代码
- 如果JavaScript标签是通过谷歌标签管理器插入到页面上的,那么它们的延迟程度是多少;s的自定义HTML
- 如何在谷歌跟踪代码管理器 noscript 标签中参数化容器 id
- 检查值存在于标签管理器验证器方法内的数组中
- '无法字符串化dataLayer'当使用谷歌标签管理器'点击监听器'在angular j
- 谷歌标签管理器添加&instrad of just&转换为脚本src
- 表单放弃数据谷歌标签管理器
- 使用谷歌标签管理器跟踪事件
- Youtube iFrame嵌入式视频跟踪-谷歌标签管理器
- 正在分析电子商务数据以推送到谷歌标签管理器的数据层
- 不同域上IFrame中的谷歌标签管理器
- Facebook转换像素和谷歌标签管理器
- ng if和谷歌标签管理器脚本
- 转到谷歌标签管理器破坏了我们的虚拟页面浏览量