看服务器日志时,很多人会把所有带着蜘蛛 UA 的请求都算作搜索引擎抓取。实际上这里面混着好几类来源:真的搜索引擎蜘蛛、第三方 SEO 工具的爬虫、被伪装的采集程序,还有你自己或 CDN 产生的请求。把这个数字直接当成抓取量来下判断,结论往往偏得很远。
为什么先要分清真假
日志的用途无非两个:判断收录进度,看抓取预算花在了哪里。如果假蜘蛛占了三成,你以为蜘蛛天天来,其实真蜘蛛一周才来两次;你以为某个栏目很受重视,其实只是采集站在高频拉取。方向错了,后面所有的调整都容易白费。
三种常用的判断依据
一、UA 字符串:只能做初筛
UA 是最容易看到、也最容易伪造的字段。随手写一个 Baiduspider 的成本几乎为零,所以 UA 只能用来分组,不能用来下结论。值得留意的是那些写得很像但不完全一致的 UA,比如多一个版本号、大小写有出入,这类通常是伪装的。
二、IP 与反向解析:相对可靠
主流搜索引擎都公布了各自的 IP 段,也支持用反向 DNS 验证:对来访 IP 做一次 rDNS 查询,如果结果落在 googlebot.com、search.msn.com 这类域名下,再正向解析一次确认能对应回去,基本可以确认身份。百度蜘蛛同样有官方公布的 IP 段,可以直接比对。
有一点要注意:如果你用了 CDN 或反向代理,日志里记录的可能是节点 IP,而不是蜘蛛的真实 IP。这时要看回源日志或者 CDN 提供的真实 IP 字段,否则会把所有请求都判成假的。
三、行为特征:辅助判断
- 真蜘蛛一般会先请求 robots.txt,再按规则抓页面;
- 抓取节奏相对平稳,不会在几分钟内把整站拉一遍;
- 会顺着内链走,而不是只盯某一个目录,或者只抓正文不抓列表;
- 请求头里通常带 Accept-Encoding、From 等字段,细节比伪造者完整。
几种容易误判的情况
把 SEO 工具当成搜索引擎。Ahrefs、Semrush、Screaming Frog 这类爬虫抓取频率高、覆盖面广,如果不加区分,很容易得出抓取很活跃的错误印象。
把自家程序算进去。可用性监控、预渲染服务、站内搜索的实时抓取,都会产生类似爬虫的请求。
把采集站当成蜘蛛。有些采集程序会伪装 UA 高频拉取内容,特征是只抓正文页、不抓列表和资源文件、不请求 robots.txt,而且集中在很短的时间段里。
真蜘蛛来了却没收录,问题在哪
确认抓取来源之后,还要记住一件事:抓取和收录是两回事。蜘蛛来过,只说明 URL 被发现了,不等于页面进了索引。常见原因有几个:
- 页面返回的不是 200,或者内容为空、只剩一个框架;
- 页面带有 noindex,或者被 robots.txt 拦住,被拦下的页面即使被请求过也不会进入索引;
- 页面内容与站内其他 URL 高度重复,搜索引擎选择了另一个版本;
- 内容本身质量不够,比如正文只有几行,页面上大部分是导航和广告。
实际操作上的几点建议
- 分析日志前先做一遍来源清洗,把确认非搜索引擎的 IP 和 UA 过滤掉,再看抓取趋势;
- 把真蜘蛛抓过的 URL 列表导出来,和 sitemap、内链结构对照,看哪些页面一直没被碰过;
- 对高频访问但 IP 不属于搜索引擎的请求,可以考虑在服务器层面做限速,不必动 robots.txt;
- 定期更新搜索引擎公布的 IP 段,避免因为 IP 库过期而误判。
抓取数据只有先确定来源,才能用来判断收录。把真蜘蛛和假蜘蛛混在一起看,得到的往往是一个漂亮但没有意义的数字。