Skip to content

我们的大部分搜索流量从来都不是真人

作者:Oleg Sidorkin,Cinevva CTO

我们的自然搜索流量正在增长,而且今年以来一直如此。这部分是真的。但 7 月初,曲线突然跃升,与我们发布的任何内容都对不上。一次毫无缘由的跃升,值得花一个下午查清楚。

我们展开调查,发现一支带着 Google 引荐来源而来的无头 Chrome 集群。

80.6%过去 30 天内所有会话均为自动化流量
89%Google 自然搜索会话是虚假流量
1.7%Google Ads 会话是虚假流量
34.2%所谓的“跳出”实际上是真实读者

曲线形态比峰值更重要

100%75%50%25%03 月4 月5 月6 月7 月89%每周会话中被标记为自动化流量的占比

整个春季,虚假流量的占比在会话总数的三分之一到三分之二之间波动。这大致就是任何公开网站都会面对的背景噪声。

到了 6 月下旬,这一比例开始攀升,并持续走高。以 4 月第一周为基准,到 7 月中旬,真实会话增长了约 5.5 倍,而自动化会话增长了约 18.6 倍。

底层的增长是我们的。自动化集群叠加在真实增长之上,这正是它比普通垃圾流量更难发现的原因。虚假信号搭乘真实趋势,看起来就像增长正在加速。

为什么它很难被发现

我们一直密切关注这些数字,任何无法解释的变化都会促使我们编写查询来调查。之所以这次需要深入挖掘,是因为仅凭我们的会话记录,确实无法区分这两类流量。

互动情况是根据每个会话的 last_activity_at 时间戳推断的。对于只访问一个页面的会话,该字段在首次写入后就不会再发生变化。

因此,一个加载单个页面后离开的机器人,与一个进入指南页面并阅读五分钟的人,写入的是完全相同的记录。跳出率、网站停留时间、互动情况,所有这些指标都来自一个对单页会话毫无信息量的字段。这种情况并不少见。大多数自建分析系统默认就是这样,而这也是我建议你首先检查的地方。

解决办法是不再从会话记录中推断,而是读取退出信标。它会从客户端报告真实的页面停留时间和滚动深度。有了证据而不是推断,这两组流量立刻就区分开了。

被标记的会话其他所有会话
有过任何滚动1.8%56.5%
属于已登录账户0.05%29%

这一差距证明分类器描述的是一种真实现象,而不是把安静浏览的访客误判为机器人。

到底是什么暴露了自动化集群

用户代理是最糟糕的判断依据,因为它的修改成本最低。事实证明,最有效的信号是显卡。

数据中心里的无头浏览器没有 GPU,因此会回退到软件渲染,而 WebGL 会直接报告渲染器字符串。SwiftShader、llvmpipe、Mesa OffScreen。真实访客使用的是真实 GPU。

信号能识别什么占我们证据的比例
软件 GPU 渲染器没有实体显卡90.5%
数据中心或代理 ASN租用的网络来源58%
navigator.webdriver未关闭的自动化标志10.4%

网络来源的帮助没有想象中那么大。这些会话中,大约每十个就有四个通过真正的消费级 ISP 出口。住宅代理现在很便宜,任何假设机器人都来自 AWS 的规则都会漏掉近一半。

其余证据来自客户端自报信息中不可能真实存在的组合。Chromium 用户代理始终以一个与其 AppleWebKit 标记匹配的 Safari 标记结尾,自 2013 年以来一直固定为 537.36,但这支集群却产生了诸如 Safari/537.35 和 .38 这样的错误。一个手机用户代理声称拥有 1600x1200 的屏幕。另一个变体声称屏幕是完美的 1600x1600 正方形。还有一个声称是 1200x3000,相当于一台纵向摆放、宽高比为 2.5:1 的桌面显示器,而这种产品根本没有厂商生产。

其中每一种都是某人的模拟器配置,而如果你不专门去查,它们就永远不会浮现出来。

每次被标记后,集群都会调整

最初的特征是 Linux Chrome、Google 引荐来源、America/New_York、1920x1080。我们写了一条规则。

随后,一个采用 800x600 分辨率和 UTC 时区的变体出现了。我们扩大了规则范围。

接着,一个中国流量群体出现了。它们使用中国移动和中国联通的住宅地址,并锁定特定浏览器版本,其中包括 2022 年 3 月发布的 Chrome 99,以及 Chrome DevTools 设备模拟的默认配置:一台 2015 年的 Nexus 5,运行 2018 年版微信。它们通过消费级 ISP 出口,因此我们所有基于网络的规则对它们都毫无用处。

之后又出现了一个美国变体,通过 Cox 和 Comcast 上网,使用完全合理的最新版 Chrome 146 用户代理,分辨率为 1920x1080。这个指纹没有任何明显错误,而且逐个会话来看,它与真实访客无法区分。

因此,我们构建的最后一个检测器不再查看单个会话。它按国家、用户代理、屏幕尺寸和流量来源,对过去 48 小时的数据进行分组,然后寻找至少包含 20 个匿名会话的集群,其中 95% 或更多的会话既没有阅读满三秒,也没有滚动哪怕一个像素。

真实访客不会如此紧密地聚集。二十个陌生人使用完全相同的浏览器和完全相同的分辨率,而且全都没有阅读任何内容就离开,这其实是一台拥有二十个地址的机器。集群中任何确实阅读或滚动过的访客都会继续被视为真人,而关联到真实账户的会话永远不会被标记。

指纹规则会逐渐失效,因为绕过它们只需要修改配置。行为规则更持久,因为伪造行为会让操作者付出真金白银。

审计也发现了相反的错误

在从数据中剔除虚假访客时,我们还发现了一些此前被我们排除的真实访客。

有了真实的阅读时长后,我们发现,在被归类为真人跳出的会话中,有 34.2% 的访客阅读了至少 30 秒,或者滚动超过了页面的一半。这些所谓的“失败”中,有三分之一其实意味着内容发挥了作用。从 Bing 进入网站的中国读者会在一篇指南上停留五分钟,却仍被记录为跳出。

数据同时在两个方向上出现偏差,而这两种错误又指向同一个错误结论。它们结合起来,会让你以为自己的流量规模很大但参与度很浅,而实际情况是流量更小、参与度更深。

我们付费购买的渠道反而最诚实

按来源划分的自动化会话占比Google 自然搜索直接访问Bing引荐流量AI 助手Google Ads89%80.4%7%3.7%2.8%1.7%025%50%75%100%

过去 30 天。在此期间,Google 自然搜索占全部会话的 63.7%。

增长领域的所有直觉都与此相反。你会认为付费渠道才是容易被欺诈的地方,而自然流量则是自己挣来的。我们的情况恰好颠倒了。

如果我们根据 7 月的数据重新分配预算,就会把资金从真正带来真人的渠道撤走,转而为一个爬虫制作更多内容。

为什么这值得花一个下午

数字本身只是数字。但位于它下游的,是我们接下来要写哪些页面、要投资哪个语言版本、某个推广活动能否通过评审,以及这个季度的表现是否好到足以让我们继续照旧行事。一个拥有廉价代理池的陌生人,就能影响所有这些决策。

如果你运营的是一个小型网站,在相信自己的增长曲线之前,先去检查 GPU 渲染器字符串和退出信标。

同时,请把我们的数字视为下限,而不是最终结论。这里的“真人”只意味着“尚未被发现”,这些规则来自我们碰巧观察到的指纹,而且我们仍然不知道是谁在运营这支集群,也不知道他们为什么盯上一个游戏创作网站。


相关内容: