Hugo:给文章添加 lastmod(上次修改时间)
内容提要
本文讨论了如何在Hugo网站中批量添加lastmod日期,以避免在修改文章时更改其最后修改时间。通过编写脚本提取Git提交日期并插入到文章的frontmatter中,确保内容未变时lastmod保持不变,并通过对比构建的网站确认修改无误。
延伸解读
为什么需要手动添加 lastmod
Hugo 默认使用 Git 提交的 author date 作为 lastmod。当批量修改文章(如补全日期格式)时,即使内容未变,所有文章的 lastmod 也会被更新为当天,导致时间戳失真。通过手动在 frontmatter 中添加 lastmod 并调整优先级,可以确保 lastmod 仅反映内容实际修改时间,避免误导读者。
脚本实现与操作流程
作者编写了 add-lastmod.sh 脚本,遍历指定目录下的文件,使用 git log 获取每个文件的最后提交日期,并通过 awk 将 lastmod 行插入到 frontmatter 的第二个 --- 之前。操作前先构建网站备份,添加 lastmod 后再次构建,用文件对比工具确认输出无变化,最后提交改动并删除脚本。
验证与注意事项
为确保修改不影响网站内容,作者在修改前后分别构建网站,并使用 Kompare 对比生成的 public 目录,结果完全相同。此外,还通过本地预览与线上网站对比,确认外观一致。这种方法适用于需要保持 lastmod 准确性的场景,但需注意脚本仅处理 frontmatter 格式,且依赖 Git 历史记录。
Q&A
如何在Hugo中保持文章的lastmod日期不变?
通过在每篇文章中添加lastmod字段,并将其优先级调至最高,可以确保在修改文章时lastmod日期保持不变。
如何批量添加lastmod日期到Hugo文章中?
可以创建一个名为add-lastmod.sh的脚本,提取Git提交日期并插入到每篇文章的frontmatter中。
在修改文章前需要做什么准备工作?
在修改前需要构建网站,以便后续对比确保内容未变时lastmod保持不变。
如何确认添加lastmod后的文章内容没有变化?
使用文件对比工具(如Kompare)对比修改前后的构建网站,确保内容完全相同。
为什么需要将lastmod的优先级调至最高?
将lastmod的优先级调至最高是为了防止Hugo使用Git提交日期作为lastmod,确保其在内容未变时不被更新。
如何使用Git提交lastmod的更改?
在确认修改无误后,使用git diff查看差异,然后执行git add和git commit提交更改。