跳转方式为什么值得单独讨论
入口页的作用是把蜘蛛引导到更深的页面,跳转只是引导手段之一。不同跳转方式在状态码、信号传递以及蜘蛛是否愿意跟进上差别很大。选得不合适,常见的结果是蜘蛛进了入口页却没有继续往下走,或者在一串跳转里来回消耗时间。
几种常见跳转的实际表现
301 永久重定向
301 表示地址永久变更,搜索引擎一般会把入口页的信号归到目标页,抓取和索引的重心也会向目标页迁移。它适合已经确定不再变动的映射关系。代价是改主意成本高:如果要更换目标,需要重新评估原有映射是否会造成信号混乱。
302 与 307 临时重定向
302 表示临时跳转,搜索引擎通常会继续保留对原地址的观察,不一定把信号合并过去。307 语义与 302 接近,但明确要求保持原请求方法。两者适合灰度、测试或短期分流。若长期使用,入口页可能被反复回访,目标页却始终拿不到稳定的收录信号。
meta refresh 与 JS 跳转
这两种方式写在 HTML 里,服务端返回的是 200 状态码,蜘蛛拿到的是一个“正常页面”。问题在于:meta refresh 依赖解析与等待,JS 跳转依赖脚本执行能力,不同搜索引擎、不同抓取阶段的处理并不一致。用它做跳转,等于把是否跟进的决定权交了出去,也更难从日志里判断蜘蛛到底跟没跟。
直接给可达链接
把目标地址作为普通 a 标签链接放在入口页,是最容易被理解与跟进的方式。它没有状态码歧义,蜘蛛看到链接就能判断去向,也方便你在日志里观察点击路径。很多情况下,这比任何跳转都更划算。
选择时先看这几个条件
- 跳转目的:地址真的变了用 301,只是临时分流用 302,只想引导抓取就优先考虑普通链接。
- 目标是否稳定:目标频繁更换时,用永久重定向会让映射关系越来越乱。
- 跳转链长度:一跳到位最省事,两跳以上就要检查每一跳的状态码是否一致。
- 蜘蛛的能力差异:需要执行脚本才能完成跳转的方式,覆盖面一定小于 HTTP 层面的跳转。
容易踩的坑
- 跳转链首尾状态码不一致,比如 302 接 301 又接 302,蜘蛛容易重复回访同一个入口。
- 跳转到与入口页主题无关的页面,即使技术上成功,也容易让入口页失去自身价值。
- 页面同时存在 canonical 指向 A、跳转指向 B,两个信号互相打架。
- meta refresh 的等待时间设得过长,蜘蛛可能没等到跳转就结束抓取。
- 用 JS 跳转却不给任何 HTML 链接兜底,脚本没执行就彻底断路。
落地建议
先把入口页的跳转关系在表格里列清楚,包括每一跳的地址和状态码,再看有没有多余环节。能用普通链接解决的就不要用跳转;必须用跳转时,保持状态码语义一致、链条短、目标稳定。上线后通过服务器日志确认蜘蛛是否真的走到了目标页,而不是只看入口页的访问量。
跳转本身不会带来抓取,它只是把蜘蛛从 A 送到 B。真正决定成败的是 B 是否值得抓、路径是否足够清晰。