搜尋抓取

抓取覆盖率盘点:已抓取、已知未抓、從未出現三類 URL 怎么分

蜘蛛来過不等于抓全了。這篇文章讲一套可落地的盘点方法:把站点 URL 分成已抓取、已知未抓、從未出現三份清單,分別從服務器日誌、Sitemap 與内鏈、站点實际路径中比對,找出 URL 發現环节的缺口,再按優先級處理。

搜尋抓取

抓取覆盖率盘点:已抓取、已知未抓、從未出現三類 URL 怎么分

很多抓取問题的表現不是“蜘蛛没来”,而是“来了,但该抓的没抓全”。單看某一天的日誌,你只能看到蜘蛛走過哪些地址;把日誌、Sitemap 和站内實际存在的 URL 放在一起比對,才能看出缺口在哪一段。

這套比對不复杂,核心就是建三份清單。

三份清單分別是什么

清單 A:已抓取

從服務器日誌里筛出搜尋蜘蛛的請求,去掉图片、CSS、JS 等静態资源,得到一份去重後的 URL 列表。注意两点:一是按規范的 URL 形式归一化,去掉大小寫、預設參數、末尾斜杠造成的重复;二是记錄每條的首次抓取時間和最近一次抓取時間,後面判断“新頁面多久被摸到”要用。

清單 B:已知但未被抓

把你對外声明過或站内連結過的 URL 匯總起来:Sitemap 里的全部地址、内鏈中出現過的目标地址、主動提交過的地址。這些 URL 對搜尋引擎来说属于“知道存在”,但如果日誌里一直没有對應的抓取记錄,說明它們卡在了調度队列里,或者被前面的环节挡掉了。

清單 C:從未出現

從站点自身的頁面資料里導出全部可訪問 URL——栏目頁、列表頁、詳情頁、聚合頁,凡是有獨立内容、值得被索引的都算。把 A 和 B 都减掉,剩下的就是既没被抓過、也没被任何入口提到過的地址。這一類的成因通常比較明确。

缺口一般出在哪几處

  • 孤岛頁:只有 Sitemap 提到、站内没有任何連結指向,蜘蛛顺着連結走永遠走不到。
  • Sitemap 漏列:新上线的栏目没同步進清單,或者分片文件更新了但索引文件没跟着變。
  • 翻頁過深:列表頁翻到十几頁之後的條目,實际很难被繼續跟下去。
  • 依赖 JS 輸出的連結:連結只存在于渲染後的 DOM 里,抓取阶段拿不到。
  • 參數拼接地址:同一批内容被拆成多套带參數的地址,注意力被摊薄,真正的主地址反而没抓全。

一個可以按月跑的流程

  1. 導出一整個月的蜘蛛訪問日誌,清洗成清單 A,並按目錄分组統計抓取量。
  2. 從後台導出 Sitemap 地址與站内連結目标,合並成清單 B。
  3. 從内容库導出全部可訪問 URL,减去 A 和 B,得到清單 C。
  4. 看清單 B 里“知道但没抓”的比例,如果持續偏高,先查服務器响應時間和 5xx 是否集中在某些时段。
  5. 看清單 C 的分布,如果集中在某几個目錄,多半是那一块的連結结构或 Sitemap 覆盖有問题。
  6. 把發現的問题按影响面排序,先修有獨立内容、有搜尋需求的頁面,再處理聚合和辅助頁。

盘点之後怎么用

覆盖率不是越接近 100% 越好,站点里本来就有大量不值得抓的地址。這份盘点的價值在于把“感觉蜘蛛抓得少”變成具体數字:是 Sitemap 没寫全,是内鏈没连上,還是服務器拖慢了节奏。三類清單分清楚,下一步该改哪里就清楚了。

建议每次改版、上新栏目或調整内鏈模板後都重跑一次比對。URL 發現环节的問题往往不是一次性的,而是在结构調整时被重新引入。