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

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

提问人:Gamby 提问时间:5/5/2016 最后编辑:AdrianoGamby 更新时间:10/28/2023 访问量:30100

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

27 天前关闭。

在某些国家/地区(例如意大利),法律要求网站有义务提供/分析cookiedisableenable

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

我读了这篇文章,涵盖了这个“选择加入/选择退出分析主题”。


但是,我仍然有一个问题:

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

JavaScript JSP Cookies 服务器端 Google-Tag-Manager

评论

0赞 nyuen 5/5/2016
只是为了争论,如果我想选择加入分析跟踪怎么办?尽管我的“服务器端 cookie”另有说法,但您怎么知道呢?毕竟,我可能是同一台计算机上的不同用户。顺便说一句,不幸的是,这需要被标记为偏离主题,因为它与编程无关。
0赞 Gamby 5/5/2016
你是对的,但这是一个普遍的cookie问题,而不仅仅是我的;)每次基于 Cookie 构建功能时,您都假设该浏览器后面始终是同一个用户

答:

14赞 Eike Pierstorff 5/6/2016 #1

需要指出的是,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数据会随着请求一起发送;你不能指望谷歌为你做这件事)。

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

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

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

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

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

评论

0赞 Gamby 5/6/2016
谢谢Eike。我知道你在前四段中说了什么。也许可以做类似的事情:关于你的句子,但是你可以使用 cookie 来禁用 GTM 中的所有标签,你能给我指出一些参考吗?我肯定不希望谷歌为我这样做;)<script> if (condition) { $('<script>GTM script</' + 'script>').appendTo(document.body); } </script>
0赞 Eike Pierstorff 5/7/2016
@Gamby,我补充了一些解释。
0赞 Adriano 3/13/2017
@EikePierstorff很好的答案,我主要根据您分享的想法添加了一个。你觉得我错过了什么吗?
0赞 Adriano 3/13/2017
@EikePierstorff 我很兴奋,并添加了第二个答案
0赞 Elias 11/9/2022
这可以禁用任何标签,但即使我同意 cookie,我的标签也不会显示。我该怎么办?
1赞 Adriano 3/13/2017 #2

简而言之:

是的,您可以将此 / 选择保存在 上,并根据您的 .opt-inopt-outserver sideJSP


如何

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>

Java脚本

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赞 Danial 8/11/2017
只是一个问题:如果客户/访问者单击链接并将该应用程序范围变量设置为 false,我的意思是 allThatJazz.optOutGoogleTracking 这是一个变量,在您的 JAVA/Spring 框架后端代码中,那么 GTM 将针对所有网站访问者禁用,而不是该特定访问者。我错了吗?
2赞 Adriano 3/13/2017 #3

简而言之

仅限 / / js-cookie 的解决方案,它“仅”部分适用于 GTM(Google Tag Manager),因为它有一个实现。请参阅下面的详细信息。JavascriptjQuery<noscript>


如何

[HTML全

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

Java脚本

// 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 跟踪代码管理器脚本

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

<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 -->

我的理解是,该标签存在于禁用 Javascript 的情况下。然后,跟踪将通过 iframe 完成。<noscript>

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

这在法律上是否合规?可能不是。

评论

0赞 karadayi 6/23/2017
未定义 Cookie
0赞 Adriano 6/28/2017
@karadayi什么意思?
0赞 Brylie Christopher Oxley 12/3/2021
对象的定义在哪里?CookiesCookies.get('optOutGoogleTracking')
0赞 Brylie Christopher Oxley 12/3/2021
据我所知,上面的例子依赖于包来提供对象。github.com/js-cookie/js-cookiejs-cookieCookies