很多站点在排查抓取問题时,习惯盯着 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 的比例,異常升高通常意味着配置或模板出了問题。
几個容易忽略的细节
内鏈、外鏈、广告位、QR Code、邮件模板、App 分享地址,都可能带跳轉。改版时只改了頁面,忘了改這些入口,跳轉鏈就會長期存在。建议把跳轉規則集中管理,而不是散落在各處的模板和服務器配置里,否則排查一次要翻好几個地方。
另外,跳轉目标如果本身是參數頁、篩選頁或分頁,最好先確認這些頁面是否值得被發現。如果它們只是临时狀態,用 robots 或 noindex 控制即可,不必让蜘蛛把配額花在這里。反過来,如果它們承载了真實内容,那就應该让它們成為連結的终点,而不是藏在跳轉之後。
重定向不是坏事,坏的是含糊的重定向。一個干净的一跳 301,比五條绕来绕去的路径更容易让蜘蛛理解你的站点结构。