搜索抓取

Sitemap 里的 lastmod 与 changefreq:字段怎么写才不误导蜘蛛

Sitemap 里的 lastmod、changefreq、priority 常被一次性填满,但三者的现状差别很大。本文说明哪些字段仍被参考、哪些已经基本失效,以及 lastmod 在什么情况下宁可不写,帮站点把 Sitemap 维护成一份准确的地址清单,而不是调度开关。

搜索抓取

Sitemap 里的 lastmod 与 changefreq:字段怎么写才不误导蜘蛛

Sitemap 文件里除了 URL,通常还有 lastmod、changefreq、priority 三个字段。很多人习惯把它们一次性填满,觉得写得越详细蜘蛛越重视。实际情况往往相反:字段写得不准,反而会让抓取调度参考到错误的信息。

这三个字段目前各自的作用

先分清现状。changefreq 和 priority 目前主流搜索引擎已经明确表示不再使用,写不写对抓取基本没有影响,写错也不会带来额外惩罚,只是增加维护成本。lastmod 仍然会被参考,用来判断某个 URL 自上次抓取后是否发生了变化,从而决定要不要重新安排一次抓取。

换句话说,Sitemap 里真正值得花心思维护的只有 lastmod,另外两个字段更多是历史遗留。

lastmod 写错的几种典型情况

  • 每次生成 Sitemap 都刷新成当前时间。这是最常见的问题。定时任务每次跑都把 lastmod 写成今天,蜘蛛看到同一批 URL 反复“刚刚更新”,几次之后这个字段的可信度就没了。
  • 时区不写或写错。完整写法应带时区,例如 2024-06-01T09:30:00+08:00;如果只写日期或漏掉时区,解析结果可能出现偏差。
  • 栏目页、聚合页的 lastmod 跟着内容一起变。栏目页只要有一条新内容就刷新时间,会让蜘蛛频繁回来抓一个变化不大的页面。
  • 内容改过但 lastmod 没同步。时间长期不动本身没问题,问题是正文已经调整却没有更新,等于给了蜘蛛一个过期的更新信号。

怎么维护比较省事

按数据来源分类处理,不必追求全站统一:

  1. 内容页:直接取正文的发布时间或最后编辑时间,这是最可靠的来源。
  2. 列表页、栏目页:可以取该列表内最新一条内容的时间,也可以干脆不写 lastmod,让蜘蛛按自己的节奏回访。
  3. 纯静态页与工具页:内容不常改就别硬填时间,留空比填错好。

如果站点系统里根本没有可靠的修改时间字段,宁可不写 lastmod,也不要统一填当前时间。缺字段只是少了一个参考,填错字段会让这个参考长期失真。

字段之外更影响抓取的东西

Sitemap 只是 URL 发现的入口之一,它告诉蜘蛛“有这么个地址”,但实际抓取仍然要靠内链和服务器响应。同一条 URL 如果在内链里完全没有入口、页面又响应缓慢,Sitemap 写得再细,抓取频率也不会因此提高。

把 Sitemap 当成一份准确的地址清单来维护就够了,不需要把它当成调度开关。

可以定期抽查:随机取一些 URL,对比 Sitemap 里的 lastmod 和页面实际更新时间。差异比例如果偏高,说明生成逻辑需要检查,而不是去调整字段写法。

另外,Sitemap 文件本身的更新时间也要留意。文件长期不更新,蜘蛛会降低回访该文件的频率,新 URL 的发现自然就慢。对于更新频繁的站点,把 Sitemap 拆成索引加子文件、按内容类型分别更新,通常比在一个大文件里反复刷时间更有用。

一个简单的检查习惯

每次调整生成逻辑后,用浏览器或命令行打开 Sitemap,看看时间格式是否统一、是否存在明显不合理的“全站同一秒更新”。这个检查花不了几分钟,但能避免字段长期失效。