GEO 实战

datePublished、dateModified、Sitemap lastmod、HTTP Last-Modified和ETag有什么区别?

datePublished 表示内容首次发布的日期;dateModified 表示内容最近一次有意义修改的日期;Sitemap 的 <lastmod 表示该 URL 所指页面最后修改时间;HTTP Last-Modified 是服务器给当前选定表示提供的修改时间验证器;ETag

直接答案 / DIRECT ANSWER

datePublished 表示内容首次发布的日期;dateModified 表示内容最近一次有意义修改的日期;Sitemap 的 <lastmod 表示该 URL 所指页面最后修改时间;HTTP Last-Modified 是服务器给当前选定表示提供的修改时间验证器;ETag 是服务器为表示生成的不透明实体标签,用于更精确的缓存验证和并发条件请求。

直接答案

datePublished 表示内容首次发布的日期;dateModified 表示内容最近一次有意义修改的日期;Sitemap 的 <lastmod 表示该 URL 所指页面最后修改时间;HTTP Last-Modified 是服务器给当前选定表示提供的修改时间验证器;ETag 是服务器为表示生成的不透明实体标签,用于更精确的缓存验证和并发条件请求。

前三者主要表达内容或页面时间,后两者服务于 HTTP 表示验证。它们可以相互协调,但不是同一个字段,也不应由一次部署时间无条件批量覆盖。

五种信号对比

信号 出现位置 描述对象 典型用途 精度或形式

--------------

datePublished 页面可见日期、结构化数据 内容首次发布 告知用户与搜索系统首发时间 日期或日期时间

dateModified 页面可见日期、结构化数据 内容实质修改 表达内容新鲜度 日期或日期时间

Sitemap lastmod XML Sitemap 的 URL 项 页面最后修改 帮助抓取方安排访问 W3C 日期时间格式

HTTP Last-Modified 响应头 当前表示 If-Modified-Since 条件请求 HTTP 日期,秒级

ETag 响应头 当前表示的实体标签 If-None-Match、If-Match 引号中的不透明标签

“表示”可能受内容协商、压缩或语言影响。一个 URL 不一定永远只有一份相同字节的响应,所以 HTTP 验证器要由服务器按实际表示生成。

datePublished是什么?

Schema.org 的 datePublished 表示创作作品首次发布的日期。文章页面通常在可见位置展示发布时间,并在 Article、BlogPosting 或 NewsArticle 等结构化数据中提供相同含义的值。

首发时间一般不应因为改错别字、更新模板或重新部署而改变。若迁移 CMS 时把所有文章的发布时间重置为迁移日,会破坏历史信息,也让页面可见日期与外部存档、RSS 或旧链接记录矛盾。

dateModified是什么?

dateModified 表示创作作品最近修改的日期。对教程、政策说明、产品文档等可持续维护内容,它可以帮助读者判断页面是否经过更新。

更新日期应对应有意义的内容变化,例如事实修正、步骤变化、来源更新或重要章节重写。只改页脚年份、广告、导航、样式或跟踪脚本,不应让全站文章同时显示“今天更新”。

Google 的日期最佳实践强调日期应醒目、清晰,并建议在结构化数据中提供 datePublished 与 dateModified;页面上其他日期也应尽量减少歧义。结构化数据日期必须与用户可见内容一致。

发布日期和修改日期应该同时显示吗?

对会持续更新的内容,同时显示“发布于”和“更新于”通常最清楚。若从未发生实质更新,可以只显示发布时间,或者让两者相同,但不要制造虚假的更新历史。

日期应带明确标签,必要时包含时区。仅显示 08-26、页面中堆放多个无标签日期,或结构化数据写一个日期、正文写另一个日期,都会增加解释歧义。

Sitemap lastmod是什么?

Sitemap 协议中的 <lastmod 是可选字段,描述该 URL 页面最后修改日期。它使用 W3C 日期时间格式,可以只写日期,也可以写完整时间。它与服务器响应中的 If-Modified-Since 机制是不同概念。

lastmod 应来自页面内容的真实修改记录,而不是 Sitemap 文件的生成时间、抓取时间或当前时间。若每次构建都把所有 URL 更新为今天,抓取方会逐渐无法信任该信号。

lastmod能保证搜索引擎重新抓取吗?

不能。Sitemap 是发现与调度提示,不是抓取、索引或排名指令。搜索引擎会结合自身历史、站点质量、资源和其他信号决定是否以及何时重新访问。

正确 lastmod 的价值在于长期稳定地区分“确实更新”与“未变化”。如果页面内容没变就不要为了催抓取反复改日期,更不能以此替代解决 robots、状态码、canonical 或质量问题。

HTTP Last-Modified是什么?

Last-Modified 响应头由源服务器提供,表示服务器认为所选表示最后修改的日期和时间。客户端之后可发送 If-Modified-Since;若表示在该时间后未修改,服务器可返回 304 Not Modified,避免传输完整正文。

它是 HTTP 缓存验证器,也能用于范围请求等条件判断,但精度与生成方式有局限。动态页面、数据库聚合结果或多个源文件组合页面不一定有自然的单一修改时间,服务器需要定义可靠策略。

Last-Modified等于Sitemap lastmod吗?

不等于。Sitemap lastmod 描述 URL 页面更新时间,HTTP Last-Modified 描述本次选定表示的验证时间。二者可以来自同一内容版本,但使用协议、格式和消费者不同。

同一 URL 若根据语言、编码或设备返回不同表示,HTTP 验证器需考虑这些变化;Sitemap 通常仍以 URL 条目表达页面更新。不能简单把文件系统 mtime 同时填入所有字段而不核对渲染逻辑。

ETag是什么?

