打开服务器访问日志,很多人第一反应是看蜘蛛来了多少次。但日志里标着“Baiduspider”或“Googlebot”的请求,并不一定来自搜索引擎。把伪造请求当成真实抓取,会直接影响后面所有判断:抓取频次、目录偏好、服务器压力,都会被带偏。
日志里为什么会混进大量“蜘蛛”
UA 字符串是客户端自己写的,任何人都可以照着拼一个。它的作用只是声明“我是谁”,不是证明“我是谁”。
- 采集与抓取工具:默认或刻意伪装成搜索引擎 UA,方便绕过简单的 UA 限制。
- 扫描器:批量探测后台路径、备份文件、常见漏洞地址,顺手带上蜘蛛 UA。
- 第三方监测与 SEO 工具:部分工具会模拟蜘蛛抓取页面,用于检测可达性或渲染结果。
- 真实搜索引擎:这才是我们真正关心的那部分流量。
核对身份的三个层次
看 UA,但不要只看 UA
先做一次粗筛:UA 里出现 Spider、bot、crawler 之类的关键词,就归到“疑似”一类。粗筛的作用是缩小范围,不是下结论。真正要警惕的是拼写错误的仿冒,比如把 Googlebot 写成 GoogleBot、把 Baiduspider 多打一个字母,这类往往是批量脚本留下的痕迹。
做反向 DNS 或比对官方 IP 段
主流搜索引擎都会公布自己的出口 IP 段或验证方式。Google 提供反查工具,百度也有官方 IP 段列表可供对照。做法很简单:把日志里的访问 IP 拿出来,要么做一次反向解析,确认域名归属;要么直接与官方列表比对。
这里有个容易踩的坑:反向解析要再正向解析一次。也就是先用 IP 查到域名,再用这个域名查回 IP,两边对得上才算数。只做单向解析,会被伪造的 PTR 记录骗过去。
看访问特征
身份核对完之后,再用行为特征做交叉验证。真假蜘蛛在行为上通常有明显差别。
- 抓取范围:真实蜘蛛会顺着链接和 Sitemap 走,路径集中在站内;伪装者常直奔 /admin、/wp-login.php、备份压缩包这类地址。
- 请求节奏:真实抓取一般有节流,不会几十个请求挤在同一秒;脚本常常并发很高,间隔均匀得不像正常访问。
- 请求头完整性:真实蜘蛛通常带 Accept、Accept-Encoding、Referer 之类的信息,伪造请求经常只有一行 UA。
- 是否读 robots.txt:真实蜘蛛几乎每次会话开始前都会取一次 robots.txt,纯扫描器基本不理。
把核对流程固定下来
- 日志按 UA 分组,得到“疑似蜘蛛”的初步清单。
- 对每个来源 IP 做反向解析,必要时再正向验证一次。
- 与官方 IP 段比对,标记出无法对应的部分。
- 对无法对应的 IP,统计它们的请求路径和状态码分布。
- 把确认为伪造的段做限速或拦截,确认为真实的段单独留出观察视图。
这件事和站点运营的关系
把真假蜘蛛分开之后,几个原本模糊的问题会清晰很多。抓取频次到底是涨了还是降了,之前可能被大量伪造请求掩盖;某个目录是不是抓取死角,也可能只是因为真的蜘蛛根本没来过,来的都是扫描器。
服务器压力同理。如果日志里一半以上的“蜘蛛流量”是伪造的,那扩容和限流的策略就完全该换个方向。
判断蜘蛛身份没有一步到位的办法,UA、IP、行为三条线索要互相印证。单看任何一条,都容易得出错误结论。