跳到正文
LinkProfit

机器人流量与点击质量:你的点击量到底在数什么

LinkProfit Team阅读约 10 分钟
  • analytics
  • traffic-quality
  • bot-filtering
  • agencies
本页内容

每一家跳转服务都能告诉你它应答了多少次请求。几乎没有一家能告诉你其中有多少次是人——而后面这个数字,恰恰是每一份报表都被默认认为包含的那个。链接活在开放的互联网上:它们被建索引、被生成预览、被扫描、被监测、被抓取,其中很大一部分就发生在发布后的几秒之内,早于任何一个人看到那条帖子。

本文讲的是原始计数与「一个你敢在客户会议上为之辩护的数字」之间的那一层:哪些自动化流量是你想放行的、为什么靠名字认出一个爬虫根本不算认出、网络类型究竟能证明什么,以及怎样把这些变成规则和一份诚实的报表。

原始计数是一个请求计数器

跳转引擎统计的是到达的东西。这正是它的长处——它对你无法控制的目标地址同样有效,它扛得住拦截插件,它还能统计一次来自海报的二维码扫描,而那次扫描既没有会话也没有引荐来源,这一点在我们的链接点击跟踪指南里讲过。而这也正是这个数字需要加上限定条件的原因。

抵达一条短链接的自动化流量,可以归入几个辨认得出来的类别:

  • 链接扫描器。 邮件服务商、即时通讯平台和安全网关会在投递时抓取链接,检查它到底通往哪里——这正是一条链接在群发后的那一分钟里、投递都还没完成就已经攒下点击的原因。
  • 预览抓取程序。 社交网络和聊天应用会抓取链接,用来生成带标题和配图的卡片。一个规矩的跳转服务会用元数据来应答它们,而不是把它们路由过去并计入点击。
  • 搜索与 SEO 爬虫。 搜索引擎的索引程序,再加上那些见什么爬什么的商业 SEO 工具。
  • 监测程序。 可用性检查,包括你自己的。HEAD 请求正是出于这个原因照常应答,但不计一次点击。
  • 抓取程序与探测器。 比价采集器、数据收割程序,以及那些在找可以改指向别处的链接的扫描程序。

这几类里,有两类是你自己招来的流量,一类是中立的基础设施,一类并不受欢迎。而「拦掉机器人」这条策略,对它们一视同仁。

好机器人,以及唯一能认出它们的那件事

user agent 只是一句声明

user agent 是一个由发送方自己写的请求头。任何程序都能往里写任何文字,所以一个自称 Googlebot 的请求什么也证明不了,而自称 Chrome 的抓取程序,比坦白承认自己身份的还要常见。user agent 匹配依然有它的位置——它能抓住那些老老实实表明身份的自动化流量,也能给别的信号提供旁证——但在分类器里,它被明确地当作一个弱信号:它只做佐证,不做判定。

核验要检验发送方控制不了的东西

请求是从哪个地址来的,在任何有意义的层面上都不是由发送方挑选的,这正是它适合被检验的原因。做法有两种。

有些运营方会公开自家爬虫使用的地址段。Google、Bing 和 Apple 都是如此,这些文件每天被拉取一次,装进一份查得很快的索引,因此来自清单内地址段的请求,无需在请求时做任何网络动作就能被确认。

对于没有公开清单的爬虫——Yandex、DuckDuckGo、Baidu、Petal——核验是一次分两步的名字检查,而且两步缺一不可:

Claim: "Googlebot" in the user agent

Step 1  reverse lookup of the address
        <address>  ->  crawl-<address>.googlebot.com   ends in the crawler's domain
Step 2  forward lookup of that name
        crawl-<address>.googlebot.com  ->  <address>    matches the original address
        verdict: verified crawler

Same claim, different address

Step 1  203.0.113.9  ->  host9.example-hosting.net     not the crawler's domain
        verdict: not verified, the claim is rejected

