Sitemap 和内链是两条并行的 URL 发现通道,理想状态下两者指向的地址集合应该基本重合。实际运营中经常出现偏差:Sitemap 里躺着几百条从未被内链引用过的地址,内链指向的一批页面又不在 Sitemap 中,还有一部分 URL 只在日志里出现过。这类偏差不会立刻造成明显问题,但会让抓取资源分散在低价值地址上,也让后续的收录判断失去参照。
先确定一份可对比的基准清单
核对之前要有一份可复现的 URL 清单,来源通常有三个:
- Sitemap 导出:把索引文件和各分片里的 loc 字段全部导出,去重后得到集合 A。
- 内链导出:从首页出发按可点击的 a 标签逐层抓取,或直接爬取全站 HTML 提取 href,去重后得到集合 B。注意排除导航、页脚里重复出现的模板链接。
- 日志提取:从服务器日志中筛出蜘蛛 UA 的请求路径,得到集合 C。这一列反映的是实际被抓过的地址,不是应该被抓的地址。
把三个集合放进同一张表,用标签标记每条 URL 出现在哪几个来源中,后续排查就有了统一口径。
不一致的几种典型形态
只在 Sitemap 里出现
这类 URL 通常由程序自动生成,比如标签页、筛选结果页、历史版本页。它们没有站内入口,蜘蛛即使抓到也很难判断价值,回访频率普遍偏低。处理方式是先判断页面是否有独立检索需求,有就补内链,没有就从 Sitemap 中移除,不要长期挂在文件里占位置。
只在内链里出现
常见于新发布的栏目页或临时活动页,编辑加了链接但忘了同步 Sitemap。这类页面被发现的速度取决于内链所在层级,如果位于三级栏目以下,光靠内链可能几天都不会被碰到。把这类地址补进 Sitemap 是成本最低的改善动作。
链接指向重定向或错误状态
内链 href 写的是旧地址、带尾斜杠的变体,或者要经过一次跳转才到目标页,都会让蜘蛛多走一步。数量少可以忽略,成批出现时抓取资源的损耗就比较明显。核对时按状态码分组,301 和 302 分开统计,404 单独处理。
建议的核对顺序
- 固定基准清单,导出三个集合,为每条地址打上来源标签。
- 先处理错误状态:内链中的 404、410 优先清理或改指向。
- 再看重定向:把多跳链压缩为一跳,目标地址统一写成最终 URL。
- 然后对齐 Sitemap:删掉无入口且无检索价值的地址,补上有入口但缺失的地址。
- 最后看日志:对已进入 Sitemap 却长期未被抓取的地址,检查是否被 robots 规则或服务器状态拦下。
- 记录本次改动时间,两周后用日志复查请求分布是否发生变化。
集合对齐的目标不是让三个来源完全一致,而是让每一条 URL 都能解释清楚自己为什么在里面。解释不清的地址,通常就是抓取资源被浪费的地方。
维持对齐的日常动作
一次性核对只能解决存量问题,增量部分要靠流程控制。新页面发布时,把「加入内链」和「写入 Sitemap」当作同一个步骤;页面下线时,同步删除 Sitemap 条目并把内链改为指向替代页面。多数站点的偏差并非来自技术故障,而是来自发布和下线两个环节缺少同步动作。
另外,Sitemap 中 lastmod 与真实更新时间偏差较大时,也会干扰核对的判断结果,这一点需要单独检查,不在本文范围内。