搜尋抓取

新 URL 從發現到被抓取:中間要经過哪几道關

一條新 URL 從進入候選池到蜘蛛真的發出請求,中間要经過發現、去重、排队、請求渲染和结果回寫几道關。任何一關出問题,表現都一样:日誌里看不到它。把這几關拆開看,排查和優化都會更有针對性。

搜尋抓取

新 URL 從發現到被抓取:中間要经過哪几道關

很多站長把“蜘蛛没抓”当成一個單点故障,實际上從 URL 被寫進候選池,到蜘蛛真的發出請求,中間要過好几道關。任何一關上出問题,表現都一样:日誌里看不到它。把這几關拆開看,排查會容易很多。

第一關:URL 得先被發現

蜘蛛不會凭空知道你的新頁面。它進入候選池的方式主要有几種:已有頁面上的内鏈、XML Sitemap、以及它已经抓過的頁面里新增的連結。

  • 内鏈:越靠近首頁、越稳定的導航路径,越容易被反复走到。
  • Sitemap:适合放那些内鏈路径很深、不容易被点到的 URL。
  • 外部連結:別站指向你的連結也是入口,但可控性低。

如果一條 URL 既没有内鏈,也不在 Sitemap 里,那它基本只能靠运气被發現,而這種运气通常不會来。

第二關:規范化與去重

發現之後,蜘蛛會先判断這條 URL 是不是“新”的。带跟踪參數、大小寫混用、带或不带结尾斜杠、http 與 https 並存,都會让同一個頁面看起来像好几個地址。地址越多,抓取請求被分散得越碎,每個變体被訪問的机會也越少。

做法不复杂:站内連結统一成一種寫法,參數能不用就不用,必须保留的用 canonical 明确指向主地址。

第三關:排队

候選池里的 URL 不會按先来後到抓。站点整体情况、URL 所在层級、内容更新频率、歷史上抓取的成功率,都會影响排队的先後。這里没有可以直接設定的“優先級開關”,Sitemap 里的 lastmod、内鏈的位置、頁面是否長期稳定更新,是少數能被我們影响的信号。

新站或新栏目刚開始抓取偏慢,多數时候不是被针對,而是歷史信号太少,排在後面。

第四關:請求與渲染

轮到你了,還要服務器接得住。超时、5xx、握手失敗,都會让這次抓取白跑,蜘蛛過一會儿再来试。内容是 JS 渲染出来的,還要多一步渲染成本,在抓取资源紧張的情况下,這一步有可能被跳過。

  • 關键正文尽量在初始 HTML 里就有。
  • 响應時間尽量控制在几百毫秒級別,別让蜘蛛干等。
  • 服務器別做過于激進的频率限制,正常抓取被拦下會打断整條通路。

第五關:结果回寫

抓完之後,這次抓取的结果會被记下来:返回什么狀態碼、内容是否重复、頁面是否可索引。這些记錄會影响下一次它愿不愿意再来。200 且内容有變化,是比較好的信号;長期 200 但内容一成不變,复訪频率會慢慢降下来;404、410 會让這條 URL 逐步從候選池里被清掉。

能自己動手的部分

  1. 新内容發出来时,顺手從已有且抓取較频繁的頁面加一條内鏈。
  2. Sitemap 保持更新,但別塞進一堆 404 或重定向地址。
  3. 按狀態碼和抓取频率過一遍日誌,先確認卡在哪一關,再動手改。
  4. 確認 robots.txt 和防護規則没有誤伤正常抓取。

把這五關分開看,你會發現大部分“蜘蛛不来”的情况,原因都集中在前两關:它压根没發現,或者發現了,但地址被拆成了好几份。