在蜘蛛池入口页的搭建里,跳转是一种很常见的做法:入口页本身不放正文,而是用 301、302、JavaScript 或 meta refresh 把访问者(包括搜索蜘蛛)带到目标 URL。但不同跳转方式对搜索蜘蛛的影响差别很大,直接影响它能不能较稳定地发现目标 URL。
先分清两件事:抓取和传递
搜索蜘蛛处理跳转时,通常会同时做两件事:一是顺着跳转继续请求下一个地址,二是判断这个跳转是不是永久的,从而决定原地址如何被看待。对入口页来说,我们主要关心第一件事——目标 URL 会不会被跟到;第二件事会影响入口页自身的表现,但不等于目标 URL 就一定被抓取或收录。
301 和 302:临时跳转更容易被反复确认
301 表示永久跳转,搜索蜘蛛一般会较快地把原地址替换成新地址,之后较少重复访问原地址。这对目标 URL 的发现是好事,但副作用是入口页本身会逐渐失去被频繁抓取的理由。
302、303、307 表示临时跳转,搜索蜘蛛会更谨慎:它可能继续访问原地址,也可能不把原地址的信号转移过去。如果你希望入口页长期充当发现页,临时跳转未必是最差的选择;如果你希望它尽快把抓取引向目标 URL,301 通常更干脆。
需要注意的是,无论哪种跳转,都应该是服务器端返回的标准状态码跳转,而不是在页面里用脚本拼接一段跳转代码。
JavaScript 跳转和 meta refresh
JavaScript 跳转(location.href、location.replace 等)和 meta refresh 都属于页面内跳转。搜索蜘蛛对它们的处理不如 HTTP 状态码跳转稳定:
- 需要先渲染页面或解析 HTML 才能拿到跳转地址,抓取成本更高。
- 部分抓取场景下可能只记录到入口页,跳转目标不一定当次就被跟随。
- meta refresh 若设置成 0 秒,行为接近跳转;若设置几秒,搜索蜘蛛通常不会等待。
- 跳转地址如果由脚本动态生成,还可能受渲染失败、资源加载失败影响。
所以,如果目标 URL 的发现是刚需,优先用服务器端跳转;页面内跳转更适合作为补充,而不是唯一路径。
跳转链越长,丢失的概率越高
入口页 A 跳到 B、B 再跳到目标 URL,这种链路并不少见。每多一层,就多一次请求、多一次失败的可能。常见问题包括:中间层两个地址互相跳转形成循环、中间层被 robots.txt 拦截、中间层响应超时。建议把跳转控制在两跳以内,并且在日志里确认每一跳都被抓取过。
几个容易被忽略的细节
- 跳转目标是否可抓取。目标 URL 如果被 robots.txt 禁止、需要登录、或返回 4xx、5xx,跳过去也没有意义。
- 跳转响应里不要夹带 noindex。在跳转响应上加 X-Robots-Tag 的 noindex 指令,可能影响后续处理。
- 去掉多余的中间页。有些入口页先跳到一个统计地址再跳目标,统计地址一旦响应慢,整条链就被拖住。
- 留意协议和域名一致性。http 跳 https、不带 www 跳带 www,都会多一跳,要确认最终地址是唯一的。
- 用日志验证,而不是靠猜。看入口页访问日志里目标 URL 的请求记录,比看跳转代码更可靠。
和 sitemap、URL 提交配合时注意什么
如果入口页用跳转指向目标 URL,同时又把目标 URL 放进 sitemap 或手动提交,这是合理的冗余做法,两者不冲突。真正需要避免的是:入口页跳到的地址和 sitemap 里的地址不一致,比如一个带参数、一个不带,导致搜索蜘蛛把同一批内容当成两组 URL 反复处理。
怎么选择
如果入口页的目的是把搜索蜘蛛引到目标 URL,建议:服务器端 301 或 302 直接指向目标,不做页面内跳转;跳转链保持一跳;目标 URL 保持可公开抓取;同时用日志观察目标 URL 是否真的出现了抓取记录。发现量稳定之前,不要频繁更换跳转方式,否则很难判断是哪一步起了作用。
跳转只是把搜索蜘蛛带到门口,能不能进待抓取队列、什么时候被抓,还取决于目标 URL 自身的可访问性、站点整体质量和抓取配额,跳转方式本身并不保证结果。