蜘蛛抓不到页面,很多站长第一反应是内容或链接的问题,于是去改内链、重新提交 Sitemap。但有一类情况常被忽略:蜘蛛根本没走到应用层,或者走到了却被站点的安全策略拦在门口。这类问题在日志里往往表现为一段时间内某个搜索引擎 UA 的请求大量返回 403、429,随后整站的抓取量跟着下滑。
安全策略为什么会误伤蜘蛛
WAF、CDN 和主机面板的防护规则,判断逻辑大多基于请求特征,而不是「来的是谁」。常见的判断维度有三类:一是请求频率,单位时间内的请求数超过阈值就拦;二是请求特征,比如 UA 字符串、请求头缺失、访问路径的规律性;三是行为模式,比如短时间内遍历大量相似 URL。
问题在于,搜索引擎蜘蛛恰好同时符合这几条:它会并发请求、会按一定规律遍历 URL、请求头相对固定。如果防护规则只做粗粒度匹配,很容易把正常抓取当成异常流量处理。
几种常见的误伤形态
直接返回 403 或 429
这是最直接的一种。蜘蛛拿到 403,会认为该 URL 不可访问,短期内不再重试;拿到 429 则会理解为服务器要求降速,通常会降低抓取频率,但如果持续返回,抓取量会明显收缩。两种情况下,站点看起来「一切正常」,实际已经丢掉了大量抓取机会。
返回正常状态码,但内容是挑战页
更隐蔽的一种:防护层返回 200,页面里却是 JS 挑战、验证码或「正在检查浏览器」的提示。蜘蛛看到的是一个几乎没有正文的页面,既抓不到内容,也发现不了新链接。日志里状态码一切正常,很难一眼看出来。
UA 校验过严
有的站点为了防采集,直接按 UA 做白名单或黑名单。规则写得不严谨时,可能出现桌面蜘蛛放行、移动蜘蛛被拦,或者旧版本 UA 被拦、新版本也被拦的情况。表现是同一批 URL,两套 UA 的抓取结果差异很大。
- 按 UA 字符串做模糊匹配,命中率低,误伤概率高
- 按 IP 做频控,但没有给搜索引擎预留额度
- 防护规则对整站生效,连 robots.txt 和 Sitemap 文件本身也被拦
怎么确认是不是被挡了
- 先在服务器日志里按蜘蛛 UA 过滤,看响应码分布。正常抓取应以 200 为主,如果 403、429、503 占比明显,基本可以确认问题出在防护层。
- 检查 robots.txt 和 Sitemap 文件是否也能被正常访问。如果连这两个文件都被拦截,蜘蛛对整个站点的理解都会受影响。
- 用带蜘蛛 UA 的请求做一次模拟访问,观察是否返回挑战页。注意这只能做粗略判断,真实身份校验还要看 IP 段和反向解析。
- 对照搜索平台的抓取统计与抓取错误报告,看异常是否集中在某个时间段或某个目录下。
放行蜘蛛的几个做法
放行不等于关掉防护,关键是把「搜索引擎蜘蛛」和「普通自动化流量」分开处理。
- 按 IP 段加白名单。主流搜索引擎都会公布爬虫 IP 段,结合反向 DNS 校验,比单纯看 UA 可靠得多。UA 可以伪造,IP 段和解析记录不容易。
- 给蜘蛛单独限速。不要让它和普通用户共用同一个频率阈值,否则高峰期蜘蛛就是第一批被限流的对象。
- 不要对已知蜘蛛启用 JS 挑战和验证码。蜘蛛不执行这类交互,结果就是拿到一个空页面。
- 把 robots.txt、Sitemap 和索引文件放进放行名单。这些文件体积小、请求少,不应该被安全策略影响。
- 调整后观察一段时间。抓取频率的恢复通常比下降慢,不会立刻回到原来的水平。
安全策略和搜索抓取并不是对立的。真正需要防的是高频、无规律、伪装身份的流量,而搜索引擎蜘蛛的请求特征是有公开规律可循的。把规则写细一点,比一刀切更省事。
小结
抓取量下降时,除了检查内容、内链和 Sitemap,也值得花十分钟看看服务器日志里的响应码。如果蜘蛛 UA 对应的是成片的 403、429,那么问题不在页面本身,而在门口。先把这条路径理顺,再谈 URL 发现和抓取深度才有意义。