搜尋抓取

URL 被發現之後:入队、去重、排期這三步常卡在哪里

蜘蛛抓取並不是發現 URL 就立刻發生。一個地址被内鏈、Sitemap 或外鏈發現後,還要经過入队、去重和排期才可能被真正抓取。本文拆解這三步里常见的卡点:重复地址、Sitemap 寫了跳轉地址、内鏈路径断裂、服務器响應變慢,並给出可落地的調整方向。

搜尋抓取

URL 被發現之後:入队、去重、排期這三步常卡在哪里

很多站点运营會把“蜘蛛来没来”当成一個動作,實际在搜尋引擎那邊,一個 URL 從被發現到被真正抓取,中間至少经過三步:入队、去重、排期。發現只是最前面的一小步,後面每一步都可能让 URL 停住不動。

URL 發現的三條常见来源

先把入口理清楚,後面排查才有方向。

  • 内鏈:蜘蛛顺着已有頁面上的連結走到新 URL,這是最自然的一條路。
  • Sitemap:主動把 URL 列出来,适合深頁、孤立頁和更新频繁的列表頁。
  • 外部連結與歷史抓取:外鏈带来的地址,以及之前抓過、現在站内没有連結的舊 URL 重新被翻出来。

三條路带来的是同一件事:一串待抓 URL。發現方式不同,只會影响它進入队列的先後,不會保證立刻被抓。

入队與去重:同一個 URL 被反复提交會怎样

队列里存的是 URL,同一地址被多次提交,通常不會带来額外抓取机會,反而可能让調度器把它当成重复信号来對待。常见的情况有:

  • 带不同參數指向同一内容的 URL,比如排序、篩選、追踪參數。
  • 分頁、篩選頁互相連結,形成大量近似的地址。
  • Sitemap 里同时寫了 http 與 https、带與不带斜杠两個版本。

這些 URL 本身未必是错誤,但會让去重這一步做更多判断。更稳妥的做法是让每個内容只有一個稳定地址,其余版本通過 301 或 canonical 收敛過去。

排期:抓取優先級受什么影响

排期不只看頁面重要性,還看站点整体表現。同一批 URL 里,通常這几類會靠前:

  1. 被内鏈指向較多、离首頁較近的頁面。
  2. 内容更新频率高、歷史抓取返回正常的頁面。
  3. 服務器响應稳定的站点,整体抓取节奏會更顺。

反過来,如果站点经常超时、5xx 时有时無,調度器會降低整体抓取频次,入队再多的 URL 也只能慢慢等。

從發現到抓取之間最容易断的三處

1. 内鏈路径断在半路

新頁面上线後,如果只放在 Sitemap 里、没有任何内鏈指向,它仍然能被發現,但缺少路径上的支撑。更常见的問题是上一級列表頁没有把它鏈出来,或者要翻很多頁才出現,蜘蛛很难走到。

2. Sitemap 里的地址不是最终地址

Sitemap 寫的是 A,A 又 301 到 B,等于把一次抓取拆成两次請求。規模小时影响不大,量大时這部分成本會很明顯。寫進 Sitemap 之前,先確認地址是可以直接返回 200 的最终 URL。

3. 服務器响應拖慢整体节奏

抓取频次是站点承受能力的函數。响應時間變長、並發被压住时,蜘蛛自然會放慢。它不是一次宕机那種明顯問题,而是慢下来之後 URL 一直排在队列里。

可以落地的几件事

  • 给每個内容确定一個唯一地址,重复版本用 301 或 canonical 收敛。
  • Sitemap 只放最终 URL,並保持 lastmod 與實际更新時間一致。
  • 新頁面至少從一到两個已有頁面鏈出去,別只依赖 Sitemap。
  • 用服務器日誌看蜘蛛實际抓了哪些 URL、返回了什么狀態碼,再决定补哪里。
發現 URL 只是把名字报上去,能不能被較快抓到,取决于這個地址在队列里是否唯一、是否可直達,以及站点是否让蜘蛛抓得舒服。

把這三步分開看,排查會清楚很多:發現不足就补入口,去重混乱就做規范化,排期靠後就看服務器與站内结构。