很多抓取问题的表现不是“蜘蛛没来”,而是“来了,但该抓的没抓全”。单看某一天的日志,你只能看到蜘蛛走过哪些地址;把日志、Sitemap 和站内实际存在的 URL 放在一起比对,才能看出缺口在哪一段。
这套比对不复杂,核心就是建三份清单。
三份清单分别是什么
清单 A:已抓取
从服务器日志里筛出搜索蜘蛛的请求,去掉图片、CSS、JS 等静态资源,得到一份去重后的 URL 列表。注意两点:一是按规范的 URL 形式归一化,去掉大小写、默认参数、末尾斜杠造成的重复;二是记录每条的首次抓取时间和最近一次抓取时间,后面判断“新页面多久被摸到”要用。
清单 B:已知但未被抓
把你对外声明过或站内链接过的 URL 汇总起来:Sitemap 里的全部地址、内链中出现过的目标地址、主动提交过的地址。这些 URL 对搜索引擎来说属于“知道存在”,但如果日志里一直没有对应的抓取记录,说明它们卡在了调度队列里,或者被前面的环节挡掉了。
清单 C:从未出现
从站点自身的页面数据里导出全部可访问 URL——栏目页、列表页、详情页、聚合页,凡是有独立内容、值得被索引的都算。把 A 和 B 都减掉,剩下的就是既没被抓过、也没被任何入口提到过的地址。这一类的成因通常比较明确。
缺口一般出在哪几处
- 孤岛页:只有 Sitemap 提到、站内没有任何链接指向,蜘蛛顺着链接走永远走不到。
- Sitemap 漏列:新上线的栏目没同步进清单,或者分片文件更新了但索引文件没跟着变。
- 翻页过深:列表页翻到十几页之后的条目,实际很难被继续跟下去。
- 依赖 JS 输出的链接:链接只存在于渲染后的 DOM 里,抓取阶段拿不到。
- 参数拼接地址:同一批内容被拆成多套带参数的地址,注意力被摊薄,真正的主地址反而没抓全。
一个可以按月跑的流程
- 导出一整个月的蜘蛛访问日志,清洗成清单 A,并按目录分组统计抓取量。
- 从后台导出 Sitemap 地址与站内链接目标,合并成清单 B。
- 从内容库导出全部可访问 URL,减去 A 和 B,得到清单 C。
- 看清单 B 里“知道但没抓”的比例,如果持续偏高,先查服务器响应时间和 5xx 是否集中在某些时段。
- 看清单 C 的分布,如果集中在某几个目录,多半是那一块的链接结构或 Sitemap 覆盖有问题。
- 把发现的问题按影响面排序,先修有独立内容、有搜索需求的页面,再处理聚合和辅助页。
盘点之后怎么用
覆盖率不是越接近 100% 越好,站点里本来就有大量不值得抓的地址。这份盘点的价值在于把“感觉蜘蛛抓得少”变成具体数字:是 Sitemap 没写全,是内链没连上,还是服务器拖慢了节奏。三类清单分清楚,下一步该改哪里就清楚了。
建议每次改版、上新栏目或调整内链模板后都重跑一次比对。URL 发现环节的问题往往不是一次性的,而是在结构调整时被重新引入。