博客文章发布后经常需要更新修正,读者看到的是"2026年6月25日"还是"最后更新于2026年7月2日",体验差别很大。

手动维护 lastmod 字段可以,但每次修改都要记得改 frontmatter,容易忘。更好的方案:让 Hugo 从 Git 提交历史自动获取最后修改时间。

Hugo 配置 链接到标题

启用 GitInfo 链接到标题

hugo.toml 中添加:

enableGitInfo = true

[frontmatter]
  lastmod = [":git", "lastmod", "date"]

enableGitInfo = true 让 Hugo 在构建时读取每个文件的 Git 提交信息。frontmatter.lastmod 配置优先级:

  1. 先看 :git(Git author date)
  2. 如果没有或不可用,回退到 frontmatter 中的 lastmod
  3. 再回退到 date

这样配置后,Hugo 的 .Lastmod 方法会自动返回 Git 最后一次提交的 author date。

模板显示 链接到标题

hugo-coder 主题默认只显示 .Date,需要覆盖模板来显示 .Lastmod

在项目根目录创建 layouts/posts/single.html(优先级高于主题的同名文件),在日期行后面加上最后修改时间:

{{ if not (.Date.Equal .Lastmod) }}
<div style="font-size:0.85em;color:var(--alt-fg-color);margin-top:0.5em">
  更新时间:{{ .Lastmod.Format "2006-01-02 15:04:05" }}
</div>
{{ end }}

效果:仅当 .Lastmod.Date 不同时,在标签下方显示"更新时间:2026-07-02 19:14:31"。

Cloudflare Pages 特殊处理 链接到标题

修改构建命令 链接到标题

Cloudflare Pages 默认使用 shallow clone(只拉取最近一次提交),导致 Hugo 读取不到完整的 Git 历史,.Lastmod 会降级使用 date 字段。

需要将构建命令从默认的 hugo 改为:

git fetch --unshallow && hugo

设置位置:Cloudflare Dashboard → Pages → 项目 → Settings → Build configuration → Build command。

⚠️ 关键坑:修改构建命令后必须重新连接 GitHub 链接到标题

修改构建命令后,Cloudflare 可能不会使用新命令触发构建。我遇到的情况是:改了 Build command 后等了 10 分钟,GitHub 推送没有触发任何部署。

原因是 Cloudflare Pages 和 GitHub 之间的 webhook 连接没有正确建立。解决方法:

  1. Cloudflare Dashboard → Pages → 项目 → Settings → Build configuration
  2. 点击 Disconnect 断开 GitHub 仓库连接
  3. 重新选择同一仓库连接,授权 Cloudflare Pages GitHub App
  4. 这会在 GitHub 仓库中自动创建 webhook,后续每次 push 都会触发部署

Disconnect 后立即触发了一次重建,新命令生效,部署成功。

验证 链接到标题

部署完成后查看文章页面,发布时间旁会出现"更新于"时间:

2026年6月25日 · 阅读时间:4 分钟
分类:信息技术
标签:Hugo · Cloudflare · 博客
更新时间:2026-07-02 19:14:31

只有 Git 中有过修改记录的文章才会显示。从未更新过的文章只显示发布时间。例如本文在发布后追加了这段文字,页面下方就会自动出现"更新时间"。

总结 链接到标题

配置完成后无需再手动维护最后修改时间,所有更新自动从 Git 历史获取。整套方案适用于所有 Hugo + Cloudflare Pages 项目,一次配置永久生效。