站点日志里突然多出一批“搜索蜘蛛”的访问,先别急着在 robots.txt 里放行或封禁,需要先回答一个更基础的问题:来的是不是真的搜索蜘蛛。UA 字符串可以随手伪造,不少采集程序、监控工具、甚至一些蜘蛛池服务都会把 UA 写成 Googlebot 或 Bingbot。只看 UA 做判断,很容易一边把真蜘蛛挡在外面,一边给假蜘蛛开了绿灯。
只看 UA 会踩的两个坑
第一个坑是误伤。把 UA 里带 bot 的请求一律拦截,可能顺手拦掉真蜘蛛的部分 IP,随后出现抓取量下降、缓存内容变旧。第二个坑是误放。把写着 Googlebot 的请求全部当成真蜘蛛,等于给任意来源的爬虫开了后门,它们可以顶着这个身份高频抓取,服务器负载被悄悄吃掉。
几个比较典型的可疑信号:
- UA 写着主流搜索引擎,但来源 IP 不在该引擎公布的网段里。
- 请求频率远高于日志里真蜘蛛的常态,且集中在少数接口或列表页。
- 只抓带参数的 URL,或只抓某个目录,不请求 robots.txt 与常见静态资源。
- 反向 DNS 查不到记录,或主机名与该搜索引擎的官方域名后缀无关。
核对顺序:先 IP,再反向 DNS,最后正向解析
判断身份的顺序不能倒过来。UA 放在最后看,前面两步才是硬证据。
- 比对 IP 网段。主流搜索引擎都会公布自己的爬虫 IP 段或 JSON 列表,把日志里的来源 IP 和这份名单对照,不在名单里的先归为待核实。
- 做反向 DNS 查询。对 IP 反查得到主机名,再看主机名是否以官方域名结尾,例如以 googlebot.com、search.msn.com 这类后缀收尾。名字看起来像还不够,后缀必须对得上。
- 做正向解析回查。拿上一步得到的主机名再解析一次,确认返回的 IP 与最初记录的 IP 是同一个。只有这一步也对上,反向 DNS 才真正可信。
- 定期更新名单。IP 段会变,把比对规则做成定期拉取,比手工维护一份静态清单可靠。
反向 DNS 与正向解析互相印证,才算比较硬的证据;只对得上 UA,不构成判断依据。
验明身份之后:真蜘蛛放行,假蜘蛛按普通访客处理
对真蜘蛛
真蜘蛛要的不是特殊照顾,而是稳定和可预期:响应时间别忽高忽低,别让 WAF、验证码、Cookie 同意弹窗挡在抓取路径上,需要渲染的页面要保证 CSS、JS 可访问。如果站点压力确实大,优先在站长平台调整抓取速率,而不是直接在服务器上返回 403 或 429,后者可能让蜘蛛在之后一段时间里降低对整站的抓取。
对假蜘蛛
假蜘蛛不必单独设计策略,按普通访客的规则处理即可:按 IP 与路径限速,对异常高频的 UA 加 IP 组合做临时封禁,必要时上验证。要注意的是,不要因为某个 UA 被滥用过就全局拉黑这个 UA,真蜘蛛也会用同样的字符串。
限流要落在具体的维度上
服务器稳定性直接影响抓取,但限流不能一刀切。按 IP 限并发、按路径限频率、按连接数设上限,比按 UA 全站拦截更精准。观察几个指标:单 IP 的并发连接数、单位时间请求数、5xx 比例、平均响应时间。真蜘蛛的高频通常伴随正常的路径分布;伪装的爬虫往往集中在少数 URL 上,这两个特征比 UA 更能说明问题。
日志里至少要留下这几列
- 来源 IP 与完整 UA 字符串。
- 请求路径、状态码、响应时间、返回字节数。
- Referer 与请求方法,便于识别非正常抓取。
- 保留足够的日志周期,覆盖蜘蛛一轮抓取的间隔。
把身份核对做成固定动作之后,再谈 robots.txt、Sitemap 和抓取速率才有意义。否则一套针对“蜘蛛”的策略,可能作用在了一批并不是蜘蛛的请求上。