在蜘蛛池里,入口頁经常不直接寫目标 URL,而是先跳一次:短鏈、統計跳轉、统一域名、路由參數,甚至两三跳之後才落到真正要被抓取的頁面。這條鏈一旦拉長,搜尋蜘蛛還能不能跟到最後,就成了常见疑問。
搜尋蜘蛛對跳轉的基本處理
會跟,但有代價。跳轉本质上是让抓取程序重新發起一次請求,每多一跳,就多一次 DNS 解析、连接建立、等待响應和内容解析,也多一次被限流、超时、返回異常的机會。搜尋引擎不會為一條跳轉鏈無限排队,跟進有限的跳數之後就會放弃這條路径。
- 301 和 302 通常都會被跟随,但两者對最终 URL 的規范化處理不同;
- meta refresh、JavaScript 跳轉、刷新响應头,處理方式各不相同,可靠性低于服務端 3xx;
- 鏈中間任意一跳返回 4xx、5xx、被 robots 拦截或超时,後面的目标 URL 基本就發現不了。
“第几跳”這個數字別当硬标准
业内常被引用的是 5 跳左右這個量級,但它来自搜尋引擎多年的非正式說明,不同爬虫、不同時間点都可能不一样,官方也未必持續更新。真正值得關注的不是卡在哪一跳,而是這條鏈是否可控、是否稳定、每一跳是否都能正常返回。
把跳轉鏈压在 1~2 跳,並不是為了迎合某個數字,而是减少中間环节的不确定性:少一次超时、少一次被 WAF 拦截、少一次抓取预算的浪費。
排查顺序:從入口頁往後逐跳走
- 用不带 Cookie、UA 标记為搜尋蜘蛛的抓取工具,按跳轉顺序逐跳請求,记錄每跳的狀態碼、Location 和响應時間;
- 確認每一跳的 Location 是否指向新域名、是否带协议、是否出現 A→B→A 這類循环;
- 检查中間頁是否被 robots.txt 屏蔽、是否返回 noindex、是否被 CDN 或 WAF 拦下;
- 確認最终 URL 是否稳定:同一入口多次請求,是落到同一地址,還是每次带随机參數變成“新 URL”;
- 對照抓取日誌,看搜尋蜘蛛實际請求到第几跳就停了,與你的预期差在哪里。
常见的几個坑
鏈路里混了 JavaScript 跳轉
服務端 3xx 是抓取路径上最可靠的一环,前端 JS 跳轉需要执行脚本才會被發現,是否處理、何时處理都不由你决定。一段鏈路里同时存在 3xx 和 JS 跳轉时,優先把 JS 那段改成服務端跳轉。
跳轉每次都带會话參數
每次請求都生成不同的 sessionid 或跟踪參數,最终落到的 URL 看起来每次都不同,搜尋蜘蛛容易把它当成一批新 URL 反复抓取,既浪費配額,也很难收敛到稳定地址。
入口頁與目标跨了域名或子域
跨域跳轉不是不行,但要確認目标域名没有被 robots 屏蔽、證书有效、不會出現 http→https→http 的来回折腾。多次协议切換會明顯增加失敗概率。
可以落地的做法
- 入口頁直接寫最终 URL,跳轉只作兜底,不做常規通路;
- 必须跳轉时压到 1 跳、最多 2 跳,固定使用其中一種狀態碼,不要混用;
- 對整條鏈路做定期巡检,把 4xx、5xx、超时当作鏈路故障處理,而不是“偶尔失敗”;
- 最终 URL 保持稳定、可重复訪問,避免每次生成新的參數组合。
跳轉层數不是需要死守的指标,它更像一個健康度信号:鏈路越短、越稳定、越可复現,搜尋蜘蛛顺着入口頁發現並抓取目标 URL 的概率就越高,剩下的事情交给正常的站点运营和内容质量。