搜索抓取

Sitemap 与内链的 URL 集合对齐:两套发现入口不一致时的核对顺序

Sitemap 与内链是两条并行的 URL 发现通道,长期运行后集合容易出现偏差:只有 Sitemap 收录却无站内入口的地址、只在日志中出现的页面、指向重定向或 404 的内链各占一部分。本文给出一套可复现的核对顺序,从基准清单导出、状态码分组到 Sitemap 增删与日志复查,把抓取资源集中到有价值的地址上。

搜索抓取

Sitemap 与内链的 URL 集合对齐:两套发现入口不一致时的核对顺序

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 单独处理。

建议的核对顺序

  1. 固定基准清单,导出三个集合,为每条地址打上来源标签。
  2. 先处理错误状态:内链中的 404、410 优先清理或改指向。
  3. 再看重定向:把多跳链压缩为一跳,目标地址统一写成最终 URL。
  4. 然后对齐 Sitemap:删掉无入口且无检索价值的地址,补上有入口但缺失的地址。
  5. 最后看日志:对已进入 Sitemap 却长期未被抓取的地址,检查是否被 robots 规则或服务器状态拦下。
  6. 记录本次改动时间,两周后用日志复查请求分布是否发生变化。
集合对齐的目标不是让三个来源完全一致,而是让每一条 URL 都能解释清楚自己为什么在里面。解释不清的地址,通常就是抓取资源被浪费的地方。

维持对齐的日常动作

一次性核对只能解决存量问题,增量部分要靠流程控制。新页面发布时,把「加入内链」和「写入 Sitemap」当作同一个步骤;页面下线时,同步删除 Sitemap 条目并把内链改为指向替代页面。多数站点的偏差并非来自技术故障,而是来自发布和下线两个环节缺少同步动作。

另外,Sitemap 中 lastmod 与真实更新时间偏差较大时,也会干扰核对的判断结果,这一点需要单独检查,不在本文范围内。