正向那一步不是可选项。控制一个地址段的人,通常可以把它的反向记录设成自己想要的任何样子,所以单凭一个反向名字是可以伪造出来的。把这个名字正向解析一次、并拿回原来那个地址,才是把这个闭环合上的那一步。

跳转服务前面的 CDN 自己也会做一次已验证机器人的归类,这个结论既不能被发送方伪造,读取起来也不贵。因此确认是按权威性从高到低依次取用的:公开清单、CDN 的验证结果、反向加正向的名字检查,最后是地址数据库里已知搜索引擎爬虫地址段的归属。

为什么名字检查从不在访客等待时运行

反向查询是一次延迟不可预测的网络请求,而跳转恰恰是毫秒能被人真切感知到的唯一位置,所以它从不同步运行。如果一条规则要问某个爬虫是不是已验证的,而答案不在缓存里,规则就按未验证处理,查询在后台跑,答案会进入缓存、留给来自同一地址的下一次点击。偏向「未验证」的代价是丢掉一次正确的分类;偏向同步查询的代价,是让一个真人在每一次请求上都多等一会儿。

网络类型是上下文,不是判决

除了访客自称是什么之外,他来自的那个地址段本身也有已知的性质。支撑这一层的商业地址数据库,把地址段归入一小组类型:

| 类型 | 这类地址段是什么 | 该数据库中 IPv4 地址段的占比 | | --- | --- | --- | | 未列入 | 普通地址,主要是家庭宽带和企业网络 | 72.1% | | 数据中心、托管、云 | 服务器、云实例、托管浏览器 | 15.3% | | 公共代理 | 任何人都能借道的开放中继 | 9.2% | | 商业 VPN | 面向消费者和企业的 VPN 服务 | 3.2% | | 搜索引擎爬虫 | 已知属于爬虫的地址段 | 0.17% | | TOR 出口节点 | TOR 网络的出口点 | 0.005% | | 网页匿名器 | 基于浏览器的代理页面 | 0.005% |

这张表要仔细读,因为它太容易被读错。那些百分比是一份参考数据库里地址段的占比,不是任何人流量的占比。一个家庭宽带运营商的地址段能服务极其庞大的人群;一个托管地址段可能一个人也不服务。这张表说的是有哪些类别、地址空间在它们之间划分得有多细,而关于你那场营销活动收到了什么,它一个字也没说。

怎么解读这件事,比这些数字本身更重要。数据中心地址并不等于机器人。企业网络会把员工的流量走云基础设施路由出去,注重隐私的消费者用商业 VPN 做一切事情、包括网购,而托管浏览器本来就是一种正常的上网方式。把每一次数据中心点击都删掉,你删掉的就是真实的客户。网络类型只是让置信度上下移动;它自己本身,只是一件关于路由的事实。

质量评分,以及它是拿来干什么的

分类器给出两样东西:一个访客类型——真人、搜索爬虫、程序库、数据中心、VPN、TOR,或者未知——以及一个从 1 到 100 的质量评分,附带得出它的理由。输入就是上面这些,再加上行为信号:同一个地址在一分钟里命中同一条链接的频次、请求里到底有没有带语言偏好,以及请求头的组合是否和 user agent 自称的平台对得上。

这个评分刻意不是一个开关。没有任何东西会因为评分低就被拦截;评分是用来解释一个结论、并喂给报表的,而拦截需要你明确地配置出来。误判的代价是不对称的:一个被当成真人计入的机器人,扭曲的只是一个百分比;而一个被当成机器人拦掉的客户,永远到不了页面,也永远不会来告诉你。

类型、评分和理由都出现在地理分布与流量质量的各项拆分里,其中媒体采买方真正会去翻的是「网络」这张表:自治系统号、运营商名称、地址段类型、总点击与真人点击各占一列。最后这两列之间、逐个运营商看的差额,通常就是一笔流量采购的全部故事。完整的清单写在地理数据分析文档里。

把一个结论变成一个决定

