蜘蛛池跑一段时间后,日志里几乎每天都能看到自称是 Googlebot、Bingbot、百度蜘蛛的请求。数量看着热闹,但其中相当一部分并不是搜索引擎派来的。把这些请求当成真蜘蛛去调优,很容易得出错误结论:以为某个入口页很受欢迎,实际只是被采集器扫了一遍。
为什么要在蜘蛛池里做身份核验
蜘蛛池的入口页数量多、结构相似,本来就是各类爬虫喜欢光顾的对象。如果不做区分,会带来几个直接问题:
- 更新节奏被假蜘蛛带偏,看到抓取变多就加量,实际对收录毫无帮助;
- 日志统计失真,判断不出哪些入口页真的被搜索引擎访问过;
- 把采集流量误当成索引信号,误判某批资源或某个模板的效果。
需要说明的是,验证身份只能帮你把谁来过看清楚,它不解决页面是否被收录的问题,这两件事是分开的。
三层验证:从最弱到最强
User-Agent:只做初筛
UA 是最容易伪造的一层,浏览器插件和脚本都能随手改成 Googlebot。把 UA 当作唯一标准,等于没有标准。它的合理用途是快速分流:先按 UA 把疑似蜘蛛的请求单独归一类,再去核验其余信息。
反向 DNS:最常用的一层
对请求来源 IP 做反向解析,看解析出的域名是否落在搜索引擎官方域名下,例如 Googlebot 常见的 googlebot.com、google.com。关键点是还要再做一次正向解析确认:把反向解析得到的域名重新解析一遍,看结果是否回到原来的 IP。只做反向不做正向,同样会被伪造的解析记录骗到。
IP 段与官方列表
Google 会公布它的抓取 IP 段,Bing 也有类似做法。把这些段维护成一份本地列表,用请求 IP 去比对,比逐个做 DNS 查询更快,适合请求量大的蜘蛛池。缺点是列表需要定期更新,搜索引擎会调整段位。
三种手段叠起来用,误判会明显减少。实际运营中,UA 初筛加 IP 段比对能覆盖大多数情况,对可疑请求再做一次反向与正向 DNS 校验即可。
假蜘蛛通常在做什么
识别出来之后会发现,非搜索引擎的蜘蛛大致有几类:内容采集器、SEO 工具的反链检查、漏洞扫描,以及部分统计或监控服务。它们的行为特征和真蜘蛛不太一样,比如:
- 短时间内集中请求大量入口页,间隔几乎没有;
- 只抓列表页或只抓目标页,不跟随页面内的链接结构;
- 对 robots.txt 不理会,或者请求一遍就走;
- 不请求静态资源,也不带 referer。
这些特征不能单独当作判定标准,但可以作为辅助参考,和 IP 核验的结论互相印证。
在蜘蛛池里的落地做法
- 在服务器或 CDN 日志里保留完整 UA 与来源 IP,不要只存聚合数据;
- 写一个简单的离线任务,每天把日志里的来源 IP 过一遍 IP 段列表,打上已确认或未确认的标记;
- 对未确认但 UA 自称蜘蛛的 IP,做反向 DNS 加正向回查,结果单独记录;
- 把确认过的真蜘蛛请求按入口页分组统计,再和你的更新节奏对照;
- 对持续的假蜘蛛流量用限速或拦截处理,但注意不要误伤正常用户和真蜘蛛。
几个容易踩的坑
- 把 UA 当结论:改 UA 的成本几乎为零,它只能用于初筛。
- 只做反向不做正向:反向解析记录可以人为配置,正向回查才是闭环。
- IP 段列表长期不更新:搜索引擎的抓取段会变,三个月不更新就开始漏判。
- 拦得太狠:有些真蜘蛛来自你没想到的段,一刀切拦截会让抓取变少,还查不出原因。
最后提醒一句:确认了真蜘蛛来访,只说明发现和抓取这一环在动,和页面最终是否被索引是两回事。核验身份的价值在于让日志数据可信、让调整有依据,而不是制造一个蜘蛛很多的错觉。