常见問题

入口頁用 302 跳轉還是直接放連結,搜尋蜘蛛的發現路径有什么不同?

入口頁放連結還是返回 302 跳轉,看上去都能让搜尋蜘蛛到達目标 URL,但發現路径、抓取次數和排查难度並不相同。本文對比两種做法的差异,列出跳轉环节常见的坑,並给出從入口頁狀態碼到目标 URL 抓取记錄的排查顺序。

常见問题

入口頁用 302 跳轉還是直接放連結,搜尋蜘蛛的發現路径有什么不同?

搭建蜘蛛池入口頁时,常见的两種做法是:在入口頁正文里直接放指向目标 URL 的 a 标簽,或者让入口頁返回 302 跳到目标 URL。两種做法搜尋蜘蛛最终都可能到達目标 URL,但中間的發現路径、可观测性和出错概率差別不小。

直接放連結:發現路径最短

入口頁被解析後,正文中的連結會被当作候選 URL 進入待抓取队列。搜尋蜘蛛拿到的是明确的 URL 和锚文本,不需要額外的網絡往返,也不依赖跳轉目标的响應。

  • 連結可见,便于在日誌里對照入口頁抓取與目标 URL 抓取的時間差。
  • 一個入口頁可以放多條連結,發現机會與連結數量有關,但要控制在合理范围。
  • 連結指向的 URL 出現 404、超时,只影响该條連結,不會连带入口頁本身。

302 跳轉:多一次請求,也多几個變量

搜尋蜘蛛請求入口頁,拿到 302 和 Location 之後,需要再發起一次請求才能看到目标内容。這一跳會带来几個容易被忽略的問题。

1. 跳轉後的 URL 是否稳定

如果 Location 的值是随机的、带一次性 token 的,或者每次跳轉都指向不同的目标,搜尋蜘蛛每次遇到的都是新 URL,同一個目标可能被拆成很多個抓取入口,反而分散抓取预算。

2. 狀態碼是否用對

301、308 表示永久跳轉,302、307 表示临时跳轉。入口頁若是临时調度,用 302 更符合语义;如果長期固定指向同一個目标,却被寫成 302,搜尋蜘蛛可能反复回入口頁確認,产生多余的抓取。

3. 跳轉鏈過長

入口頁 302 到 A,A 再 302 到 B,B 才是目标 URL。跳轉层數越多,中途任意一层的超时或異常都會让整條鏈路断掉,排查时也很难判断是哪一跳出了問题。

什么时候适合用跳轉

入口頁本身没有可展示的正文,或者希望把入口頁的訪問集中到目标 URL 时,用跳轉是合理的。但建议满足几個前提:

  1. Location 指向的 URL 固定、可复現,不带随机參數。
  2. 跳轉层數控制在一跳,不要做鏈式跳轉。
  3. 跳轉目标返回 200,且内容與入口頁主题相關。
  4. 跳轉在服務端完成,不依赖 JavaScript 或前端定时器。

常见排查顺序

發現目标 URL 長時間没有被抓取时,可以按下面的顺序自查:

  • 用 curl 或浏览器開發者工具看入口頁返回的狀態碼和 Location 值是否與预期一致。
  • 在抓取日誌里搜尋入口頁 URL,確認搜尋蜘蛛是否訪問過、返回狀態是什么。
  • 如果入口頁有抓取记錄但目标 URL 没有,重点看跳轉是否被中間层改寫(CDN 規則、WAF、反向代理)。
  • 如果两者都有抓取记錄,但目标 URL 一直未被處理,检查目标 URL 自身的 robots.txt、X-Robots-Tag 和响應時間。
跳轉和連結都只是發現通道,能不能被抓取、什么时候被抓取,還取决于目标 URL 的可訪問性和站点整体抓取状况,並不存在某種寫法一定更快。

小结

入口頁直接放連結,结构简單、可观测性强,适合大多數场景;302 跳轉适合入口頁無正文或需要集中權重的情况,但要保證目标固定、鏈路短、狀態碼正确。两種方式可以混用,關键是入口頁返回的每一個信号都要真實、稳定,不要给搜尋蜘蛛制造額外的判断成本。