蜘蛛發現一個 URL 後,並不是每次都直接打開頁面内容。如果這個地址返回 301 或 302,蜘蛛會先讀取响應头里的 Location,把新地址放進待抓队列,之後再来一次請求。這個過程每多一跳,就多消耗一次抓取机會,最终頁面的首次訪問時間也會往後推。
蜘蛛遇到重定向时,抓取過程發生了什么
以 A 到 B 到 C 的跳轉鏈為例,蜘蛛請求 A,拿到 301 指向 B;它需要重新安排對 B 的請求;B 又返回 301 指向 C,于是還要再安排一次對 C 的請求。對蜘蛛来说,A 和 B 都没有可索引的内容,真正的内容在 C。這两次中間請求占用了抓取预算,却没有带来新的頁面内容。
如果跳轉是由 JavaScript 或 meta refresh 触發的,蜘蛛的處理會更保守。它可能不會像處理 HTTP 跳轉那样立即跟随,尤其当脚本依赖用戶点击或前端路由时,抓取路径可能直接停在中轉頁。
多跳跳轉通常從哪里来
- 协议跳轉:http 跳 https,如果服務器配置层层叠加,可能先跳到另一個 http 地址,再跳到 https。
- 域名跳轉:带 www 與不带 www 之間来回跳,或者舊域名先跳新域名,新域名又跳另一個規范域名。
- 路径格式跳轉:末尾斜杠、大小寫、重复斜杠、URL 參數清理,各自产生一次跳轉。
- 内鏈和 Sitemap 仍指向舊地址:頁面已经迁移,但導航、面包屑、文章正文里的連結没有更新。
- CDN 或反向代理額外加了一层跳轉,和源站配置叠加成多跳。
這些来源單獨看似乎只是一個小問题,叠加起来就會让一個 URL 的抓取路径變長。
跳轉鏈怎样影响 URL 發現
蜘蛛在頁面里發現連結後,會评估是否值得跟進。如果某個入口的連結需要经過多次跳轉才能到達有效内容,它分给這條路径的抓取资源會變少。對站点来说,表現就是新頁面被發現的間隔變長,日誌里同一目标地址出現多條 301 记錄,而最终頁面迟迟没有抓取记錄。
更常见的情况是抓取预算被中間地址占據。蜘蛛每次来訪都先訪問舊地址,被跳轉後可能中断,或者只抓取了跳轉鏈的前半段。最终頁面的内容更新、内鏈传递和後續 URL 發現都會受到影响。
重定向不是错誤,但跳轉鏈越長,蜘蛛在這條路径上的有效抓取比例越低。
把跳轉路径缩短到一跳
- 在服務器或 CDN 层做一次性跳轉,让舊地址直接指向最终地址,不要 A 到 B、B 到 C 层层轉發。
- 更新站内所有連結,包括導航、面包屑、正文連結、分頁、Sitemap 和 RSS,让它們直接使用最终 URL。
- 對已经迁移的舊地址,保留一個 301 到最终地址即可。不要再让舊地址跳到另一個舊地址。
- 检查反向代理、负载均衡和 CMS 插件是否自動添加了跳轉規則,避免和源站規則重复。
- 用命令行或抓取工具检查响應头,確認從入口到最终内容只有一跳。重点检查首頁、栏目頁和近期改版的频道。
临时跳轉和永久跳轉的分工
301 表示永久迁移,适合域名更換、协议切換和路径重构。302 表示临时跳轉,蜘蛛可能繼續保留原地址並反复請求。如果是短期活動頁或临时维護,用 302 可以理解;但如果跳轉狀態持續几個月,最好改成 301,並同步更新内鏈。
307 和 308 會保留請求方法,内容頁一般不需要用到。多數场景下,把 301 用對、把跳轉鏈控制在一跳以内,比研究狀態碼细节更有實际意义。
日常巡检可以看什么
在抓取日誌里篩選 301 和 302 狀態,观察同一個目标地址是否被多次跳轉到達。再看服務器訪問日誌,如果舊地址的請求量長期高于最终地址,說明内鏈還没有彻底更新。定期检查跳轉鏈,尤其是在換域名、換协议、改 URL 结构之後,能避免 URL 發現被不必要的中間請求拖慢。