一个结论只有在有什么东西能据此行动时才有用。流量过滤规则会给一条链接挂上一组有序的条件,在 edge 上于选定目标地址之前完成判断,第一条命中的规则决定结果。而一条没有规则的链接,不会多做任何一点工作。

这里用得上的条件是访客类型、是否为已验证爬虫、网络类型和质量评分阈值,此外还有地理位置、自治系统、地址清单、设备、语言、来源页面、user agent 匹配模式、营销活动标记、当地时间,以及首次访问与再次访问之分。处置结果有:放行、以 404 拦截、以 410 拦截、送往别处、展示一张带你品牌的占位页面,或者放行但把这次访问标记为可疑。

有三个设计细节,决定了这套东西放到生产环境里跑是不是安全的。

条件是三值的。 成立、不成立,或者因为缺数据而无法回答——而「无法回答」永远不算命中。如果地址数据库不可用,一条以网络类型为条件的规则不会触发,访客会照常抵达正常的目标地址。过滤在失败时是放行,绝不是拦死。

取反只翻转确定的答案。 写成「除德国以外的所有人」的规则,不会在那些国家无法判定的访客身上悄悄触发。一条出于好意的地理规则变成一次事故,最常见的正是这条路径。

「放行」这个动作的存在,是为了让过滤器可被审计。 一条放行流量、同时记下自己命中过的规则,正是你在让过滤器真正拦下任何东西之前测试它的办法:先用放行模式跑,去读「已过滤」这项拆分,确认它抓住的正是你预期的那些,然后再改动作。

把通用策略放进工作区级别的规则集里,因为一条关于数据中心的策略很少只针对某一条链接;然后用这条链接自己的规则——它们先被判断——去承载凌驾于这条通用禁令之上的例外。你的可用性监测程序能在它盯着的那一条链接上继续工作,靠的就是这个。规则数量与地址清单的上限写在流量规则文档里。

在你写下第一条关于首次访问的规则之前,还有一个细节:要分清一次访问是首次还是再次,需要在你的跳转域名上放一个很小的 cookie,而它只在确实有规则问出这个问题时才被设置。这件事有隐私上的后果,因此它是靠机制本身按需开启的,而不是默认就开。

客户报表里会发生什么变化

这正是前面所有工作开始回本的地方,而它主要关乎的是:哪些数字会被写到报表页面上。

| 报表里的那一行 | 没有质量层时 | 有质量层时 | | --- | --- | --- | | 头条数字 | 点击量 | 真人点击量,旁边并列显示总点击量 | | 构成拆分 | 没有 | 真人、已验证爬虫、数据中心、VPN、TOR、未知 | | 运营商表 | 每个网络的点击量 | 每个网络的点击量与真人点击量 | | 被过滤的流量 | 看不见 | 每条规则拦下的量,以及每条规则采取的动作 | | 尖峰的解释 | 「周二发生了点什么」 | 这次尖峰来自哪种类型、哪个网络 |

有两个习惯,能让这份报表不只是详细,而是诚实。永远把两个数字一起给出:一个旁边没有总数的真人点击量,只会招来「总数大概不太好看」的猜疑。以及,把你过滤掉了什么、为什么过滤如实写出来——每一个命中事件上都存着规则标识符和动作,这意味着即使规则后来被你改过或删掉,「已过滤」这项拆分读起来依然是对的。

对代理商来说,运营商表同时也是一件商务工具:一个送来大量流量却几乎没有真人点击的网络,意味着一次要和供应商谈的对话,而拿着逐运营商的拆分去谈,比拿着一个汇总数字容易得多。我们的代理商解决方案联盟营销解决方案两个页面讲了这件事如何嵌进客户报表与结算。

有一件事要直说,因为这个品类里的厂商往往不说:分类是概率性的。一个下了决心的抓取程序,从家庭宽带地址上跑着一个真实浏览器,就会被归类为真人,而市面上没有任何一款产品会告诉你别的答案。这一层清掉的是自动化流量里体量大、识别容易、也肯坦白自己身份的那绝大部分,并且给你留下证据去追查剩下的那些。一份暗示自己确定无疑的报表,迟早会在客户面前出错。

