很多站点在排查抓取问题时,习惯盯着 robots.txt 和 sitemap,却忽略了重定向链。实际上,链接跳转是搜索蜘蛛发现 URL 的一条常见路径:一个 301 指向的地址,很可能就是蜘蛛第一次见到某个页面的地方。跳转本身不是错误,但跳转链的质量,会影响蜘蛛是否愿意继续往下走。
重定向也是 URL 发现的入口
当站内某个旧链接、外部引用或分享短链指向一个会跳转的地址时,蜘蛛拿到响应后,通常会把 Location 里的新地址加入待抓取队列。也就是说,一次 301 不只是“搬家通知”,它同时是一次 URL 推荐。
问题在于,这条推荐路径很容易被写坏或者被滥用。常见的情况包括:
- 一条链接经过三次以上跳转才落到终点;
- 跳转目标又跳回原地址,形成循环;
- http 跳 https、带 www 跳不带 www、末尾斜杠互相跳,方向不统一;
- 用 302 或 JS 跳转长期承担本该由 301 完成的迁移;
- 跳转终点返回 404 或 410。
这些情况不一定马上出问题,但它们会消耗抓取配额,也会让蜘蛛对这条路径的稳定性打折扣。
状态码的语义要和实际行为一致
URL 发现的质量,很大程度上取决于状态码是否表达清楚。常用的约定大致是:
- 200:正常内容,蜘蛛可以放心抓取;
- 301 / 308:永久迁移,适合域名更换、目录调整;
- 302 / 307:临时跳转,适合活动页、A/B 测试,不宜长期使用;
- 404 / 410:内容已不存在,410 表示更明确的永久移除;
- 5xx:服务器端异常,蜘蛛通常会降低抓取频次。
如果页面返回 200 但正文为空,或者只提示“该内容不存在”,就是典型的软 404,会让蜘蛛反复来访却拿不到有效内容。同理,用 meta refresh 或 JS 做跳转,虽然也可能被执行,但不确定性更高,不如服务端直接返回 301 干净。
日常可以做的检查
- 抽取站内主要入口的链接,逐条跟踪跳转,记录跳转次数与终点状态码。
- 把超过两次跳转的链接改为一跳直达,或直接更新原始链接。
- 统一协议、域名、末尾斜杠的规范,让跳转方向单一,不要两边互相指。
- 检查 sitemap 与站内链接里是否还留着已经跳转的旧地址,尽量直接写终点 URL。
- 迁移类跳转保持长期有效,不要上线几周后就撤掉。
- 关注服务器日志中 3xx、4xx、5xx 的比例,异常升高通常意味着配置或模板出了问题。
几个容易忽略的细节
内链、外链、广告位、二维码、邮件模板、App 分享地址,都可能带跳转。改版时只改了页面,忘了改这些入口,跳转链就会长期存在。建议把跳转规则集中管理,而不是散落在各处的模板和服务器配置里,否则排查一次要翻好几个地方。
另外,跳转目标如果本身是参数页、筛选页或分页,最好先确认这些页面是否值得被发现。如果它们只是临时状态,用 robots 或 noindex 控制即可,不必让蜘蛛把配额花在这里。反过来,如果它们承载了真实内容,那就应该让它们成为链接的终点,而不是藏在跳转之后。
重定向不是坏事,坏的是含糊的重定向。一个干净的一跳 301,比五条绕来绕去的路径更容易让蜘蛛理解你的站点结构。