Kal*_*lko 8 cookies google-analytics
我正在尝试使用无 cookie 的 Google Analytics 实施,以便我们的网站可以根据 Google Analytics 文档,在用户接受 cookie 之前跟踪访问(一旦接受,就切换到标准版本)。
我正在使用本教程中描述的技术: https://medium.com/swlh/how-to-use-google-tag-manager-and-google-analytics-without-cookies-7d041c73cc76
我使用以下代码(出于本文的目的,进行了简化并删除了不相关的其他脚本)
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-xxxxxxxx', {
send_page_view: true,
client_storage: 'none',
client_id: '<key-from-local-storage>',
});
Run Code Online (Sandbox Code Playgroud)
使用这种方法似乎一切正常 - 直到我在检查器中查看站点cookie。无论 client_storage 设置如何,仍然会生成“_ga”cookie。
当我使用标准 cookie 版本的分析(没有 client_storage:“none”)时,会以完全相同的方式生成相同的 cookie。
我还尝试使用同意模式,使用以下代码
gtag('consent', 'default', {
analytics_storage: 'denied',
ad_storage: 'denied'
});
Run Code Online (Sandbox Code Playgroud)
稍后当用户遵守时将其更新为授予。这适用于阻止内容,但也会阻止在 Analytics 上发生的所有跟踪 - 不会显示任何结果。
有谁知道有什么方法可以真正让 Analytics 不生成 _ga cookie,但仍然跟踪访问的 URL 和基本数据,而不需要 cookie?
当无 cookie 模式像以前一样生成 cookie 时,它会做什么?
我错过了什么吗?
编辑:我尝试在旧的 Analytics 版本上使用相同的无 cookie 更新,该版本使用 ga(...) 函数,并且 cookie 按预期消失。所以看来只有 v4 没有按预期工作。
使用的代码(有效):
ga('create', 'UA-XXXXXXXX-X', {
'storage': 'none',
'clientId': window.localStorage.getItem(GA_LOCAL_STORAGE_KEY)
});
ga('send', 'pageview');
Run Code Online (Sandbox Code Playgroud)
深入研究了一段时间后,发现 Google Analytics 4 并不遵循client_storage: "none"配置模式。
这将起作用:
\n// \xe2\x9c\x85 Configuring Universal Analytics (GA3) cookieless\ngtag(\'config\', \'UA-123456789-1\', { client_storage: \'none\' })\nRun Code Online (Sandbox Code Playgroud)\n这不会工作:
\n// \xe2\x9d\x8c Trying to configure GA4 cookieless\ngtag(\'config\', \'G-123456789\', { client_storage: \'none\' })\nRun Code Online (Sandbox Code Playgroud)\n我不知道这是一个错误还是故意的,我在Google Issue Tracker上找不到任何相关信息。
\n首先,我们尝试使用同意模式(即gtag("consent", "default", { analytics_storage: "denied"})。但这对我们来说不是一个选择,因为使用同意模式将使您的数据在报告中不完全可用。事实上,数据是通过机器学习过程建模的,如所解释的这里。
相反,我们试图了解为什么 GA4 无法将事件发送到 Google Analytics(分析)。事实证明,gtag.js由于以下错误而无法发送事件:“无法设置 cookie。”
我们的应用程序根本不使用 cookie(也不使用第三方工具),因此我们决定覆盖document.cookie并且成功了。这是我们当前生产中的配置:
// Override document.cookie\nconst cookies = {}\n\nObject.defineProperty(document, \'cookie\', {\n get: function() {\n const allCookies = []\n for (const [key, value] of Object.entries(cookies)) {\n allCookies.push(`${key}=${value}`)\n }\n\n return allCookies.join(\'; \')\n },\n set: function(value) {\n const cookieParts = value.split(\'=\')\n const cookieName = cookieParts.shift()\n const cookieValue = cookieParts.join(\'=\')\n\n cookies[cookieName] = cookieValue\n return value\n }\n})\n\n// Initialize Google Analytics\nfunction gtag() { dataLayer.push(arguments) }\n\ngtag(\'js\', new Date())\ngtag(\'config\', \'G-123456789\')\nRun Code Online (Sandbox Code Playgroud)\n这并不适合所有人,因为document.cookie显然不建议覆盖,并且可能会导致意外情况。但这是迁移到 GA4 时唯一对我们有用的方法。
| 归档时间: |
|
| 查看次数: |
1876 次 |
| 最近记录: |