Sitemap 文件里除了 URL,通常还有 lastmod、changefreq、priority 三个字段。很多人习惯把它们一次性填满,觉得写得越详细蜘蛛越重视。实际情况往往相反:字段写得不准,反而会让抓取调度参考到错误的信息。
这三个字段目前各自的作用
先分清现状。changefreq 和 priority 目前主流搜索引擎已经明确表示不再使用,写不写对抓取基本没有影响,写错也不会带来额外惩罚,只是增加维护成本。lastmod 仍然会被参考,用来判断某个 URL 自上次抓取后是否发生了变化,从而决定要不要重新安排一次抓取。
换句话说,Sitemap 里真正值得花心思维护的只有 lastmod,另外两个字段更多是历史遗留。
lastmod 写错的几种典型情况
- 每次生成 Sitemap 都刷新成当前时间。这是最常见的问题。定时任务每次跑都把 lastmod 写成今天,蜘蛛看到同一批 URL 反复“刚刚更新”,几次之后这个字段的可信度就没了。
- 时区不写或写错。完整写法应带时区,例如 2024-06-01T09:30:00+08:00;如果只写日期或漏掉时区,解析结果可能出现偏差。
- 栏目页、聚合页的 lastmod 跟着内容一起变。栏目页只要有一条新内容就刷新时间,会让蜘蛛频繁回来抓一个变化不大的页面。
- 内容改过但 lastmod 没同步。时间长期不动本身没问题,问题是正文已经调整却没有更新,等于给了蜘蛛一个过期的更新信号。
怎么维护比较省事
按数据来源分类处理,不必追求全站统一:
- 内容页:直接取正文的发布时间或最后编辑时间,这是最可靠的来源。
- 列表页、栏目页:可以取该列表内最新一条内容的时间,也可以干脆不写 lastmod,让蜘蛛按自己的节奏回访。
- 纯静态页与工具页:内容不常改就别硬填时间,留空比填错好。
如果站点系统里根本没有可靠的修改时间字段,宁可不写 lastmod,也不要统一填当前时间。缺字段只是少了一个参考,填错字段会让这个参考长期失真。
字段之外更影响抓取的东西
Sitemap 只是 URL 发现的入口之一,它告诉蜘蛛“有这么个地址”,但实际抓取仍然要靠内链和服务器响应。同一条 URL 如果在内链里完全没有入口、页面又响应缓慢,Sitemap 写得再细,抓取频率也不会因此提高。
把 Sitemap 当成一份准确的地址清单来维护就够了,不需要把它当成调度开关。
可以定期抽查:随机取一些 URL,对比 Sitemap 里的 lastmod 和页面实际更新时间。差异比例如果偏高,说明生成逻辑需要检查,而不是去调整字段写法。
另外,Sitemap 文件本身的更新时间也要留意。文件长期不更新,蜘蛛会降低回访该文件的频率,新 URL 的发现自然就慢。对于更新频繁的站点,把 Sitemap 拆成索引加子文件、按内容类型分别更新,通常比在一个大文件里反复刷时间更有用。
一个简单的检查习惯
每次调整生成逻辑后,用浏览器或命令行打开 Sitemap,看看时间格式是否统一、是否存在明显不合理的“全站同一秒更新”。这个检查花不了几分钟,但能避免字段长期失效。