Blog · 2026-08-30

sitemap 的 lastmod 天天说谎,Google 就不听你的——内容杂凑状态机做法

静态站每次重建就把 lastmod 盖成建置时间,等于天天对 Google 说谎;正解是剥除杂讯后对内容做杂凑、配一个状态机,让日期只在内容真的变了才动。

打开自家 sitemap.xml,几百个 URL 的 lastmod 全是今天凌晨同一分钟——因为部署排程刚跑完。内容一个字都没改,变的只有建置时间。这种 sitemap 每天都在对 Google 喊「全站都更新了」,喊久了,连你真的更新的那一页,它也懒得来看了。这不是冷门灾情,是多数静态站产生器的默认行为。

病征:全站 lastmod 同一个时间戳

诊断只要一眼:打开 sitemap,如果每个 <lastmod> 都是同一个时间,而且刚好等于上次部署的时间,你的产生器八成是拿「现在时间」当修改时间在用——date.today() 塞进 dateModified,或建置脚本直接把 lastmod 盖成 build 当下。另一个旁证在 Search Console:sitemap 明明显示已读取,真正改过的页面却迟迟等不到重爬。

这在「排程自动重建」的站上最严重。我们自己维护一个 402 页、一天自动重建 4 次的赛事内容站(积分、赛程天天在变,重建是必要的),如果拿建置时间当 lastmod,等于每天对每一页宣称「它更新了 4 次」——但多数页面的正文其实一个位元组都没动。更糟的是同一个谎通常会说两次:sitemap 说一次,页面里结构化资料的 dateModified 再说一次。

Google 的立场:不准的 lastmod,直接当不存在

Google 官方 sitemap 文件写得很直白:lastmod 要「持续且可被验证为准确」(consistently and verifiably accurate)才会被采用,验证方式例如拿它去比对页面实际的修改。同一份文件也定义了什么叫值得标记的更新:主要内容、结构化资料、页面连结变了才算;换个著作权年份,不算。

lastmod 的用途是帮爬虫排优先序——告诉它「先来爬这几页,其他不用」。全站天天喊更新,这个讯号就归零:Google 无从分辨哪一页真的变了,你等于亲手把最值钱的爬取提示丢掉。对一天重建多次、又希望更新尽快被收录的站,这是拿石头砸自己的脚。

正解:内容杂凑状态机,日期跟著内容走

原则一句话:lastmod 不该来自「什么时候建置」,该来自「内容什么时候变」。做法是替每一页维护一个跨建置存活的状态档:

{ "/match/group-a/": {
    "hash": "3f2a…",
    "publishedAt": "2026-06-10",
    "updatedAt": "2026-08-12" } }

每次建置对每一页跑同一套流程:

  1. 产出 HTML 后,抽出正文、正规化、算 SHA256。
  2. 状态档里没有这页 → 新页,publishedAt 与 updatedAt 都写今天。
  3. 杂凑跟上次相同 → 什么都不动,沿用旧日期。
  4. 杂凑不同 → updatedAt 改成今天,写回状态档。

sitemap 的 lastmod、结构化资料的 dateModified、页面上显示的「最后更新」,全部从状态档读——三个地方共用同一个真相来源。状态档跟著版本库或部署工件走,重建几次都不会失忆。写回的时机也要想清楚:等部署确定成功才落盘,失败的建置不准污染状态,不然一次炸掉的 build 会把全站日期一起拖下水。

杂凑前先剥干净:script 和追踪码不算内容

这套机制最常死在杂凑算得太粗。直接对整份 HTML 做杂凑,你会发现每次建置全站都「变了」:追踪码片段换版、资产档名带的缓存指纹(app.a1b2c3.js)、随机 nonce、页尾自动带的年份——任何一项动了,全站杂凑翻新,状态机形同虚设。同理,「相关文章」这种每次建置随机抽选的区块,也要划在杂凑范围之外。

所以杂凑之前要先剥。用真的 HTML parser(不是正规表达式)把 <script><style>、注解整段拆掉,清掉追踪参数与版本指纹,只留主内容区的文字与结构,正规化空白之后再算。你剥掉的这些东西,恰好就是 Google 定义里「不算重大更新」的东西——杂凑的边界,就照官方对 significant 的边界来切。

发布日与更新日是两个栏位,别混用

另一个常见错误是整站只有一个日期栏位。发布日(publishedAt)写下去就不该再动;更新日(updatedAt)只在杂凑变了才动。输出规则一行讲完:

lastmod = updatedAt ?? publishedAt

没改过的页面,lastmod 诚实停在发布日,这不丢脸;真的改过的页面,lastmod 精准指到那一天,这才有价值。

验收要做负面测试,两条都得过:连续跑两次建置,第二次必须是零页变动;接著改某一页的一个段落,只允许那一页的 lastmod 动。任何一条不过,代表杂讯还没剥干净,你的 sitemap 还在说谎。

结语

lastmod 是你跟爬虫之间的信用额度,而信用靠「不乱动」累积。把日期绑到内容杂凑上,说谎这件事就从流程里被拿掉了——不靠自律,靠机制。如果你的站也是几百页、排程天天重建,sitemap 却从来没让 Google 认真看过一眼,这套状态机我们自己营运的内容站就在跑,欢迎找我们聊聊。

这种细节,我们做成了服务

lastmod 诚实度是那种没人查、但查起来就知道有没有认真做的指标。我们自家站的 sitemap 就是用内容杂凑状态机产的,改了才动日期。

方案 费用 内容
建置 $900 USDT 站台架构、技术 SEO、初始内容
月维护 $400 USDT / 月 内容产出、内链维护、索引监控

规格在 iGaming SEO 建站服务

这类问题,我们天天在解

把你的情境描述给我们,直接告诉你做不做得到、大概多少钱。

用 Telegram 聊需求
评估与报价不收费 · 回复你的是工程师本人
TG 聊需求