站点做上几年,URL 總會變。換域名、上 HTTPS、栏目改名、统一去掉末尾斜杠,每一次調整都可能留下一條 301。單獨一條重定向不是問题,問题在于它們會串起来:A 跳到 B,B 跳到 C,C 才是真正的内容頁。蜘蛛要拿到這份内容,得先把這几跳走完。
一次跳轉,蜘蛛實际做了什么
對蜘蛛来说,跳轉不是免費的。每遇到一個 301 或 302,它都要單獨發起一次請求,拿到响應头里的 Location,再對新地址發起下一次請求。也就是说,一條三跳的鏈,蜘蛛要發三次請求,才摸到第一段 HTML。
- 每一跳都占用一次抓取配額,鏈條越長,單位時間内能抓的頁面越少;
- 每一跳都增加一次超时和出错的机會,中間任何一环抖動,整條路径就断在這里;
- 跳轉目标如果是跨域或跨协议,蜘蛛還要重新判断這份内容归谁所有。
内容本身没問题,但發現它的成本被人為抬高了。站点規模小的时候感觉不出来,URL 到几萬、几十萬量級时,這些多出来的請求會實實在在占掉一批抓取額度。
鏈是怎么越接越長的
几乎没有站点會主動设計一條五跳的重定向。鏈是在一次次改版里被動接上的。
常见成因
- 逐級替換域名:先 http 換 https,再舊域名換新域名,两次操作各留一條規則,就叠成了两跳;
- 栏目分批改名:老栏目跳到過渡名,過渡名又跳到現在的名字,中間那一段没人清理;
- URL 規范化没做全:带斜杠的跳到不带的,带大寫字母的跳到小寫的,大小寫和斜杠各自一條規則,互相叠加;
- 内容合並後没回头改:几篇舊文章合並成一篇,舊地址逐條跳過去,後来那篇又被合並了一次,鏈就長了。
多跳带来的實际损失
- URL 發現變慢:新頁面本来可以一跳到位,現在要先经過几层中轉,進入待抓队列的時間被推後;
- 抓取配額被稀释:同样的額度,一部分花在跳轉上,真正抓内容的次數就少了;
- 鏈路脆弱:三跳里任意一环返回 5xx 或超时,蜘蛛這次就白跑一趟,下次未必马上回来重试。
把鏈压回一跳的做法
- 直接指向终点:舊地址的 301 目标寫成最终 URL,不要寫成中間那一版;
- 站内連結用最终地址:導航、面包屑、正文内鏈、相關推荐里如果還留着舊的跳轉地址,蜘蛛每次都要多走一步,直接改成最终地址最省事;
- Sitemap 只放最终 URL:Sitemap 里混入會跳轉的地址,等于主動给蜘蛛派了一堆中轉任務;
- 不要串跳:發現 A 跳到 B、B 又跳到 C,就把 A 的規則改成直接到 C,而不是繼續往後接;
- 少用鏈式跳轉做临时活動:短期活動的 302 鏈結束後记得撤掉,別让它沉淀成長期路径。
怎么排查現有的鏈
不需要复杂工具,抓一份站内連結清單,逐個請求看响應头就能看出来。重点看三類入口:舊栏目的目錄級地址、歷史文章的舊 URL、以及带參數或大小寫變体的地址。
- 抽取站内被連結最多的那批 URL,看它們返回的是 200 還是 301/302;
- 對返回跳轉的地址,手工跟一次响應头,记錄跳了几次、终点是谁;
- 把跳了两次以上的地址單獨列出来,逐條改成直達终点;
- 改完之後,回头检查站内連結和 Sitemap 有没有還在引用中間地址。
重定向本身是正常手段,問题只出在层數上。把每一段跳轉都压成一跳,蜘蛛拿到内容的路径就短了,省下来的額度才能用在真正的新頁面上。
這件事不需要一次做完,按入口的重要程度分批處理就好。優先收拾被内鏈引用最多的那批地址,收益最明顯。