HugoのLast modified日付が正しく表示されない問題と解決策

Fixing GitInfo issues on Cloudflare Pages

* 本ページはプロモーションが含まれています

Hugoで構築したブログサイトで、記事の「Last modified(最終更新日)」が正しく表示されない問題にしばらく悩んでいました。
全ての記事が同じ日付になってしまい、各記事の実際の更新日が反映されていませんでした。
この記事では、問題の原因と解決策について説明します。

私の環境では、GithubとCloudflare Pagesを利用しています。

症状 

記事のメタ情報に表示される「Last modified」の日付が、全ての記事で同じ日付になってしまっていました。
例えば、以下のように表示されていました:

<span class="post-meta">Posted on December 3, 2025 (Last modified on December 4, 2025)</span>

実際には各記事の更新日時が異なるにも関わらず、全ての記事で同じ「Last modified」日付が表示されていました。

原因 

問題の原因は2つありました。

1. hugo.tomllastmod設定の優先順位 

hugo.toml[frontmatter]セクションで、lastmodの取得順序が以下のようになっていました:

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

この設定では、フロントマターにlastmodが指定されている場合、それがgitのコミット情報(:git)より優先されてしまいます。
そのため、gitのコミット履歴から取得すべき最終更新日が正しく反映されませんでした。

2. Cloudflare Pagesでのシャロークローン 

Cloudflare Pagesでビルドを行う際、デフォルトでシャロークローン(--depth=1)が行われます。
シャロークローンでは、最新のコミットとそれに関連するファイルの情報のみが取得され、過去のコミット履歴は取得されません。

この状態では、git logなどのコマンドが正しく動作せず、HugoのGitInfo機能も正常に動作しません。
そのため、各ファイルのgitコミット履歴から最終更新日を取得することができませんでした。

参考: HugoのGitInfo機能をGitHub Actionsで使う - KOTET’S PERSONAL BLOG

解決策 

1. hugo.tomlの設定変更 

hugo.tomllastmod設定を変更し、:gitを最優先にします:

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

これにより、gitのコミット履歴から取得した最終更新日が優先的に使用されるようになります。

2. Cloudflare Pagesのビルドコマンド変更 

Cloudflare Pagesのダッシュボードで、ビルドコマンドを以下のように変更します:

設定場所:

  1. Cloudflare Dashboard → Pages → プロジェクト選択
  2. Settings → Builds & deployments
  3. Build command を変更

変更前:

hugo --gc --minify -b $CF_PAGES_URL

変更後:

git fetch --unshallow && hugo --gc --minify -b $CF_PAGES_URL

git fetch --unshallowにより、ビルド前にgitの完全な履歴を取得してからhugoを実行します。
これにより、HugoのGitInfo機能が正常に動作し、各ファイルのgitコミット履歴から最終更新日を取得できるようになります。

確認 

設定変更後、以下のように各記事の「Last modified」が正しく表示されるようになりました:

  • post-a.md → 2024年1月1日にコミット → Last modified: January 1, 2024
  • post-b.md → 2025年3月15日にコミット → Last modified: March 15, 2025

:gitは各ファイルごとに異なるコミット日時を取得するため、全ての記事が同じ日付になることはありません。

まとめ 

HugoのLast modified日付が正しく表示されない問題は、以下の2つの設定変更で解決しました:

  1. hugo.toml:gitを最優先にする
  2. Cloudflare Pagesのビルドコマンドでgit fetch --unshallowを実行する

これにより、各記事のgitコミット履歴に基づいた正確な最終更新日が表示されるようになりました。

てっきりプログラム内を修正する必要があると思っていたのですが、Cloudflare Pagesのビルドコマンドだけで解決するとは。