博客文章发布后经常需要更新修正,读者看到的是"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 配置优先级:
- 先看
:git(Git author date) - 如果没有或不可用,回退到 frontmatter 中的
lastmod - 再回退到
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 连接没有正确建立。解决方法:
- Cloudflare Dashboard → Pages → 项目 → Settings → Build configuration
- 点击 Disconnect 断开 GitHub 仓库连接
- 重新选择同一仓库连接,授权 Cloudflare Pages GitHub App
- 这会在 GitHub 仓库中自动创建 webhook,后续每次 push 都会触发部署
Disconnect 后立即触发了一次重建,新命令生效,部署成功。
验证 链接到标题
部署完成后查看文章页面,发布时间旁会出现"更新于"时间:
2026年6月25日 · 阅读时间:4 分钟
分类:信息技术
标签:Hugo · Cloudflare · 博客
更新时间:2026-07-02 19:14:31
只有 Git 中有过修改记录的文章才会显示。从未更新过的文章只显示发布时间。例如本文在发布后追加了这段文字,页面下方就会自动出现"更新时间"。
总结 链接到标题
配置完成后无需再手动维护最后修改时间,所有更新自动从 Git 历史获取。整套方案适用于所有 Hugo + Cloudflare Pages 项目,一次配置永久生效。