搜尋抓取

抓取覆盖率:蜘蛛到底把你站点的哪些 URL 抓走了

收錄之前還有一個更基础的指标:搜尋蜘蛛實际請求過你站点的哪些 URL。本文讲清抓取覆盖率的分子分母怎么定,如何用日誌抽样與 Sitemap 做差集,以及覆盖率偏低时该優先排查的几處問题。

搜尋抓取

抓取覆盖率:蜘蛛到底把你站点的哪些 URL 抓走了

很多站点运营者關心的是收錄了多少,但在這之前還有一個更基础的指标:搜尋蜘蛛到底把你站点上的哪些 URL 抓走了。抓取是後續動作的前置條件,覆盖面上不去,後面的工作都难以展開。

什么算抓取覆盖率

简單说,一個統計周期内被搜尋蜘蛛實际請求過的 URL 數量,除以你希望被看到的 URL 總量。分子来自服務器日誌,分母来自你自己的 URL 清單。两個數字都不难拿,难的是口径要對齐。

分子的口径是:按 UA 识別出各搜尋引擎的蜘蛛,去掉 CSS、JS、图片、字体等静態资源請求,去掉非 HTML 的接口請求,剩下的 HTML 請求再去重才算 URL 數。分母的口径是:Sitemap 中提交的 URL、内容库中已發布的頁面,再加上内鏈能走到的栏目頁和列表頁。

三步把日誌整理成可用資料

第一步:按 UA 和狀態碼切分

先把蜘蛛流量單獨拆出来,再看狀態碼分布。200 表示拿到了内容;304 表示内容未變,是正常且省资源的表現,不要当成没抓;301 和 302 要看看跳轉目标是不是自己;404 和 410 要核對是否還有内鏈或 Sitemap 在引用;5xx 要優先處理,服務器持續报错而蜘蛛還在抓,通常會让它放慢频率。

第二步:做 URL 归一化

同一個頁面常常有多種寫法:带 www 和不带、大小寫不同、带不带结尾斜杠、附带一堆排序參數。統計前先归一化,否則覆盖率容易被虚高,也不容易看出問题。常见做法是去掉 utm 之類的跟踪參數,统一大小寫,再按站点規范确定是否保留结尾斜杠。

第三步:與 Sitemap 和内容库對照

把归一化後的抓取 URL 集合,和 Sitemap 中的 URL 集合做一次差集。差集里剩下的是提交了却還没被抓的部分,它們往往集中在站点深處、由參數生成的頁面,或者近期新增的頁面。

覆盖率偏低,先查這几處

  • 入口太少:頁面只靠 Sitemap 提交,没有一條從首頁或栏目頁出發的内鏈路径,蜘蛛很难自己走到。
  • 层級太深:從首頁到目标頁要经過四五层列表,抓取预算先被中間层消耗掉。
  • 路径被拦:robots.txt、防火墙或 CDN 規則誤伤了蜘蛛,日誌里會表現為整段路径完全没有請求记錄。
  • 内容重复:同一批内容通過不同參數组合生成大量 URL,蜘蛛在重复頁面之間来回抓,真正有價值的頁面被挤到後面。
  • 服務不稳:超时和 5xx 频繁出現时,蜘蛛會自動降低抓取频率,覆盖面的恢复需要一段時間。
  • 渲染成本高:依赖 JS 渲染的内容如果首屏没有關键連結,蜘蛛拿到的可能是一個接近空白的頁面。

看覆盖率时要避開的几個誤区

覆盖率不是越高越好,也不是越低越差,關键是重要的 URL 有没有被及时抓走。

第一,不要把全站 URL 都当成目标。篩選參數頁、站内搜尋结果頁、重复的排序頁本身就不需要被抓,排除它們,分母才真實。第二,不要只看一天日誌。抓取存在波動,用一到两周的窗口更稳。第三,不要忽略回訪。一個 URL 被抓過一次之後,内容更新了却没被重新抓取,從运营角度看它仍然没跟上。第四,样本要够。日誌量大的站点可以按小时抽样,但要覆盖工作日與周末,也要覆盖更新和未更新的时段。

把检查變成固定動作

  1. 每月導出一份 Sitemap URL 清單和一份日誌抽样。
  2. 按上面的口径归一化,算出覆盖率並记錄环比變化。
  3. 把提交未抓的 URL 按栏目分组,優先看核心栏目。
  4. 核對内鏈有没有断、robots 有没有拦、服務器错誤碼有没有涨。
  5. 改動後再观察一到两周,看差集有没有缩小。

最後提醒一句,抓取覆盖是结果,不是可以單獨拨動的開關。真正能改變它的,還是站点结构、内鏈设計、更新节奏和服務稳定性這些基础工作。