搜索抓取

抓取覆盖率怎么算:从日志里找出蜘蛛没抓到的 URL

抓取覆盖率不是官方指标,但能帮你发现被蜘蛛忽略的页面。本文说明怎么从服务器日志中提取被抓过的 URL,用 Sitemap、CMS 内容和内链范围三种分母做对比,定位被遗漏的目录与 URL 类型,并给出修复的先后顺序。

搜索抓取

抓取覆盖率怎么算:从日志里找出蜘蛛没抓到的 URL

先把覆盖率拆成两个数

抓取覆盖率不是搜索引擎公布的指标,只是运营中常用的一个观察口径:在一段时间里,蜘蛛实际抓取的 URL 数量,与你认为应该被抓的 URL 数量之间的比例。它不能说明收录情况,也不能预测排名,但能帮你发现明显被忽略的部分。要用它,先把分子和分母分别定义清楚。

分子来自服务器日志:筛选蜘蛛的请求,去掉重复、合并等价 URL 后,得到去重后的 URL 列表。分母没有唯一答案,通常从三个来源各取一份:Sitemap 里列出的 URL、CMS 中已发布且状态正常的 URL、以及从首页出发顺着内链能走到的 URL。

从日志里整理被抓过的 URL

筛选时先做 UA 与 IP 段核验,避免把普通爬虫或自己的监控请求算进去。之后做几步归一化:去掉 utm 类跟踪参数、统一大小写、处理末尾斜杠差异、把 301 或 302 的目标地址单独记一份。归一化做得好不好,直接决定统计结果能不能用。

整理时可以按目录聚合,比如 /product/、/article/、/tag/,这样比看一个总数更有意义。整体数字看着不错,但某个目录几乎没被抓过,问题往往就藏在那里。

看覆盖率时,最值得关注的是“哪一类没被抓”,而不是“整体百分比是多少”。

分母的三个来源和它们的差别

  • Sitemap:你主动声明的 URL 集合,理想状态最全,但常滞后于实际内容,改版后尤其明显。
  • CMS 已发布内容:最接近真实内容量,但可能包含未生成页面、草稿、已下架页面。
  • 内链可到达 URL:从首页出发能走到的范围,是蜘蛛最现实的抓取边界,通常小于前两者。

三个分母对比着看,能快速定位问题类型:Sitemap 里有、内链却走不到,多半是链接结构的问题;CMS 里有、Sitemap 里没有,多半是生成或更新流程的问题;内链能到、日志里却长期没有,就要看状态码和服务器响应了。

常见被漏掉的那几类 URL

  1. 没有任何内链指向的页面,只存在于 Sitemap 或后台列表里。
  2. 入口太深的页面,需要经过多层列表、分页或筛选才能到达。
  3. 由参数生成的地址,如排序、筛选组合,容易被当作低价值 URL 忽略。
  4. 状态码不稳定的页面,频繁 5xx 或超时,蜘蛛尝试几次后会降低回访。
  5. 刚发布、还没被任何内链或 Sitemap 覆盖的新内容。

先修可抓性,再谈覆盖率

如果日志里 5xx、连接超时、429 的比例偏高,先处理服务器与限流,否则补再多内链也没有意义。其次是检查 robots.txt、meta robots,以及可能误拦的 WAF 规则。可抓性恢复正常之后,再按“重要页面优先”的顺序补内链、更新 Sitemap,而不是一次性把所有 URL 塞进去。

一个可以定期做的事

每月或每次内容批量更新后,用同一套口径跑一次覆盖率统计,与上一次对比。重点不是涨了几个百分点,而是看新发布的内容多久出现在日志里、长期被忽略的目录有没有变化。

抓取覆盖只是把页面送到搜索引擎面前的通道之一,它不保证收录,也不保证排名,但能让你更早发现“蜘蛛根本没来过”这类基础问题。