網站收錄

多跳重定向拖慢發現與抓取:把跳轉鏈压到一跳的核對顺序

多跳重定向會把一次抓取拆成多次請求,拖慢新頁面被發現和處理的节奏。本文给出跳轉鏈長度的量化方法、常见叠加成因,以及從合並同源跳轉到统一内鏈與 Sitemap 指向最终地址的收敛顺序,並說明收敛後该重点观察哪些日誌指标。

網站收錄

多跳重定向拖慢發現與抓取:把跳轉鏈压到一跳的核對顺序

頁面從 A 跳到 B 再跳到 C,用戶端可能只感觉“慢了一点”,但對搜尋引擎来说,這等于一次抓取被拆成了三次請求。跳轉鏈本身不违規,也不直接等于不收錄,可当站点里大量 URL 都存在两跳以上时,抓取资源就會被消耗在中間环节,新頁面被發現、被處理的节奏自然會被拖慢。

每次跳轉都是一次獨立請求

爬虫遇到 301 或 302 时,需要重新請求 Location 指向的地址,直到拿到最终返回 200 的頁面。两跳就是三次請求。中間地址如果還带參數、大小寫或尾斜杠變化,處理结果可能被延後甚至丢弃。更麻烦的是,鏈路中間那些地址本身也可能被抓取、被索引,最後形成一堆指向同一内容的不同 URL。

先量清楚跳轉鏈到底有几跳

不要凭印象判断,建议按下面几步抽样統計:

  1. 抽真實入口 URL,包括首頁導航、Sitemap 里的地址、外鏈落地頁、日誌中出現频次最高的地址,而不是只测首頁。
  2. 用支持跟随跳轉的抓取工具或命令行查看完整鏈路,逐跳记錄狀態碼和 Location。
  3. 按鏈長分组,統計一跳、两跳、三跳及以上的 URL 各有多少。
  4. 把鏈路最長、同时被抓取最频繁的那批 URL 排到處理队列最前面。

多跳通常是從哪来的

  • HTTP 跳 HTTPS、裸域跳 www 各寫了一條規則,叠加起来就變成两跳。
  • 舊栏目 301 到新栏目,新栏目又 301 到最终目錄,歷史規則一直没有清理。
  • CDN、负载均衡或反向代理层又額外設定了一次跳轉。
  • 尾斜杠、大小寫、參數清理由不同层分別處理,一次請求被多次改寫。
  • 頁面内 JS 跳轉和服務器端跳轉混用,鏈路上很难判断终点在哪。
  • 移動端與 PC 端互相跳轉,没有一方作為固定终点。

收敛顺序:從流量大的入口開始压

建议按這個顺序動手,避免一邊改一邊制造新的跳轉:

  1. 先合並同源跳轉,把 HTTP 到 HTTPS、裸域到 www 合成一條直接指向最终地址的規則。
  2. 把歷史栏目跳轉的目标改成最终地址,而不是指向另一個會跳轉的地址。
  3. 检查代理和 CDN 层是否重复配置了跳轉,同一次請求只保留一层處理。
  4. 尾斜杠與大小寫策略在規則层一次性定下来,不要靠跳轉去纠正。
  5. 站内連結、Sitemap、canonical 全部改成最终地址,停止自己制造跳轉。
  6. 舊規則保留一段時間,等日誌里確認中間地址已不再被抓取,再考虑下线。

收敛之後该看什么

重点看三個變化:最终地址的抓取频次有没有上升、中間 URL 的抓取量有没有下降、新頁面從被發現到被抓取的間隔有没有缩短。索引量本身每天都會波動,不要拿一两天的高低下结论。

跳轉鏈是抓取效率問题,不是收錄開關。把鏈路压短是减少损耗,並不能保證某個頁面一定進索引。

几個容易忽略的邊界

  • 临时性跳轉不要長期挂 302,狀態碼要和實际意图一致。
  • 鏈上任意一跳出現 404 或 5xx,整條鏈就断了,最终頁面等于没被訪問到。
  • 跳轉目标如果被 robots.txt 屏蔽,抓取跑過去也拿不到内容。
  • 跳轉目标带 noindex,抓取到了也不會留在索引里,等于白跑一趟。
  • 跨域跳轉的信号传递比同站跳轉更难判断,能避免就避免。

總结起来就是三步:先量清楚每條入口的跳轉鏈長度,再按入口價值從高到低合並規則,最後用日誌驗證中間地址是否真的退场。鏈路越短,抓取和發現的损耗就越少。