一套可行的操作顺序

  1. 数据分析里保持机器人过滤默认开启,并且把任何在人类可能看到这条链接之前就开始的尖峰,在被证明不是之前都按自动化流量对待。
  2. 先读构成拆分,再读头条数字。一个对该渠道而言反常的自动化流量占比,本身就是一条结论。
  3. 去「网络」这张表里找那些总点击与真人点击严重背离的运营商。
  4. 第一条规则先用放行模式写,盯着「已过滤」这项拆分看一周,等到它命中的量看起来确实是你想要的样子,再把它升级为拦截动作。
  5. 让已验证爬虫保持通过,并用一条位于工作区策略之上的链接级规则,把你自己的监测程序放出去。
  6. 把真人点击量和总点击量一起写进报表,被过滤的量要展示出来,而不是悄悄减掉。

底下的想法很简单:一次点击就是一个请求,一个请求有它的来路,而来路是可以衡量的。真正让这件事值得做的,是它的二阶效应。以真人点击为分母算出来的转化率是稳定的,剔除了托管地址段的地理拆分描述的是市场、而不是基础设施,而一个被完整看过一次自家流量构成的客户,从此不会再问那些数字是不是真的。

大家常问的问题

为什么我的点击量比真实访客数高那么多?

跳转会统计每一个到达它的请求,而其中相当大的一部分是自动化流量:平台在投递时抓取链接做检查,社交网络抓取它生成预览卡片,爬虫为它建索引,监测程序反复轮询它,抓取程序把它收走。这些绝大多数都发生在任何人类可能看到这条链接之前。原始计数与真人计数之间的差额不是错误,它正是质量这一层存在的意义所在。

什么算好的机器人,我又为什么要放它通过?

给目标页面建索引的搜索爬虫、生成收件人所见卡片的预览抓取程序、在投递前检查链接的安全扫描器,以及你自己的可用性监测程序,都是让你受益的自动化流量。拦掉它们的代价是失去收录、让你发布渠道里的预览卡片变成一片空白、让消息被过滤器扣下。真正有用的策略几乎从来不是「拦掉机器人」——而是「放已验证爬虫通过,数据中心和匿名网络另行决定,并且不再把这些算作受众」。

为什么要按地址核验爬虫,而不是按它的 user agent?

因为 user agent 只是请求头里的一句自我声明,任何程序都能往里写任何文字——写一个自称 Googlebot 的抓取程序毫无难度。核验必须去检验发送方控制不了的东西。Google、Bing 和 Apple 都公开了自家爬虫使用的地址段,并且每天刷新,因此来自清单内地址段的请求可以直接确认。对于没有公开清单的爬虫,办法是反向查询:这个地址必须解析出一个位于爬虫自有域名之下的主机名,而这个主机名再正向解析回去,必须还是原来那个地址。两半缺一不可,因为单独一条反向记录,控制该地址段的人想写成什么都行。

地址属于数据中心,是不是就说明这次点击是机器人?

不是,而且这样处理会把真人从你的报表里删掉。走云基础设施出口的企业网络、托管浏览器,以及用着商业 VPN 的注重隐私的消费者,都会从被归类为数据中心或 VPN 的地址段里产生真人点击。网络类型是抬高或压低置信度的上下文,不是判决。正因如此,分类器给出的是一个带理由的评分,而不是一个非此即彼的标签,而要不要拦截,留给你自己写的规则去决定。

如果我拦掉一部分流量,它会从报表里消失吗?

不会。被拦截的访问照样作为点击事件记录下来,带着命中的规则标识符和所采取的动作,并出现在「已过滤」这项拆分里。删掉被过滤的事件,就再也分不清一个正常工作的过滤器和一个正在悄悄吞掉你受众的过滤器。有三块面板——「已过滤」「流量质量」和「网络」——即便打开了「排除机器人」开关,也照样包含自动化流量,因为你打开这几块面板的目的,本来就是去看机器人。