hugo的lastmod更新问题

sitemap.xml里的lastmod配置

背景

最近我改了几篇旧文章之后,发现google没有对我的更新内容进行及时收录
我查了一下原因,发现hugo自动生成的sitemap.xml里,
对于我手动更新了内容的那篇文章,他的lastmod并没有变化。

关于lastmod字段

lastmod字段的作用,是告诉搜索引擎的爬虫,这个页面最后的修改时间。
假如你的页面实际内容改了,但是这个值没有更新,就会导致爬虫判断这个页面没有改动
这就导致了搜索引擎没有及时收录你这次的改动(其实最终会收录,但是时间会很久)

hugo的lastmod时间

Hugo在生成sitemap时,确定值有一个顺序,优先级从高到低:

  1. 文章头部Front Matter里手动指定的lastmod字段
1
2
3
4
5
---
title: "我的文章"
date: 2023-01-01T10:00:00+08:00
lastmod: 2024-03-15T14:30:00+08:00 # Hugo会用这个
---
  1. 文章头部Front Matter里指定的publishDate字段
    如果找不到 lastmod,Hugo会查找 publishDate

  2. 文章头部Front Matter里指定的date字段
    如果以上两者都没有,Hugo会使用 date 参数

  3. Git 提交信息 (如果 配置项里enableGitInfo 为 true):
    如果你的项目是一个Git仓库,并且你在Hugo的配置文件 (hugo.toml 或 config.toml) 中设置了 enableGitInfo = true,
    Hugo会尝试使用最后一次影响该文件的Git提交的作者日期 (author date) 作为 lastmod。这通常是最准确的自动方式。 :git 从文件的 git 提交记录获取
    好像和CI有联系

  4. 文件系统修改时间 (Fallback):
    如果以上都不可用,它可能会尝试使用文件的实际修改时间,但这个显然在跨系统或CI/CD环境中不可靠。 ‘:fileModTime’ 我测试了下,在CI模式下,这个值会把所有文章lastmod改成最近这次CI执行时间

最后解决方案

方式1 使用git记录的文件修改时间 -> 推荐!

1
2
3
4
5
# config.toml
enableGitInfo = true  # 启用GitInfo支持

[frontmatter]
  lastmod = ['lastmod', 'modified', ':git', ':fileModTime', 'date'] # 按顺序依次获取

具体的配置解释参考

Licensed under CC BY-NC-SA 4.0
最后更新于 2025-05-27 01:51:43
使用 Hugo 构建
主题 StackJimmy 设计