常见問题

入口頁里的連結指向短鏈或跳轉地址,搜尋蜘蛛會跟到目标 URL 吗

入口頁里的連結如果先跳到短鏈或中間跳轉地址,搜尋蜘蛛通常能顺着 HTTP 3xx 繼續往下走,但跳轉鏈過長、短鏈服務被限流或最终地址被 robots.txt 屏蔽时,發現就會中断。本文說明蜘蛛處理跳轉的方式、常见中断点,以及入口頁連結该怎么寫更稳妥。

常见問题

入口頁里的連結指向短鏈或跳轉地址,搜尋蜘蛛會跟到目标 URL 吗

先说结论

大多數情况下,搜尋蜘蛛會跟随 HTTP 跳轉。也就是说,入口頁里放一個 301 或 302 地址,蜘蛛顺着 Location 头繼續請求,最终落到目标 URL 上,這條 URL 就有机會進入待抓取队列。但它不是無條件跟随:跳轉鏈太長、中途报错、最终地址被 robots.txt 拦住,都會让發現中断。

蜘蛛是怎么處理跳轉的

常见的跳轉方式有三種:HTTP 3xx、meta refresh、JavaScript 跳轉。對入口頁来说,HTTP 3xx 是最容易被蜘蛛稳定跟進的,因為它不依赖頁面渲染。

  • 301 / 308:永久跳轉,蜘蛛會把它当作地址變更信号,跟随的意愿最强。
  • 302 / 307:临时跳轉,蜘蛛同样會跟,但會更谨慎,因為源头随时可能變。
  • 跳轉目标必须放在 Location 响應头里,並且是一個完整可訪問的地址,寫成相對路径或拼错都會让蜘蛛停在原地。

換句话说,短鏈本身不是問题,問题在于短鏈背後是不是一條干净、可直達的路径。

哪几種情况會跟丢

  • 跳轉鏈太長。经過三五跳之後,不同蜘蛛的耐心不一样,鏈路越長,被截断的概率越高。建议控制在一次跳轉以内。
  • 中間某一跳返回 4xx 或 5xx。只要鏈路中的任意一环挂了,後面的目标 URL 就不會被發現。
  • 最终地址被 robots.txt 屏蔽。蜘蛛跟到了,但抓取請求會被規則拦下,等于白跟。
  • 短鏈服務做了 UA 判断或限流。有些短鏈會對非浏览器 UA 返回驗證頁、广告頁,甚至直接 403,蜘蛛自然也就跟不過去。
  • 短鏈服務插入中轉頁。部分服務為了統計會在中間插一個 HTML 頁面,這個頁面如果用了 JS 跳轉,跟進成功率就會下降。
能直连就直连。跳轉每多一层,就多一個可能失敗的点,而失敗的那一环往往不會给你任何提示。

跳轉對“發現”和“收錄”是两件事

顺着跳轉找到最终 URL,解决的是發現問题。蜘蛛把這個地址放進队列,任務就算完成了。至于它會不會被抓取、抓取後會不會被收錄,取决于目标 URL 自己的狀態:能不能正常返回、内容是否有價值、是否存在重复版本、站内有没有其他入口指向它。

另外要注意,如果目标 URL 長期只能通過 302 到達,蜘蛛在判断規范地址时可能會摇摆。這種情况下,最好让入口頁直接指向最终地址,而不是让它站在跳轉鏈的末端。

入口頁連結可以這样寫

  1. 優先在 HTML 里直接寫出最终 URL 的 <a href>,让蜘蛛一步到位。
  2. 确實需要跳轉时,用 301,一次跳到最终地址,不要层层轉接。
  3. Location 用绝對地址,確認返回碼、是否被 robots.txt 拦截、服務器是否稳定。
  4. 避免让公共短鏈服務夹在中間,尤其是對非浏览器 UA 不友好的那種。
  5. 入口頁自身保持 200 且可正常訪問,蜘蛛才有机會讀到這條跳轉連結。

自查清單

  • 用命令行或抓取工具看一遍完整跳轉鏈,確認没有多余中轉。
  • 換一個搜尋蜘蛛 UA 再請求一次短鏈,看返回是否還是跳轉。
  • 確認最终 URL 的 robots.txt 允许抓取。
  • 在入口頁保留至少一條直達最终 URL 的普通連結。
  • 定期复查短鏈是否失效、是否被服務方回收。

小结

搜尋蜘蛛愿意跟随跳轉,但只愿意跟一條清晰、稳定、可訪問的路径。對入口頁来说,最省事的做法永遠是直接寫最终 URL;如果非要用短鏈或跳轉,就把它压缩成一次干净的 301,並且定期检查它在蜘蛛 UA 下的表現。這样至少不會因為中間环节出問题,白白丢掉一次被發現的机會。