先把覆盖率拆成两个数
抓取覆盖率不是搜索引擎公布的指标,只是运营中常用的一个观察口径:在一段时间里,蜘蛛实际抓取的 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
- 没有任何内链指向的页面,只存在于 Sitemap 或后台列表里。
- 入口太深的页面,需要经过多层列表、分页或筛选才能到达。
- 由参数生成的地址,如排序、筛选组合,容易被当作低价值 URL 忽略。
- 状态码不稳定的页面,频繁 5xx 或超时,蜘蛛尝试几次后会降低回访。
- 刚发布、还没被任何内链或 Sitemap 覆盖的新内容。
先修可抓性,再谈覆盖率
如果日志里 5xx、连接超时、429 的比例偏高,先处理服务器与限流,否则补再多内链也没有意义。其次是检查 robots.txt、meta robots,以及可能误拦的 WAF 规则。可抓性恢复正常之后,再按“重要页面优先”的顺序补内链、更新 Sitemap,而不是一次性把所有 URL 塞进去。
一个可以定期做的事
每月或每次内容批量更新后,用同一套口径跑一次覆盖率统计,与上一次对比。重点不是涨了几个百分点,而是看新发布的内容多久出现在日志里、长期被忽略的目录有没有变化。
抓取覆盖只是把页面送到搜索引擎面前的通道之一,它不保证收录,也不保证排名,但能让你更早发现“蜘蛛根本没来过”这类基础问题。