做蜘蛛池和入口页运营时,日志里出现大量带 spider 字样的 User-Agent 是常态。但 UA 只是一个请求头字符串,任何人用 curl 都能写成 Googlebot。把假蜘蛛当成真蜘蛛,容易误判抓取效果;把真蜘蛛当成攻击拦掉,又会白白损失目标 URL 的发现机会。下面是一套从日志出发、按顺序做的甄别方法。
为什么不能只看 User-Agent
只看 UA 会带来两个方向的麻烦:一是把扫描器当成抓取来源,误以为入口页“被蜘蛛访问过了”;二是把限速策略套到真蜘蛛身上,影响入口页被正常抓取的频率。判断抓取来源,要看 IP 和行为,UA 只能作为一个辅助字段。
需要说明的是:验证通过只说明“这是官方蜘蛛发出的请求”,并不代表目标 URL 一定会被抓、被收录。验证的意义在于区分流量来源,不是效果承诺。
第一步:反向 DNS 解析,再做正向核对
主流搜索引擎的官方蜘蛛,基本都可以用“反向解析 + 正向回查”来确认身份:
- 取日志里的客户端 IP,做反向 DNS 解析,得到主机名。
- 再用这个主机名做一次正向解析,看返回的 IP 列表里是否包含原来的 IP。
- 检查主机名的域名后缀是否符合官方规则。
常见后缀:Googlebot 为 googlebot.com 或 googleusercontent.com;Bingbot 为 search.msn.com;百度、搜狗、360 等也有各自的官方域名段,可以直接在对应搜索资源平台的帮助文档里查到。只做反向解析、不做正向核对,是常见的错误——伪造一条 PTR 记录并不困难。
第二步:对照官方 IP 段列表
Google、Bing、百度、Yandex 等都会公布蜘蛛使用的 IP 段,部分还提供 JSON 文件供程序化拉取。做法是把日志里的 IP 与官方列表做匹配:
- 命中的,基本可以确认为官方蜘蛛;
- 不命中的,先不要直接封,继续看后面几步。
这里要注意 IPv6 容易被忽略。不少站点只匹配了 IPv4 段,结果来自 IPv6 的官方抓取被当成了陌生流量。
第三步:看行为,而不是看名字
真蜘蛛和伪装者在抓取行为上通常有明显差异:
- 路径分布:搜索蜘蛛一般按链接结构逐层铺开,会抓入口页、列表页、详情页;假蜘蛛往往集中打登录页、后台地址、配置文件和采集接口。
- 频率与并发:伪装者常在短时间内高频请求同一批 URL,间隔没有规律。
- 头部完整度:官方蜘蛛的 Accept、Accept-Encoding 等头部比较规范,UA 版本号会随实际版本更新;伪造 UA 常出现版本号长期不变或格式残缺。
- 是否回访:官方蜘蛛会在较长时间内多次回访同一站点;一次性刷完就消失的,多数不是。
第四步:确认你看到的是真实客户端 IP
如果站点前面有 CDN 或反向代理,日志里记录的可能是节点 IP,直接拿它做验证会得出错误结论。这时要先确认日志格式,取真实客户端 IP(通常是 X-Forwarded-For 中最左侧的那个地址),再做解析和核对。否则会出现“官方蜘蛛 IP 全部不匹配”的假象。
误判之后容易踩的坑
- 把官方蜘蛛封掉,入口页长期没有正常抓取记录,却以为是蜘蛛池本身没效果。
- 把伪装流量当成抓取量,误判入口页已被大量发现。
- 只验证一次就长期沿用,而官方 IP 段是会变化的,需要定期更新核对列表。
一个可执行的核对顺序
- 确认日志字段完整:客户端真实 IP、UA、时间、请求 URL、状态码。
- 对 UA 含蜘蛛字样的 IP 做反向解析,并正向核对主机名。
- 与官方 IP 段列表比对,注意不要漏掉 IPv6。
- 对未命中的 IP,查看路径分布、请求频率和回访情况。
- 确认为伪装流量的,按普通访问者处理(限速、拦截、加验证),不要和蜘蛛策略混在一起。
把这几步做成固定流程之后,入口页的抓取记录才具备参考价值。后续无论是排查目标 URL 为什么一直没动静,还是调整入口页的链接结构,判断依据都会清楚很多。