搜索抓取

Sitemap 里的 lastmod:时间戳怎么写才不干扰抓取?

Sitemap 的 lastmod 是告诉蜘蛛页面何时更新的信号。写得太随意,蜘蛛可能逐渐忽略;写得准确,能帮助抓取预算落到真正变化的 URL 上。本文从字段含义、常见误用、与 HTTP 头的配合、日志验证几个角度,给出可落地的写法。

搜索抓取

Sitemap 里的 lastmod:时间戳怎么写才不干扰抓取?

在很多站点的 sitemap 里,lastmod 是一个容易被随手填写的字段。有人把它设成当天日期,有人让它等于文章发布时间,还有人干脆全站统一一个值。这个字段本身不复杂,但它传递的是“页面内容发生了实质性变化”的信号。如果蜘蛛多次按这个时间来访,却发现内容没有变化,它对这个信号的信任度就会下降。

lastmod 在蜘蛛眼里是什么

它不是一个“请求抓取”的开关,更像一条线索:告诉蜘蛛这个 URL 可能值得重新看一下。蜘蛛会把 lastmod 和它自己记录的抓取历史、页面内容哈希、HTTP 响应头等信息放在一起判断。对更新频繁的站点,准确的 lastmod 有助于把有限的抓取配额导向新内容;对更新不频繁的站点,胡乱刷新时间戳反而可能让蜘蛛把抓取浪费在无变化的页面上。

常见的三种写错方式

1. 全站共用一个时间戳

每次部署时,模板或构建脚本把 sitemap 里所有 URL 的 lastmod 都改成当前时间。蜘蛛第一次看到可能会来,第二次、第三次发现页面没变,之后就会降低对这个字段的采信程度。尤其是栏目页、关于页这类长期不更新的 URL,被反复标成“刚刚更新”并不合理。

2. 把发布时间当成更新时间

文章发布后,如果只改了错别字、调整了排版,或者补了一张图,lastmod 要不要变?这取决于变化是否对读者有意义。若只是修正笔误,可以不更新;若补充了实质性信息、更新了数据或结论,则值得更新。把“发布时间”直接复用为 lastmod,会让旧文章永远显示为发布那天,蜘蛛无法感知后续的维护。

3. 时间格式或时区不一致

Sitemap 的 lastmod 建议使用 W3C Datetime 格式,至少精确到日期,最好带时区,例如 2025-03-18T09:30:00+08:00。只写“2025-03-18”也可以,但不要混用多种格式。时区不一致时,同一天的更新可能被蜘蛛解析成前一天或后一天,虽然影响不大,但会让日志比对变得麻烦。

更稳妥的写法

  • 只标实质变化:内容主体有增删改时才更新 lastmod,模板、广告位、推荐模块的变动不应触发。
  • 按 URL 独立记录:每个页面维护自己的更新时间,不要从全局构建时间覆盖。
  • 保持稳定格式:全站统一用同一种时间格式和时区,便于蜘蛛和日志工具解析。
  • 不要为了“催抓”而刷新:频繁把旧页面改成最新时间,短期可能带来几次访问,长期会削弱信号可信度。

它和 HTTP Last-Modified、ETag 的关系

Sitemap 里的 lastmod 和 HTTP 响应头里的 Last-Modified 不是一回事。前者是站点主动提交的更新线索,后者是服务器对单个请求的响应信息,配合 ETag 还能支持 304 协商缓存。两者最好保持一致:如果 sitemap 说页面三天前更新过,而 HTTP 头显示的是半年前,蜘蛛会以自己的抓取结果为准,逐步降低对 sitemap 时间戳的依赖。对于由 CMS 或静态生成器产出的站点,可以在发布流程里同时写入这两个值,减少不一致。

把 lastmod 当成“我想让蜘蛛来”的按钮,通常会适得其反;把它当成“我确实改了内容”的记录,才更接近它的本意。

用日志验证蜘蛛是否采信

要判断 lastmod 是否起了作用,不能只看提交成功,而要看蜘蛛的实际访问。可以按以下步骤观察:

  1. 在服务器日志中筛选搜索蜘蛛的 User-Agent,按 URL 分组。
  2. 记录每个 URL 的 lastmod 值与蜘蛛实际来访时间,看是否存在“改完不久就来”的对应关系。
  3. 对比长期不更新和频繁更新的页面,观察蜘蛛回访间隔是否有差异。
  4. 如果发现蜘蛛反复访问未变化的 URL,检查是否有构建脚本在批量刷新 lastmod。
  5. 如果新内容迟迟不被访问,先排查 URL 是否可被抓取、内链是否可达,再考虑 sitemap 信号。

小结

lastmod 不是抓取加速器,而是站点与蜘蛛之间的一份更新记录。写法上,宁可少标、准标,也不要全站刷同一个时间。把实质更新、HTTP 头和日志反馈对齐之后,这个字段才能稳定地帮助蜘蛛判断哪些 URL 值得重新访问。