抓取路径里的“中间页”是什么
蜘蛛从外链、Sitemap 或站内链接拿到一个 URL 后,并不会直接看到最终内容。它先请求服务器,拿到响应,再决定是否继续深入。如果这个 URL 返回的不是目标页面,而是一个需要点击、登录、同意协议或等待跳转的页面,这条抓取路径就被截断在中间了。常见形态包括:
- 登录墙:未登录访问时统一跳到登录页,正文完全不可见;
- 验证码与风控页:命中限流后返回人机校验页面;
- Cookie 同意、隐私协议、年龄确认等前置弹层或独立页面;
- 地区、语言、门店选择页:默认没有落到具体内容;
- App 引导页与短链中转页:需要再次跳转才到正文。
这些页面本身大多能正常打开,状态码往往是 200,所以在日志里看不出明显异常,但蜘蛛拿到的是一个空壳。
为什么它比 404 更难发现
404 会明确告诉蜘蛛这条路径走不通,蜘蛛会逐步降低抓取频率,甚至清理该 URL。中间页相反:服务器返回 200,内容却与预期无关。对蜘蛛来说,这等于同一批 URL 反复“看起来可用、实际没有内容”,抓取资源被持续消耗,而真正的内容页面始终没有被完整抓取。
判断标准不是状态码,而是蜘蛛拿到响应后,能否在同一 URL 上看到目标内容。
核对方法:从日志到内容三步走
- 看日志里的重复抓取。同一批 URL 在较长周期内被反复请求,却没有对应的内容更新或链接变化,通常说明抓取落在了没有价值的响应上。
- 用无 Cookie、无登录的方式回放请求。用命令行工具或浏览器无痕模式直接请求目标 URL,观察首屏 HTML 里是否包含标题、正文、价格等核心内容,而不是校验页或跳转脚本。
- 核对跳转与渲染后的落地 URL。记录服务端 3xx、JS 跳转、meta refresh 的最终地址,确认站内链接与 Sitemap 里写的是最终可访问版本。
内链与 Sitemap 的配合
中间页问题往往在结构上被放大:如果导航、列表页的链接直接指向登录后才可见的 URL,蜘蛛每次进入都要撞一次墙;如果 Sitemap 里混入大量带筛选参数、需要登录的结果页,则会进一步稀释抓取资源。较为稳妥的做法是:
- Sitemap 只收录无需登录、无需额外交互即可看到正文的 URL;
- 站内链接尽量指向可公开访问的版本,登录后才会出现的页面不放入主导航;
- 对确实需要拦截的区域,用 robots.txt 写清规则,而不是让蜘蛛反复拿到验证页;
- 内容型页面对蜘蛛放行,把限流与风控放在真正需要保护的接口上。
处理时的边界
不建议把所有前置页一刀切当成错误处理。有些中间页是业务必需,比如地区选择,关键在于把“对用户可见”和“对蜘蛛可见”分开设计:让蜘蛛能直达内容,让用户仍保留必要的引导流程。若某个页面短期内无法提供可抓取内容,与其让它返回 200 空壳,不如按实际情况返回明确的状态码,或在 Sitemap 中暂时移除,避免长期占用抓取资源。
核对这件事不需要复杂工具,通常是“日志里的重复抓取”与“无登录状态下的实际响应”两条线交叉验证。把中间页从抓取路径中剥离出来,URL 发现和内容抓取的效率才更接近站点的真实结构。