入口页把蜘蛛引到目标页,中间那一下“怎么过去”,很多人是随手写的。实际上跳转方式会影响蜘蛛能不能顺利走完这一程,也会影响抓取额度花在哪里。下面把 301、302、JS 跳转、meta 刷新几种常见做法拆开说,顺便把容易忽略的状态码问题一起列出来。
先想清楚入口页的角色
入口页的职责通常只有两个:被蜘蛛发现,并且把蜘蛛送去目标页。它本身不需要承载太多内容,但要让蜘蛛在一次访问里完成“进来—看懂—继续走”这三步。任何让蜘蛛停下来猜、或者反复重试的写法,都会拉低整条链路的效率。
四种跳转方式的差别
301 永久跳转
301 是最明确的表达:这个地址以后归到那边去了。搜索引擎会把两个地址做合并处理,蜘蛛顺着走的意愿也最高。如果入口页本身就是一次性的过渡页,用 301 干净利落。缺点是它等于否定了这个入口页的独立价值,如果之后还想用同一个入口页反复更换目标页,就不太合适。
302、307 临时跳转
302 表示暂时指到别处,原地址仍然有效。入口页需要长期存在、目标页会不定期更换时,302 更贴合语义。307 与 302 类似,区别在于明确保留原请求方法,对蜘蛛来说通常没有实质差异。需要注意的是,有些站点把 302 当万能跳转长期使用,时间久了,蜘蛛对入口页本身的抓取兴趣可能下降。
JS 跳转
JS 跳转依赖页面渲染。蜘蛛能不能执行,取决于它的渲染能力,以及渲染所需的资源有没有被 robots.txt 或防火墙挡住。能用服务端跳转就别只靠 JS,尤其当入口页是纯静态模板、没有其它内容支撑时,JS 跳转有被当成空页面处理的风险。
meta refresh
meta 刷新的兼容性一般,多数搜索引擎能识别,但等待时间设得过长,容易被当作普通页面处理。如果一定要用,把等待时间设在 0 到 1 秒,并在页面上放一个可见的文字链接作为兜底。
比跳转更容易出问题的是状态码
- 200 空壳页:页面能打开,正文只有一句“正在跳转”。蜘蛛抓完发现没有内容,下次再来的意愿会降低。
- 403 / 404:入口页失效后没有补位,蜘蛛反复撞空,浪费抓取额度。
- 503 长期挂着:短期维护用 503 是合理的,挂太久蜘蛛会降低访问频率。
- 429 频繁出现:说明入口页短时间内被请求得太多,需要检查是不是大量入口页压在同一台服务器上。
分场景的组合建议
- 入口页长期复用、目标页会更换:用 302,并在页面上配一个可见的文字链接。
- 入口页一次性、之后不再使用:用 301,直接合并干净。
- 入口页本身有可读内容:正常以 200 输出,把目标页作为正文中的推荐链接,不必强制跳转。
- 必须用 JS 或 meta:同页保留静态链接兜底,并确认渲染资源没有被拦截。
常见误区
一是全站统一用同一种跳转,忽略入口页的生命周期差别;二是跳转层层嵌套,A 跳 B、B 再跳 C,蜘蛛走到第三层就容易放弃;三是跳转设置与 robots.txt 冲突,把渲染需要的脚本一起挡住,页面在蜘蛛眼里就变成空的。
上线前的检查清单
- 用不带缓存的工具访问一次,确认返回码与预期一致
- 确认跳转链路不超过两层
- 确认目标页可正常访问,状态码为 200
- 确认跳转失败时有可读的兜底页面,而不是一片空白
跳转方式是入口页的基本功。改动之前先记录当前用的是哪一种,一次只动一个变量,后面的变化才看得懂。