做站点运营,服务器日志里总会出现各种自称是搜索引擎爬虫的请求。UA 字符串是最容易伪造的部分,任何脚本都能把它写成 Googlebot 或 Baiduspider。如果仅凭这一点就放行或拦截,要么给恶意抓取开了门,要么把真正的搜索蜘蛛挡在门外。
只看 UA 会踩哪些坑
常见的情况有两类。一类是采集脚本伪装成搜索引擎爬虫,绕开频率限制,把页面成批抓走;另一类更麻烦:站长为了防采集,在服务器或 WAF 里直接封禁包含某个 UA 关键词的请求,结果误伤了正常的搜索蜘蛛,抓取量掉下来,却一时找不到原因。
- UA 可以随意修改,没有校验机制,不能作为身份凭证。
- 搜索引擎的爬虫 UA 通常是公开的,写进规则里等于公开了绕过方式。
- 不同搜索引擎、不同抓取用途,比如图片和移动端,可能使用不同 UA 和 IP。
几种可用的验证手段
反向 DNS 验证
主流搜索引擎一般会提供反向 DNS 查询:把访问来源 IP 做一次反解,得到的主机名应当落在官方域名下;再对该主机名做一次正向解析,确认能回到同一个 IP。两次解析都吻合,才能说明这个 IP 属于该搜索引擎。关键在于正反都要查,只做反向解析同样可能被人构造。
官方 IP 段与公开列表
部分搜索引擎会公布自己的 IP 段,或提供可下载的列表。定期拉取并更新到防火墙、限流规则里,比在代码里写死一段 IP 更稳妥。注意这些列表会变,维护动作要放进日常巡检,而不是配置一次就放着不管。
行为特征
真实搜索蜘蛛的访问通常有迹可循:请求路径分布相对分散,对 robots.txt 和站点地图有一定关注,单 IP 的并发不会高到离谱。反过来,短时间集中抓取某个目录、只请求列表页不请求详情、并发数稳定得像脚本,这些都值得多看一眼。行为特征适合做辅助判断,不适合单独作为封禁依据。
误伤与放行之间怎么取舍
验证的成本通常比误封低。多数情况下,宁可对可疑请求限速、加验证,也不要一刀切封禁整个 UA 段。
一个务实的顺序是:先确认身份,再决定策略。身份明确的搜索引擎 IP,给正常抓取预算;身份不明但请求特征温和的,限速观察;身份不明且行为激进的,才考虑拦截或加验证。把 限速 作为默认动作,比直接拒绝更容易在安全和收录之间取得平衡。
落地时可以这样做
- 在日志里固定记录来源 IP、UA、请求路径和响应码,便于回溯。
- 对声称是搜索引擎的 IP 做反向 DNS 校验,校验结果落库或缓存,避免每次请求都实时查询。
- 定期更新官方 IP 段列表,写进服务器或 CDN 的访问控制规则。
- 对未通过校验的请求先限速,观察一段时间再决定是否拦截。
- 保持 robots.txt 和站点地图可访问,别让正常的爬虫在门口就被挡下。
小结
验证爬虫身份不是要把每一个请求都查个底朝天,而是把谁在抓、抓得是否合理这件事变得可判断。UA 字符串只能当作线索,不能当作通行证。把反向 DNS、IP 段和行为特征组合起来用,再配合限速而不是直接封禁,站点在服务器维护和抓取治理上会从容很多。
需要提醒的是,任何验证手段都只是降低误判概率,不是绝对保险。规则上线后,记得对照日志看抓取量的变化,发现异常及时回滚。