做蜘蛛池和站点运营时,日志里出现大量带搜索引擎 UA 的请求,很多人会直接当成搜索蜘蛛来了。但如果这些请求里混着采集器、扫描器或伪装爬虫,你据此判断入口页是否健康、调整抓取节奏,方向就会偏。下面把常见的核对方法按顺序理一遍,都是可以在自己服务器上复现的操作。
为什么不能只看 UA
User-Agent 是请求头里最容易伪造的一段字符串,改起来几乎没有成本。所以“UA 写的是 Googlebot、Bingbot、Baiduspider”只能说明对方愿意这么写,不能说明它真是搜索蜘蛛。反过来,真正的蜘蛛偶尔也会因为代理、版本升级出现看起来不常见的 UA,所以也不能只靠关键词一刀切。
三层核对,从便宜到严格
第一层:UA 加 IP 归属
先用 UA 做初步筛选,再看这个 IP 的归属地和 ASN。搜索引擎的抓取 IP 通常来自固定的机房与网段,如果 UA 写着搜索蜘蛛,IP 却来自家用宽带、VPS 商家,基本可以先打个问号。这一层只能过滤明显不合理的请求,不能作为最终结论。
第二层:反向 DNS 看域名后缀
对来访 IP 做一次反向解析(PTR),命令层面就是 host IP 或 dig -x IP。以 Googlebot 为例,官方给出的验证方式是:反向解析得到的域名应以 googlebot.com 或 google.com 结尾。Bingbot 类似,通常会落在 search.msn.com 一类的域名下。解析不出来,或者解析出的域名后缀对不上,就可以判为伪造。
第三层:正向解析回验
拿到反向解析出的域名后,再把这个域名做一次正向解析,看返回的 IP 里是否包含最初那个来访 IP。如果对不上,同样不可信。这一步很关键,因为 PTR 记录本身是可以被配置的——只要你控制那段 IP,就能把反向域名写成任何样子。只有反向、正向能互相印证,才算比较可靠的证据。
官方 IP 段列表更省事
部分搜索引擎会公布自己的抓取 IP 段或提供可定期拉取的 JSON 文件。对于量大的站点,把这些网段做成白名单并定期更新,比每条日志都手算一遍要实用。注意列表会变动,更新频率要跟上,否则新网段会被你误判成假蜘蛛。
几种容易误判的情况
- 经过 CDN 或反向代理:日志里记录的可能是节点 IP,真实来源要看你自己的接入方式。X-Forwarded-For 可以被伪造,只应在可信代理层之后采信。
- IPv6 请求:验证逻辑和 IPv4 一样,但很多脚本只写了 IPv4 的匹配规则,会把真蜘蛛漏掉。
- 官方网段更新:新增或调整网段是常态,白名单要有更新机制。
- 特殊抓取程序:图片、移动端、站点验证类抓取可能使用不同的 UA 标识,不要一概当作假蜘蛛。
- 你自己或第三方工具的请求:监控、拨测、SEO 工具的访问也可能带类似 UA,先排除掉再下结论。
核对完之后,日志能用来做什么
真蜘蛛的抓取频次、状态码分布、抓取到的 URL 范围,可以用来判断入口页是否正常、有没有被拦截、链接是否被读到。伪蜘蛛的请求则往往表现为高频、集中在少数 URL、忽略 robots.txt,这类流量可以单独统计或限速,避免混进你的抓取数据里干扰判断。
需要说明的是,这些核对解决的是“数据准不准”的问题,属于排查和观测手段,并不代表清理掉假蜘蛛后收录或排名就会有什么变化。真正影响抓取的,还是入口页可访问性、响应速度和链接结构本身。
建议把核对逻辑写成一个固定脚本,按天跑一次日志样本,比每次凭印象判断要稳得多。