Hugoでかんたんpermalinks作成

にあえん

July 9, 2023

SEO対策として、一応このブログにもパーマリンクを仕込むか〜〜〜となったときの備忘録。

ただ僕はそもそもパーマリンク自体あんまり良くわかってなかったので、そこから調べました。

そもそもパーマリンクって?

SEO対策の一環として、ページに振られるURLを固有のものにすることです。

パーマリンクとは?SEOへの影響や注意点について解説

hugoの場合、デフォルト設定のままだと、タイトルとかディレクトリ構造をリファクタリングするとページURLも変わっちゃうので、せっかく検索して上位に来てもURLが変わっちゃったら全部台無しになっちゃいます。

それを防ぐためのパーマリンクです。

Hugoでパーマリンクは設定できる?

結論から言えば、公式でパーマリンクを生成する方法はありません。

前述の通り、Hugoが生成するページリンクは記事タイトルやディレクトリ構成に影響するため、後にタイトルを変えるといったケースがある場合にはそれに対応できません。

逆に言えば、そういった変更を今後一切行わないのであれば別にデフォルト設定のままでも十分ということになります。

なので、ここではhugoのテンプレート構文を利用してIDを生成する関数を実装します。

単純にランダムに英数字を並べかるだけでは味気ないので、せっかくなので現在時刻を元にしたmd5ハッシュを使ってID生成します。

archetypes/default.mdを開いて、以下のような実装を追記します。

---
title: "{{ replace .Name "-" " " }}"
slug: "{{ template "permanentId" }}"
date: {{ .Date }}
draft: true
---

{{ define "permanentId" -}}
    {{ md5 now.Unix }}
{{- end -}}

ハッシュ値はslugに設定しました。

次に、config.tomlからブログのパスにslugを参照するように設定します。

[permalinks]
posts = "/:slug/"

(postsの部分はcontentの名前によって変えてください)

これであとはhugo newで記事を作ると、slugにハッシュ値が設定されるようになり、結果としてURLが時刻を元にしたmd5ハッシュ値になっています。

感想

Hugoおもしろい

参考

Hugoのテンプレート構文「template」「partial」「block」「define」のわかりやすい解説 Hugo でサイト構造を変えてもページの URL が変わらないようにする (Permalink) Hugo テンプレート内で define による部分テンプレート定義を行う(関数もどき) Hugo の URL をカスタマイズする