很多人搭蜘蛛池时,注意力放在入口页内容和链接埋点上,很少专门想跳转这件事。但入口页和目标 URL 之间如果隔着跳转,蜘蛛每一次抓取都要多花一个来回;跳转写得不对,还可能让已经抓到的页面白抓。
蜘蛛遇到跳转时会做什么
主流搜索引擎蜘蛛对 3xx 状态码的处理逻辑大致相似:收到跳转响应后读取 Location 头,把新地址放进待抓队列,然后结束当前这次请求。也就是说,一次跳转至少要消耗两次抓取机会,而且第二次抓取不一定紧接着发生。
- 301(永久跳转):蜘蛛通常会把信号传递到新地址,并逐步用新 URL 替换索引里的旧 URL。
- 302 / 307(临时跳转):蜘蛛会抓新地址,但一般保留旧 URL 的索引,并反复抓旧地址确认是否还在跳。
- meta refresh 与 JS 跳转:需要解析 HTML 或执行脚本之后才发现,延迟更高,部分蜘蛛可能不跟进。
入口页该用哪种跳转
入口页本身就是内容页
这种情况不需要跳转,直接把目标链接写在正文里,让蜘蛛在同一个页面上发现 URL,成本最低。加一层跳转反而多一次请求。
确实需要转到另一个域名或目录
优先用 301。前提是源地址和目标地址都由你控制,跳转关系稳定,不会过两天又改回来。反复在 301 和 302 之间切换,会让蜘蛛对这批 URL 的判断变差。
什么时候才考虑 meta refresh
只有在服务器层拿不到跳转权限(比如纯静态托管、无法配置响应头)时才考虑。能用 301 就不要用 meta refresh,能用 meta refresh 就不要用 JS 跳转。
跳转层级:几跳算多
单跳(A→B)是常态,两跳(A→B→C)多数蜘蛛还能接受,超过三跳就明显吃亏:蜘蛛可能中途放弃,日志里会留下大量只走完第一跳的来访记录。建议把入口页到最终落地页的跳转控制在两跳以内,理想是一跳到位。
常见失误
- 循环跳转:A→B→A,蜘蛛会反复抓,白白消耗抓取预算。
- 跳转到已失效地址:跳转目标返回 404 或超时,等于把蜘蛛引到死路。
- 跳转到不相关的站点:跨主题、跨语言跳转容易显得突兀,也可能触发风控。
- 所有入口页跳同一个目标:跳转关系过于集中,不如让入口页各自正常输出链接。
- 跳转时带上跟踪参数:每跳一次 URL 就多一截,容易生成大量相似地址。
实操建议
- 先确认跳转是否必要。如果只是想让蜘蛛发现目标 URL,直接放链接比跳转更划算。
- 需要跳转时统一用 301,关系确定后不要频繁改动。
- 定期抽查跳转链,确认没有断链、循环和多跳。
- 跳转目标尽量落在同一站点或同一主题域内,避免跨行业。
- 在访问日志里按状态码筛 3xx,观察蜘蛛是否跟到了第二跳。
跳转是手段不是目的。入口页能直接把目标 URL 暴露给蜘蛛,就不要绕这一圈。