做站点运营或蜘蛛池投放,服务器日志是重要的反馈来源。但不少人在看日志时只扫一眼 User-Agent,看到 Baiduspider、Googlebot、bingbot 就认为搜索蜘蛛来了。实际上 UA 只是一段请求头字符串,客户端可以随意伪造,单看它很容易误判。
为什么 UA 不能作为唯一判断依据
User-Agent 由请求方自己填写,采集脚本、监控工具、浏览器插件乃至普通的 Python 爬虫,都能把自己伪装成任意搜索引擎的蜘蛛。日志里出现“Baiduspider”这几个字,并不代表它来自搜索引擎官方。
误判会带来两个直接后果:一是把普通抓取当成蜘蛛抓取,据此判断蜘蛛池投放效果,结论自然不准;二是把伪造蜘蛛放进白名单,给服务器带来额外压力,还可能在真正被攻击时没有察觉。
核对真伪的三个层面
1. 反向 DNS 解析
主流搜索引擎的蜘蛛通常会配置反向 DNS。做法是对日志中的来源 IP 做 PTR 查询,看得到的主机名是否属于对应搜索引擎的域名,例如 Googlebot 常见 *.googlebot.com 或 *.google.com。查到主机名后,再对主机名做一次正向解析,确认能解析回同一个 IP,这一步能挡掉大部分简单伪造。
2. IP 段与官方公布清单
Google 提供 googlebot.json,Bing 也提供 bingbot.json,里面包含官方 IP 段,可以定期拉取,与日志里的 IP 做比对。百度没有提供同样形式的公开 JSON,一般做法是结合反向解析结果和已知网段综合判断。要注意搜索引擎的 IP 段会变化,把名单写死在代码里迟早会过期。
3. 注意 CDN、反向代理和负载均衡
站点挂了 CDN 或 Nginx 反代时,源站日志里的 IP 可能是 CDN 回源 IP,而不是蜘蛛的真实 IP。这时要看 X-Forwarded-For、X-Real-IP 等请求头,或者直接使用 CDN 提供的日志。如果这部分配置没做对,拿到的 IP 根本没有核对价值。
反向解析也可能因为 DNS 查询超时或缓存而失败,不能一解析不成功就断定是假蜘蛛,还应结合 IP 段和历史抓取行为一起看。
伪造蜘蛛会带来什么影响
- 带宽和 CPU 被无意义消耗,尤其是抓取频率很高的采集脚本。
- 统计口径失真,蜘蛛池投放的判断建立在错误数据上。
- 如果 WAF 或限流策略把 UA 当作唯一白名单,被伪造 UA 绕过的概率很高。
- 误把采集流量当成蜘蛛,可能以为抓取量涨了,其实与搜索抓取无关。
结合蜘蛛池投放怎么用
投放蜘蛛池的目的,是让目标 URL 更容易被搜索蜘蛛发现。核对蜘蛛真伪,是判断投放到底有没有起作用的前提。建议在日志分析时把“UA 是搜索蜘蛛”和“IP 通过验证”分开统计,只有两者同时满足,才算一次有效的蜘蛛抓取。
另外,入口页或中转页往往先被其他蜘蛛、扫描器、社交平台的预览服务抓取,这些访问对 URL 发现帮助有限,不要和搜索蜘蛛的抓取混进同一个指标。可以按来源分组,分别看目标 URL 的抓取次数、返回状态码和后续收录变化,避免用一个总数掩盖差异。
日常核对建议
- 日志至少保留完整的 UA、IP、请求路径、状态码和响应时间。
- 先按 UA 粗筛,再用反向解析或 IP 段复核,形成两层数据。
- 把验证通过的蜘蛛 IP 段维护成可更新的清单,而不是写死在配置里。
- CDN 或反代场景先确认日志拿到的是真实客户端 IP。
- 对高频、路径杂乱的“蜘蛛”,先按可疑流量处理,不要直接放行。
UA 只是一个名字,IP 和反向解析更接近身份。日志里的蜘蛛先验证再统计,蜘蛛池效果的判断才站得住脚。