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

问题描述 投票:0回答:4

在某些国家(例如意大利),法律要求网站必须提供

disable
/
enable
分析 cookies

例如:Google 跟踪代码管理器。

我阅读了这篇文章,涵盖了“

opt-in
/
opt-out
分析主题”


但是我还有一个问题:

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

javascript jsp cookies server-side google-tag-manager
4个回答
14
投票

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

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

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

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

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

GTM 无法自行设置 cookie(除非您使用设置 cookie 的脚本编写自定义 HTML 标记,这与通过内联代码执行此操作没有什么不同),因此我将假设您已经有一个名为“opt”的 cookie -出去”。该 cookie 中存储什么值并不重要,我们只会检查它是否存在。

转到 GTM,到“变量”部分,单击“新建”并选择“第一方 Cookie”。命名它例如“选择退出 Cookie”并将名称字段设置为“选择退出”。节省。现在您有一个变量来检查选择退出 cookie,如果已设置则返回一个值,如果 cookie 不存在则返回“未定义”。

现在转到触发器部分并创建一个页面视图类型的新触发器。称之为例如“选择退出触发器”。在“fire on”部分中,您在第一个字段中选择“Opt Out Cookie”变量,将“不等于”设置为条件,将“未定义”设置为值(因此在设置 cookie 时触发器将评估为 true)。

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

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


2
投票

简而言之

Javascript
/
jQuery
/
js-cookie
唯一的解决方案,“仅”部分适用于GTM(Google标签管理器)的情况,因为它有一个
<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();
});

Google 跟踪代码管理器脚本

请注意,

<noscript></noscript>
标签内的内容无法使用Javascript有条件地跳过。

<script src="https://cdn.jsdelivr.net/npm/[email protected]/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 完成。

对于大多数情况来说,这个解决方案可能“足够好”。

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


1
投票

简而言之:

是的,您可以在

opt-in
上保存此
opt-out
/
server side
选择,并根据 JSP 中的相关属性值有条件地添加 GTM(Google 跟踪代码管理器)
脚本


如何

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>

注意:我自己还没有实现这个


0
投票

永久删除所有谷歌标签 永久删除所有谷歌标签 永久删除所有谷歌标签 永久删除所有谷歌标签 永久删除所有谷歌标签 永久删除所有谷歌标签 永久删除所有谷歌标签

© www.soinside.com 2019 - 2024. All rights reserved.