搜索抓取

抓取覆盖率盘点:已抓取、已知未抓、从未出现三类 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 发现环节的问题往往不是一次性的,而是在结构调整时被重新引入。