SEO対策にXMLの更新日(lastmod)を正しく表示する方法

Hugoを使って記事を作成しているのですが、サイトマップをみてみるとlastmodの値がすべて同じになってました。その原因と解決策を今回は探っていこうと思います。

Hugoの導入や記事の投稿についての情報はHugoで記事の投稿の仕方デザイナーでもできる初めてのHUGO #01を確認してください。

Gitから更新情報を取得するようにしている

Hugoは非常に強力な機能をたくさん持っています。その一つがGitにある情報にアクセスできるという点です。
この機能を使えば、Gitに登録した人を投稿者としたり、push した日付を更新日とすることができます。
つまり、自分で投稿者や更新日を記述する必要がないということになります。

このブログでもHugoとGitの連携を行っております。その連携自体は簡単です。
設定ファイルに

enableGitInfo: true

と記述するだけで、Gitの情報にアクセスできます。

frontmatterの記述

Hugoには日付を制御できる設定があります。Hugoがコンテンツ・ページに日付を割り当てる方法を設定することができます。これは、config に frontmatter セクションを追加することで行うことが可能です。
私の環境では下記のようになっておりました。

frontmatter:
  lastmod:
    - :fileModTime
    - :git
    - lastmod

:fileModTimeはコンテンツファイルの最終更新タイムスタンプから日付を取得します。
:gitではコンテンツファイルの最終リビジョンのGit作成日となります。
この設定を使うには、--enableGitInfo が設定されているか、サイト構成で enableGitInfo = true が設定されている必要があります。つまり、先程の設定ファイルに記述した設定となります。
そして、lastmodです。

この設定は上から順に評価されていきます。

詳細はHugoのfrontmatterを確認してください。

Git Actioinsで設定したXMLの更新日がすべて同じになった

今回はXMLの作成の際にGitのデータを使用するようにしていました。
ローカルで確認したところ、hugo serverでの動作も、hugoにて書き出したファイルも更新日であるlastmodが正常に表示されていたので問題ないと判断して、Gitにアップしました。

しかし、Gitではローカルと動作が異なっており、すべて同じ日付となってしまいました。
一体なぜでしょうか?

ランキングや最新記事の反映で日付が更新された可能性

このサイトでは最新記事やランキングを掲載しております。それらは時間や投稿のタイミングで変化します。そういた変化を検知してしまって日付が変わってしまった可能性が考えられます。
しかし、そうだとしたら、ローカルでも同様の問題になるかと思うので、この可能性は低そうです。

GitHub Pagesで別ブランチで管理している

このサイトはGitHub Pagesを使って別ブランチで管理しています。つまり、公開ディレクトリにあたる public 部分は前の考察のランキングや最新記事によって全てのページが変更されています。
そして、別ブランチにアップする。つまり、すべてが書き換わるといったことが起こったのではないでしょうか。

解決策

解決策はすごくと簡単です。
Git と連携して lastmod の日付を自動で設定するために、enableGitInfo: true としていました。そして、この設定と同時に、下記のような設定もHugoの設定ファイル(yaml形式)に記述していました。

frontmatter:
  lastmod:
    - :fileModTime
    - :git
    - lastmod

ここの frontmatter の記述をすべてコメントアウトにします。
それか、優先度のファイルのタイムスタンプから:gitに変更します。

frontmatter:
  lastmod:
    - :git
    - :fileModTime
    - lastmod

これでlastmodが正しく表示されるようになりました。

まとめ

lastmod はSEOとしてあまり必要とされていないといった声も聞かれますが、正しく表示しておくことでサイトとしての信頼性は格段に上がると思います。
HugoとGitの連携を行った際に、更新日など正しく反映されない箇所があった場合は設定などを見直してみましょう。
簡単なことで問題が解決するかもしれません。

おすすめの書籍

第5回 pythonでNQueen(エイトクイーン)バックトラック(1)

第5回 pythonでNQueen(エイトクイーン)バックトラック(1)

Googleにインデックスされないときの対応方法は?

Googleにインデックスされないときの対応方法は?