未经GDPR同意使用Google Analytics(分析)

2020-12-04 21:03:00

如果您只想复制/粘贴代码,请随时跳到下面的“最终脚本”部分。

我关心我的隐私和本网站访问者的隐私。出于这个原因,我已经停止使用Google Analytics(分析)了,因为我认为它太麻烦了。但是我也想知道人们是否访问了该网站,以及其中最受欢迎的内容是什么。

如果您与我同舟共济,这就是在不侵犯用户隐私的情况下如何使用Google Analytics(分析)的方法。

以前,当我将Netlify用于我的一个项目时,我使用了其Analytics(分析)功能,但每月费用为9美元,而且您无法在30天的时间范围内检索到分析数据。

还有其他选项,例如Matomo,Fathom,Plusible和Simple Analytics,但没有一个提供免费选项。不要误会我的意思,他们应得的每一分钱,但我目前无法负担我的简单分析需求的月费。

我只关心网页浏览量和唯一身份访问者,也不想收集任何个人身份信息。因此,我不想用cookie横幅打扰我的读者。

因此,我决定研究如何在无需GDPR Cookie同意横幅的情况下使用Google Analytics(分析)。

免责声明:我不是律师,而且我对GDPR知之甚少。这是一个简单的博客,我的目的只是避免从访问者那里收集任何可识别个人身份的信息,因为当其他网站收集我的信息时,我不喜欢它。

如果您经营的是一家公司,并且想确保自己符合GDPR的要求,那么您不应该从我这里获取信息。

据我所知,如果我们不收集任何个人身份信息(例如IP),也不存储任何跟踪Cookie,则应该可以。 Google Analytics(分析)开箱即用,可收集IP地址并设置具有唯一客户端ID的跟踪Cookie。在GDPR方面,这是行不通的。

<!-Google Analytics(分析)-> <脚本> (function(i,s,o,g,r,a,m){i [' GoogleAnalyticsObject'] = r; i [r] = i [r] || function(){(i [r]。q = i [r]。q || [])。push(arguments)},i [r]。l = 1 * new Date(); a = s。createElement(o),m = s 。getElementsByTagName(o)[0]; a。async = 1; a。src = g; m。parentNode。insertBefore(a,m)})(window,document,' script',&# 39; https://www.google-analytics.com/analytics.js',' ga'); ga('创建' UA-XXXXX-Y','自动'); ga('发送'网页浏览'); < /脚本> <!-结束Google Analytics(分析)->

告诉Google Analytics(分析)不要存储cookie并匿名化访问者IP非常简单。我们只需要进行以下更改:

// ... ga(' create',UA-XXXXX-Y',{//不要存储任何cookie。'存储&# 39;:' none',}); //匿名化访问者的IP。 ga(' set',anonymizeIp',true); ga('发送'网页浏览'); // ...

现在的问题是,我们不再为访问者分配唯一的访问者ID,因此Google Analytics(分析)无法区分他们。如果我们这样保留代码,则所有访问都将被视为新的唯一身份访问者。

如果您只关心页面浏览量,则可能会很好。如果没有,我们需要创建一个唯一的访问者ID,其中不包含任何个人身份信息。

在标题为Google Analytics(分析):未经GDPR同意的无Cookie跟踪的文章中,Helge Klein使用以下信息来创建唯一的客户端ID哈希:

使用JavaScript可以轻松获取网站域,用户代理和语言,并且我们将有效期设置为所需的数字。这里最棘手的部分是获取用户的IP地址。

不幸的是,我无法仅使用JavaScript来获取用户的IP地址。

Helge在他的文章中利用了以下事实:他控制着为自己的网站提供服务的服务器,因此他将访问者IP嵌入到提供给访问者的脚本中。

我正在为此网站使用GitHub Pages,所以我没有选择。我发现获得用户IP地址的最好方法是从Cloudflare调用以下地址:

我们可以使用简单的正则表达式从该响应中轻松获取IP,例如/ip=([\d.]*)\n/。

<!-Google Analytics(分析)-> <脚本> //基于https://helgeklein.com/blog/2020/06/google-analytics-cookieless-tracking-without-gdpr-consent/ //和https://stackoverflow.com/a/52171480。 const cyrb53 =函数(str,seed = 0){设h1 = 0xdeadbeef ^种子,h2 = 0x41c6ce57 ^种子; for(令i = 0,ch; i< str.length; i ++){ch = str。 charCodeAt(i); h1 =数学。 imul(h1 ^ ch,2654435761); h2 =数学。 imul(h2 ^ ch,1597334677); } h1 =数学。 imul(h1 ^ h1>> 16,2246822507)数学。 imul(h2 ^ h2> 13,3266489909); h2 =数学。 imul(h2 ^ h2>> 16,2246822507)数学。 imul(h1 ^ h1>> 13,3266489909);返回4294967296 *(2097151& h2)+(h1>> 0); }; //如果您的网站是通过Cloudflare服务的,则可以使用//" / cdn-cgi / trace"代替。获取(" https://www.cloudflare.com/cdn-cgi/trace")。然后((response)=> response。text())。然后((text)=> {//我们在这里获取客户端IP。const clientIP = text。match(/ ip =([\ d。] *)\ n /)[1]; //有效间隔为设置为四天const validInterval = Math。round(new Date()/ 1000/3600/24/4); //我们将所有信息组合成一个字符串const clientIDSource = clientIP +";&#34 ; +窗口。位置。主机+";" +导航器userAgent +";" +导航器语言+";" + validationInterval; //在这里,我们从字符串创建一个哈希值。const clientIDHashed = cyrb53(clientIDSource)。toString(16);(function(i,s,o,g,r,a,m){i [' GoogleAnalyticsObject&# 39;] = r; i [r] = i [r] || function(){(i [r]。q = i [r]。q || [])。push(arguments)},i [r ]。l = 1 * new Date(); a = s。createElement(o),m = s。getElementsByTagName(o)[0]; a。async = 1; a。src = g; m。parentNode。insertBefore( a,m)})(窗口,文档,'脚本' ,' https://www.google-analytics.com/analytics.js' ,' ga' ); //不要忘记将其替换为您的跟踪ID。 ga(' create' UA-XXXXX-Y',{//不要存储任何cookie。'存储':&#39 39; none',//我们将哈希作为客户端ID发送。' clientId':clientIDHashed,}); //匿名化访问者的IP。 ga(' set',anonymizeIp',true); ga('发送'网页浏览'); })< /脚本> <!-结束Google Analytics(分析)->

而且,就是这样。以此替换您当前的Google Analytics(分析)脚本,就可以了。

我找不到此资源的使用条款,因此使用后果自负。如果您愿意为此使用其他提供程序,那么T. H. Doan在Stack Overflow上有很多选择的一个很好的答案。 ↩