パーマリンクを設定する際の考え方と、Hugoにおけるその設定方法について書きました。

パーマリンクとは

“Permanent Link”の略で、別名固定リンク。

ウェブサイト内の各ページに設定された個別のURLのこと。

ベースURL(例:https://ドメイン名.com/)に続く部分がパーマリンクらしいです。

パーマリンクの考え方

パーマリンクについてはググったところいろんな考え方があるようですが、ざっと見た感じでは

「https://ドメイン名.com/(記事の内容を表す短い英文)

という形で設定するのがよさそうだと思いました。

理由としては、

  • 記事の所属カテゴリーを変更した場合にURLが変更されてしまうのを防ぐことができる
  • シンプルで記事の内容がわかりやすいURLにすることができる(Google推奨)

といったところです。

ちなみにパーマリンクを変更するとURLが変わってしまい、SEO的にマイナスになるらしいので、やるなら早いほうがいいそうです。

具体的なパーマリンクの付け方

  • 小文字の英単語を使う。日本語はNG
  • 記事の内容が分かるような具体的なキーワードを使う
  • 単語はハイフンでつなぐ
  • 長すぎないようにする

例としてこの記事では、 「Hugoでパーマリンクを設定する」というタイトルから “set-permalink-hugo” という風に英単語を抽出してハイフンで繋げました( 恥ずかしながら「で」がinだかonだかわからないので削りましたが)。

長くなりそうなら重要度の低い単語から削っていけばよいでしょう。

これをベースURLとくっつけて完成です。

方針

  • 「記事の内容を表す短文」が自動で設定されるようにする
  • 執筆中や執筆後に内容に合わせて修正したい場合に修正しやすくする

自動で設定して楽はしたいけど、執筆中に記事の内容に合わせてパーマリンクを直したくなることも多いのでこのような方針としました。

アイデア

案1:slugで設定する

config.tomlで次のようにします。

[permalinks]
tech = "/:slug/"
posts = "/:slug/"
drawing = "/:slug/"

注:左側のパラメータは/content 直下のフォルダ名のみが使用できるようです(tech等は私の環境におけるフォルダ名です)。

メリット

記事を書く中で内容に応じてurlを修正したくなったばあい、エディターの同じ画面で修正できるのでその点は楽です。

デメリット

記事ごとにslugを設定しなければならないのが面倒です。

また残念ながらcontent = "/:slug/"のようにして全記事に共通のパーマリンクを設定することはできないようです。

セクションを階層化している場合に、例えば /tech/hugo フォルダだけに独自のパーマリンクを設定することもできません。 /content 直下のフォルダに設定したパーマリンクが、その内部のフォルダにも共通で適用されることになります。

したがって、/content 直下のフォルダを新設するごとにそのフォルダにパーマリンクを設定する必要があります。

案2:filenameで設定する

config.tomlで次のようにします。

[permalinks]

tech = "/:filename/"
posts = "/:filename/"
drawing = "/:filename/"

メリット

hugo newでファイルネームを付ける段階で適切なURLになるように決めておけば、それ以後は何もしなくていいので楽です。

デメリット

slugの場合と同じと同じconfig設定上のデメリットを抱えています。

また、記事を書く中で内容に応じてurlを修正したくなったばあい、ファイル操作でリネームしなければならないのが面倒です。 ただしこれは、記事のフロントマターにurl:を設定してパーマリンクを上書きすればよいです。(Hugoではurl:[premalinks]よりも優先されるようです)

案3:urlで設定する

あれー?だったらそもそもフロントマターのurl:に自動でファイル名が入るようにすればいいんじゃないのー!?

というわけで、/archetypes/_default.md に以下のように設定します。

url: "{{.File.BaseFileName}}"

こうすることで、例えばhugo new posts/new-article.mdで記事を作成すると、その記事のフロントマターにurl: "new-article" と自動でファイル名が設定されます。

記事を書く中で内容に応じてurlを修正したくなったばあい、同じエディター画面でこのurl: "new-article"の”“内を修正すればよいだけなので楽です。

また/content 直下のフォルダを新設するごとにconfig.tomlをいちいち設定する必要もありません。

結論

案1・2のデメリットが解消されるため、案3が最良かなと思います。

よってurl:で設定することにしました。

これで普段やることは、

  1. 上記の具体的なパーマリンクの付け方に従って決めたファイル名でhugo newで記事を作成する
  2. 記事を書いていてパーマリンクを修正する必要が生じたらフロントマターのurl:を書き換える

だけでよくなりました!

私の場合実際には、修正によりurlとファイル名がズレると何か気持ち悪くてファイル名もあとあと修正してたりするんですけどね。

参考ページ