Google Analytics 报告的会话数比服务器日志中的命中数少 10 倍

Posted

技术标签:

【中文标题】Google Analytics 报告的会话数比服务器日志中的命中数少 10 倍【英文标题】:Google Analytics reports 10 times lesser sessions than hits in server logs 【发布时间】:2017-11-13 07:30:54 【问题描述】:

假设我有一个页面mysite.com/mypage

此 URL 在 GA 中指定持续时间的登陆页面报告,为我提供了许多会话 - 比如说 50。

在同一时间段内,我检查了 Apache 的 access.log,并执行了 grep "GET /mypage,我的点击量增加了大约 10 倍——比如说 500。

我们如何才能在 GA 和服务器日志之间出现 10 倍的异常?热门歌曲去哪儿了?

此异常也存在于其他持续时间。我比较了不同的持续时间。

在有人说出这个的标准原因之前,让我指出:

    2 倍或 3 倍的差异是可以理解的,但 10 倍则不然。 不,这不是机器人流量。我从日志中提取了所有唯一 IP,这些 IP 99% 是唯一的。所以流量都来自不同的 IP。 我还分析了用户代理,它们看起来都是真实的(iPhone、三星等各种型号的手机) GA 还表示该报告基于 100% 数据(排除抽样)。 正如我所指出的,我只计算对/mypage 的GET 请求。也就是说,我不计算资产下载、网站图标点击等。

我进行了另一项测试。我获取了所有 IP,然后使它们独一无二,然后对于每个 IP,我分析了来自该 IP 的点击量。我从 84% 的 IP 中发现,没有第二个请求。他们只提出了 1 个请求。

我已阅读Anamoly between google analytics and server hits 并已处理接受的答案中给出的所有内容。

可能是什么?关于如何调试的任何线索?流量来自付费 Facebook 广告。

【问题讨论】:

如果我没记错的话,Google Analytics 添加了在客户端浏览器中运行的 javascript。因此,如果浏览器拒绝运行它(无论出于何种原因),统计信息将不会到达谷歌。另一方面,您的服务器可以完全控制它的数据。 Facebook 在移动设备上有一些奇怪的预加载机制,它会为大量外部对象获取数据,以防万一用户可能想要实际查看它们……也可能在其中发挥作用, 我想。 (虽然用户代理在这种情况下应该包含一些特定的东西,一些 FB ......表明这是他们的预加载机制在工作。) @CBroe 还有什么相关的吗?这很有可能。我忘了提到几乎所有用户代理字符串都包含它是 FB 应用内浏览器的标志。 @Nic3500 没错,但是对于我们投放广告的人口统计数据,10 个用户中 9 个不运行 JS 的可能性很小!对于网络来说,这通常也不正确 显然那个东西叫做“Facebook Liger”,检查这里描述的内容是否与你看到的请求相匹配:inchoo.net/dev-talk/magento-website-hammering-facebook-liger 【参考方案1】:

Facebook 在移动设备上有某种预加载机制,可以为大量外部对象获取数据,以防用户可能想要实际查看它们。

显然那个东西叫做“Facebook Liger”,检查这里描述的内容是否与你看到的请求相匹配:http://inchoo.net/dev-talk/magento-website-hammering-facebook-liger/

您应该能够通过 User-Agent 标头检测到这一点,并可能从您的分析中排除这些请求。

【讨论】:

就是这样。我们调试了FB发送的特殊X-Purpose标头的日志,如果该标头的值为preview,则表示该点击只是预取,因为FB预期用户点击。 10 个请求中有 9 个是 preview 请求,这些请求来自用户自己的 IP。【参考方案2】:

您将会话与综合浏览量进行比较,这不是苹果对苹果的比较。

会话表示在 30 分钟不活动之前的一段连续点击量(例如网页浏览量、事件)。因此,1 个会话可能包含 许多 次网页浏览。

当您在日志中搜索GET /mypage 时,您正在查看从您的服务器请求该页面的次数。这相当于 Google Analytics 中的综合浏览量指标。

我建议您将 pageviews/mypage 与日志中的 GET /mypage 条目进行比较。这应该给你一个更密切的比较。

请注意,由于 Google Analytics(分析)代码可能无法在用户浏览器上触发的情况,很难获得 100% 的匹配。场景示例包括:

在用户离开页面之前不会加载 GA 代码 广告拦截器可能会阻止代码触发 不跟踪设置可能会阻止代码触发

【讨论】:

我的 IP 是独一无二的,所以我认为将其与会话进行比较是公平的。其次,你说的是真的,但不能解释 10 倍。【参考方案3】:

我怀疑 GA JS 没有为那些“额外”会话加载。如果加载正确,每个 /mypage 命中都会发送一个跟踪命中。

获取有关正在发生的事情的信息的最佳方式是存储发送给 Google 的跟踪数据的本地副本。当 GA JS 正确加载时,将向 Google 发送一个跟踪请求,并将另一个跟踪请求发送到您的 Web 服务器的日志文件。

这篇文章解释了如何配置您的 GA JS 代码以保留发送给 Google 的所有跟踪请求的副本,并附有语法示例:

http://support.angelfishstats.com/entries/42575637-How-To-Process-Google-Analytics-Data-with-Angelfish

收到请求后,您会看到发送给 Google 的每个请求都有一个 __ua.gif 匹配。如果您看到 /mypage 的 FB 推荐点击没有相应的 __ua.gif 点击,您将需要调查 /mypage 点击的详细信息。例如:

哪个网络和国家与请求 /mypage 的 IP 地址相关联? 如果您检查多个 IP 地址,是否会出现一种模式? 用户代理看起来合法吗? 客户端使用的是浏览器还是应用程序? FB 是否向您收取点击费用?

如果点击量看起来是假的,请利用您的发现向 FB 投诉并拿回一些钱。

【讨论】:

以上是关于Google Analytics 报告的会话数比服务器日志中的命中数少 10 倍的主要内容,如果未能解决你的问题,请参考以下文章

google / cpc 会话在 Google Analytics(分析)的 Source / Medium 报告中显示为(未设置)/(未设置)

如何将Google Analytics会话与应用会话统一?

为啥 Google Analytics(分析)受众概览显示的用户数多于会话数?

Google Analytics API:每个人会话导出数据

报告Google Analytics analytics.js异常跟踪的例外情况

Google Analytics 与 BigQuery 中的会话 - 差异