ETag 是服务器为当前选定表示生成的实体标签,值对客户端是不透明的,例如 ETag: "abc123"。客户端不应解析其中版本号或时间,而应原样用于条件请求。

再次请求时,客户端可发送 If-None-Match。标签匹配时,GET 或 HEAD 常得到 304;写操作可使用 If-Match 防止在资源已经变化时覆盖别人修改。

ETag 不要求是内容哈希,也不保证跨服务器永久稳定。它只需满足生成方承诺的比较语义。把内部路径、用户信息或敏感版本细节直接暴露进标签并无必要。

强ETag和弱ETag有什么区别?

强实体标签表示两个表示在适用比较中逐字节等同;弱标签以 W/ 开头,表示语义上等价但字节可能不同。弱验证器可用于缓存新鲜度验证,但不能用于要求强比较的场景,例如某些范围请求。

动态压缩、时间戳或无关渲染差异可能让强 ETag 频繁变化。此时应修正表示稳定性或按规范选择弱验证器,而不是声称强等同却生成不可靠标签。

ETag和Last-Modified应该选哪个?

ETag 通常能更精确地识别表示版本,不受时间分辨率和时钟推断限制;Last-Modified 简单、可读,且在静态资源上容易生成。服务器可以同时提供两者。

条件 GET 同时携带 If-None-Match 和 If-Modified-Since 时,HTTP 语义规定实体标签条件具有优先关系。应用与 CDN 应遵循标准处理,避免一个判断变化、另一个判断未变化时返回错误 304。

为什么返回304但页面内容明明变了?

常见原因包括 ETag 未随内容更新、Last-Modified 取错源文件时间、CDN 与源站验证器冲突、缓存键遗漏语言或设备维度、部署复用了旧元数据,或服务端条件请求判断逻辑错误。

排障时保存无条件响应与条件响应的状态码、ETag、Last-Modified、Vary、Cache-Control、Age 和正文哈希,并分别测试源站与 CDN。不能只在浏览器按刷新键观察页面。

为什么所有页面lastmod都变成部署时间?

静态站点构建常重新生成全部文件,文件系统 mtime 因此统一变化。如果 Sitemap 生成器直接读取产物 mtime,就会把模板部署误报为所有内容更新。

应从内容仓库的明确 front matter、CMS 修订时间或经过规则过滤的版本记录生成页面级 lastmod。共享模板变化是否算内容更新,要根据用户实际看到的变化和站点政策决定,不能机械使用构建时间。

日期可以为了“新鲜度”每天刷新吗?

不应。没有实质修改却反复更新日期会误导用户,也使 Sitemap 和结构化数据失去可信度。真正需要保持时效性的页面,应更新事实、来源和结论,并记录改了什么。

自动化可以检测潜在过时内容并建立更新队列,但最终修改日期应在合格内容变更被发布时产生,而不是定时任务每天批量改字段。

GEO内容的更新时间应该怎么记录?

对引用型内容,修改记录应同时关联结论、来源 URL、来源访问日期和页面版本。若只更新了一条统计数据,可在修订说明中标明范围;若核心定义和答案结构变化,则更新 dateModified 与 Sitemap lastmod,并让 HTTP 验证器对应新表示。

AI 搜索或答案引擎是否采用某个日期没有统一保证。能控制的是让页面可见日期、结构化数据、Sitemap 和实际内容版本相互一致,并保存可复核证据。

推荐的数据模型

内容系统可以分别保存:

publishedat:第一次公开发布时间,通常不可随意覆盖。

contentmodifiedat:最后一次实质内容修改时间。

deployedat:该版本部署时间,仅供运维追踪。

sourcecheckedat:来源最后核验时间,可按来源记录。

revisionid:内容版本标识,用于审计和回滚。

渲染层由这些字段生成可见日期和结构化数据;Sitemap 使用内容修改时间;HTTP 层再根据最终表示生成 Last-Modified 或 ETag。不要用一个 updatedat 承担所有语义。

发布前一致性检查

页面可见发布日期与结构化数据 datePublished 一致。

仅在实质修改后更新可见修改日期与 dateModified。

Sitemap lastmod 对应页面真实内容版本,不是 Sitemap 生成时间。

Last-Modified 不晚于响应生成时间,并能随表示正确变化。

ETag 在内容未变时保持稳定、内容变化时按比较语义变化。

条件 GET 能正确返回 200 或 304,且 304 不带过时正文。

CDN、源站与浏览器看到的验证器逻辑一致。

页面没有无标签或相互矛盾的多个日期。

常见误区

dateModified更新后搜索结果一定显示新日期吗?

不一定。搜索系统会综合页面可见日期、结构化数据和其他信号决定展示,不承诺采用某一个字段。

Sitemap lastmod是Sitemap文件的修改时间吗?

不是。URL 条目中的 lastmod 描述对应页面的最后修改时间。

Last-Modified可以精确代替ETag吗?

不总能。时间有分辨率和来源限制,ETag 可以更精确地区分表示版本。两者可同时使用。

ETag必须是正文SHA-256吗?

不必须。ETag 对客户端是不透明的,只需满足服务器声明的强或弱比较语义。

结论

datePublished 记录首发,dateModified 记录实质内容更新,Sitemap lastmod 为抓取调度提供页面变更提示,HTTP Last-Modified 与 ETag验证具体响应表示。把内容时间、部署时间和缓存版本拆开保存,并让页面、结构化数据、Sitemap 与 HTTP 响应相互一致,比批量刷新“今天更新”更可靠。

参考资料

  1. 参考来源 1原始来源 · 正文事实与技术边界
  2. 参考来源 2原始来源 · 正文事实与技术边界
  3. 参考来源 3原始来源 · 正文事实与技术边界
  4. 参考来源 4原始来源 · 正文事实与技术边界
  5. 参考来源 5原始来源 · 正文事实与技术边界