入口页在蜘蛛池里通常只做一件事:把蜘蛛送到目标页面。但“送”的方式有很多种,服务端 301、302,前端 JS、meta refresh,甚至 iframe 嵌套,都能让浏览器跳过去,对蜘蛛的意味却完全不同。选错方式,蜘蛛可能连门都没进就退回去了。
先分清两类跳转
一类是服务端跳转,靠 HTTP 状态码完成,蜘蛛发出请求后立刻收到新的地址,几乎没有额外成本。另一类是客户端跳转,页面先返回 200,再靠 JS 或 meta 标签把浏览器带走。后者对普通用户没问题,对蜘蛛就多了一道不确定的门槛。
301 与 302 的取舍
- 301 永久跳转:语义上表示入口页的最终位置已经确定,蜘蛛更倾向于把它当作稳定映射记住,后续再遇到该入口时抓取路径更明确。
- 302 临时跳转:表示这是临时安排。偶尔用没有问题,但如果整个池子的入口页长期批量 302,蜘蛛对目标地址的判定会偏保守,抓取分配的稳定性也会差一些。
- 307 / 308:主要解决请求方法和缓存语义问题,用作入口跳转意义不大,反而容易在缓存层产生分歧。
如果入口本身是临时工位,比如需要换绑目标,302 更合适;如果入口和目标的关系长期不变,301 更省心。
JS 跳转与 meta refresh
这两种都属于客户端跳转,前提是蜘蛛愿意渲染页面。抓取预算紧张时,渲染往往被排到后面,蜘蛛拿到的只是一个内容不多的 HTML 骨架,然后就不再深入。meta refresh 设成 0 秒比 JS 稳一些,因为解析 HTML 时就能读到,但仍然不如服务端跳转直接。
比较稳妥的用法是把客户端跳转当兜底:入口页先给一段简短内容,再用 meta 或 JS 补充引导,而不是整页只有一行跳转代码。
跳转链太长会怎样
每一次跳转都是一次额外的请求。A 跳 B、B 跳 C、C 跳 D 的三跳链,中间任意一环超时、返回 5xx 或被拦截,蜘蛛的这次访问就断在半路。入口页的跳转建议控制在一跳之内,直接把地址指向最终页面。
几种常见的踩坑写法
- 入口页全部 302 到站点首页,蜘蛛跟着转一圈后什么都没拿到,下次再来的意愿自然降低。
- 跳转目标与入口内容毫无关系,比如入口写的是商品信息,跳过去是站内搜索页。
- 跳转目标恰好被 robots.txt 挡住了,或者本身返回 404、5xx,等于白跑一趟。
- 用 301 却频繁更换目标地址,蜘蛛侧的状态码记录和实际映射对不上,容易造成抓取混乱。
- 入口页只有跳转代码、没有可读内容,蜘蛛拿到空白页后停止向下。
实际配置时的几点建议
- 入口页统一使用 301 指向一个稳定、可访问的最终页面,除非确实需要临时切换。
- 保持一跳,不要为了统计、分流再套几层跳转。
- 跳转前给页面留一点真实内容,标题和一两段描述即可,避免完全空白。
- 定期检查跳转目标的状态码,确认没有落进 404、410 或被 robots 屏蔽的路径。
- 在日志里单独观察入口页的状态码分布,看蜘蛛是否真的跟随了跳转、跟随之后有没有继续抓取。
跳转本身不产生抓取价值,它只是路径。路径越短、越确定,蜘蛛继续走下去的可能性就越高。
把跳转当成入口页的基本功:选对状态码、控制跳转层级、保证目标可访问,比反复调整投放数量更实在。池子里的入口多了以后,跳转方式一旦统一,排查问题也会轻松很多。