蜘蛛池的入口页经常承担一个中间角色:把蜘蛛从旧域名、旧路径或者已经不用的一批 URL,引到当前真正想让它抓取的目标页。这个过程中,重定向是最常用的手段,但也是最容易被忽略的环节。重定向方式选得不合适,蜘蛛可能在链上反复绕行,消耗抓取预算,最后没走到目标页。
先分清几种跳转在抓取流程中的差异
服务端重定向和客户端跳转,对蜘蛛来说不是一回事。
- 301 永久重定向:告诉蜘蛛原地址已经永久迁移到新地址。搜索引擎会逐步把原 URL 的抓取和信号转移到目标 URL,但需要时间,不是配置完立刻生效。
- 302 / 307 临时重定向:表示迁移是临时的。蜘蛛通常仍会继续抓原 URL,不会把原 URL 从索引中移除,目标 URL 也不一定被当作正式地址。
- meta refresh:写在 HTML 里的客户端跳转。蜘蛛能解析一部分,但把它当弱信号,延迟大于 0 秒时基本不会被跟随。
- JavaScript 跳转:依赖渲染能力。对不执行 JS 的抓取程序来说,页面里没有可跟随的链接,等于死路。
301 适合什么场景
域名更换、http 转 https、URL 结构调整,这些长期变更适合用 301。使用时注意几点:目标页必须能正常返回 200,不要 301 到一个本身又被重定向的地址,形成跳转链;不要把所有旧 URL 都 301 到同一个首页,这种做法容易被判断为软 404 或低质聚合;跳转目标和原页面主题保持对应关系,一一对应最稳妥。
302 什么时候更合适
临时活动、短期分流、正在测试的入口页,可以用 302。它的好处是原 URL 保持有效,蜘蛛不会立刻放弃原地址。但不要把 302 当作长期方案:如果几个月都不改回 301,蜘蛛对原 URL 和目标 URL 的判断会变得模糊,抓取分配也可能不稳定。
meta refresh 与 JS 跳转的边界
如果确实只能用客户端跳转,把延迟设为 0 秒,并在页面上放一个可点击的普通链接作为兜底。这样即使抓取程序不执行跳转,也能顺着链接往下走。延迟设为 3 秒、5 秒的做法,对蜘蛛基本无效。JS 跳转同理,建议同时保留 noscript 或静态链接,否则部分抓取请求会停在当前页。
重定向链自查清单
- 每条入口 URL 到目标页之间,跳转不超过一跳。
- 最终目标 URL 返回 200,且未被 robots 屏蔽、未带 noindex。
- 没有把大量不相关旧 URL 集中跳向同一个目标页。
- 301 与 302 的使用和变更意图一致,临时跳转没有长期挂着。
- 用命令行工具或日志确认实际返回的状态码,而不是只看配置文件。
- 跳转目标页本身有可抓取的内容和正常的内链,不是空页。
- 改完重定向后,观察一段时间日志,确认蜘蛛能走到目标页。
从日志验证重定向是否被跟随
重定向配置完成后,可以在服务器日志里看三件事:蜘蛛是否还在反复请求 301 的源 URL;目标 URL 是否开始出现蜘蛛访问记录;目标 URL 的抓取频次是否比之前有变化。如果源 URL 一直被抓、目标 URL 始终没有访问,说明重定向没有被有效跟随,需要检查状态码、跳转链和页面可访问性。
重定向是通道,不是目的地。入口页做得再多,蜘蛛顺着通道走不到可抓取的目标页,前面的工作也很难发挥作用。