为什么日志里的蜘蛛记录不一定可信
运营蜘蛛池或做 URL 发现时,很多人习惯直接看服务器日志里的 User-Agent,只要出现 Googlebot、Baiduspider、bingbot 就当成搜索蜘蛛来了。问题在于 UA 只是一段纯文本,任何人都能改。普通采集脚本、压测工具,只要把 UA 改成 Baiduspider,日志里就会多出一条“百度蜘蛛”的记录。
结果就是抓取量看着很漂亮,入口页也确实被大量访问,但目标 URL 迟迟不入库,排查半天才发现来的根本不是搜索蜘蛛。
UA 能伪造,IP 很难伪造
判断抓取来源时,优先级大致是:IP 归属 > 反向 DNS > UA。UA 是请求头里的字符串,随便改;而来源 IP 属于 TCP 连接层面的事实,除非对方真的从搜索引擎的出口 IP 发起请求,否则伪造不出来。
只看 UA 统计抓取量,等于把判断权交给了访客自己。
主流搜索蜘蛛的验证思路
1. 反向 DNS 解析
拿日志里的 IP 做一次反向解析,再对解析出来的域名做一次正向解析,看是否回到同一个 IP。以 Google 为例,官方给出的做法是:
- IP 反解应得到类似 crawl-xxx-xxx-xxx-xxx.googlebot.com 的域名;
- 再对该域名做正向解析,应返回原来的 IP;
- 域名需要归属 googlebot.com 或 google.com。
Bing 的 bingbot 也提供类似的反向解析校验方式,域名通常落在 search.msn.com 一类。百度则更多依赖官方公布的 IP 段,配合 UA 一起判断。
2. 官方 IP 段比对
各家搜索引擎会公布自己的抓取 IP 段,一般是 JSON 或文本文件形式。可以定期拉取,和日志里的 IP 做匹配。这种做法比单看 UA 靠谱,但需要自己维护更新,IP 段变动后没同步就会误判。
3. 站长平台里的抓取数据
Google Search Console、必应网站管理员工具、百度搜索资源平台等,都能看到官方的抓取统计。如果日志里“蜘蛛来了 500 次”,平台里只有几十次,差距过大,基本可以判断存在大量伪蜘蛛。
实操中最容易踩的坑
- 只按 UA 统计抓取量:报上去的数字和真实抓取能力对不上。
- 反向解析只查一次:有人会自己配置反解记录,必须正反向都对得上才算数。
- 误封真蜘蛛:为挡伪蜘蛛直接按 UA 全封,可能把验证过的真蜘蛛也挡在外面,影响 URL 发现。
- 忽略 IPv6:只验证 IPv4,日志里的 IPv6 抓取记录没纳入统计。
- 没记录完整日志:CDN 或反向代理没透传真实 IP,日志里全是节点 IP,事后根本没法查。
一个简单的落地流程
- 确认 Nginx 或 CDN 已透传真实客户端 IP(X-Forwarded-For 或 real_ip 模块)。
- 日志中同时保留 IP、UA、请求路径、状态码和时间。
- 写脚本或用现成工具,对高频 IP 做正反向解析校验。
- 把校验结果和站长平台数据交叉比对,确认抓取量口径一致。
- 定期复核,尤其是抓取量突然上涨或下跌的时候。
验证抓取来源不是为了追求一个好看的抓取数字,而是为了确认入口页到底有没有被搜索蜘蛛真正访问。如果来的大部分是伪蜘蛛,那么入口页铺得再多、链接放得再密,对目标 URL 的发现也不会有实际帮助。