站点运维到一定阶段,日志里常常会出现大量带着搜索引擎 UA 的请求。这些请求里,有真实蜘蛛,也有伪装脚本。前者关系到 URL 发现与内容更新,后者只是消耗带宽和 CPU。核对身份的意义,就是把这两类流量分开处理,而不是把所有带蜘蛛 UA 的请求都当成同类。
为什么需要核对
两种误判都会带来麻烦。误封指把真实蜘蛛拦在门外,结果是新页面迟迟不被发现,Sitemap 提交后也看不到对应的抓取记录。误信则相反,把伪装脚本当成搜索引擎,任由它高频请求,服务器负载上去之后,真实蜘蛛的响应也会变慢,抓取节奏跟着受影响。
UA 字符串是最容易伪造的部分,只看这一个字段几乎没有判断价值。真正有用的核对,是把来源、解析和行为放在一起看。
第一层:UA 与来源 IP 的组合
- 搜索引擎蜘蛛的 UA 通常带有标识和版本号,但格式并不完全固定,不能只靠关键词匹配。
- 同一个 IP 在短时间内切换多种 UA,通常不是正常蜘蛛的行为。
- 来源 IP 段与 UA 之间,一般存在可对应的归属关系。
反向解析的做法
对访问 IP 做反向 DNS 查询,看返回域名是否属于搜索引擎的官方域。拿到域名后再做一次正向解析,确认它回到同一个 IP。只有正反双向一致,身份判断才比较可靠。只做反向解析容易被伪造的 PTR 记录骗过。
IP 段归属核对
主流搜索引擎会公布自己的抓取 IP 段,并定期更新。把这些网段整理成清单,与日志中的来源 IP 做比对,是成本较低的一步。需要注意的是,网段会变,清单要定期复核,拿一份过期的列表去封禁,反而可能挡住真实抓取。
第二层:行为特征
抓取频次与并发
真实蜘蛛的频次与站点规模、更新频率大致相关,并发也有上限。某个 IP 在几分钟内连续请求几千次、并发远高于正常水平,就值得多看一眼。
抓取路径与时段
真实蜘蛛的路径通常落在站内链接图、Sitemap 和已知入口之内,表现为从列表页向内页扩散。伪装脚本更容易出现扫目录、试探后台路径、请求不存在文件这类行为。时段上,真实抓取在全天分布相对平稳,异常脚本则可能在深夜集中放量。
与 robots.txt 的配合
正规蜘蛛会读取 robots.txt。可以在服务器侧单独记录 robots.txt 的请求来源,观察哪些 IP 在抓取前先来取规则文件。这个信号只能作为参考,不能单独定论,但和其他线索叠加时很有用。同时也要确认自己的 robots.txt 没有把真实蜘蛛需要抓取的路径挡住。
日志采样与统计
- 按 IP 聚合请求量,找出量级明显偏高或偏低的来源。
- 把 UA、请求路径、状态码交叉起来看,而不是分字段单独统计。
- 用 Sitemap 和已知内链集合做对照,看请求的 URL 是否有对应入口。
- 对可疑 IP 抽样做反向解析,不必全量处理。
处置顺序
- 不要仅凭 UA 就下封禁决定。
- 确认是伪装爬虫后,优先在 WAF 或服务器层面限速,而不是直接整体拒绝。
- 对真实蜘蛛保持稳定响应,避免 5xx、超时和频繁重定向。
- 保留一段时间的日志,便于状态变化后回溯。
核对身份的目的,是搞清楚服务器资源被谁消耗、抓取节奏是否受影响,而不是把所有非搜索引擎流量一律拦掉。
小结
UA、反向解析、IP 段归属和行为特征,单独看都只是线索,组合起来才能形成相对可靠的判断。把这套核对做成定期动作,服务器波动或抓取异常时,排查会快很多,也不容易因为一次误封而影响 URL 发现。