個人ブログのパーマリンクに関する最適戦略について

Intro

Webで情報を公開するにあたって、パーマリンクの設計は将来に渡って重要なものです。

このブログは人生において3つめのブログであり、これまでの2つのブログは勝手にアーカイブしてネットから消してしまいました。

しかしこのブログは今のところ死ぬまで付き合うつもりであり、それが出来るようにコンテンツの少ない今、設計する必要があります。

ブログ管理の裏側については「Netlify + Hugo + ox-hugoでブログを初める第一歩」に書きましたが、パーマリンクの設計は表側の設計であり、ブログの人生の中で途中で変えることは許されていません。

もし無理矢理変えれば、これまでシェアしてもらったURLの意味は失くなり、404ページに多くの読者を案内してしまうことになります。

さて、このブログではどのようにパーマリンクを設計すると良いのでしょうか。

調査

パーマリンクの設計といっても選択肢は多くありません。

そもそも使える情報が タイトル公開日時連番 くらいしかないので、代表的なものは以下のような形式か、その組み合わせです。

  • {{base-url}} / {{title}} /
  • {{base-url}} / {{short-title}} /
  • {{base-url}} / {{category}} / {{short-title}} /
  • {{base-url}} / {{num}} /
  • {{base-url}} / {{year}} / {{month}} / {{day}} /

{{title}} はそのまま記事のタイトルを使う方法です。 日本語のタイトルはそのままURLエンコードされ、URLになるパターンです。

{{short-title}} はSEOに強い、記事ごとにつけられた短いタイトルを使う方法です。 あえて日本語を使う理由もなく、普通は英数字のみで長くても30文字くらいでまとめます。

{{category}} は記事ごとに設定されたカテゴリーを使う方法です。

{{num}} はサイトごとにカウンタを持っておいて、その連番をURLに使用する方法です。

{{year}}, {{month}}, {{day}} は記事の公開日です。

評価

さて、これらの方法のなかで、どれがよいのでしょうか。

大きく分けると2つの分類ができ、記事ごとに新たに考える方法と自動で生成する方法です。

  • 記事ごとに新たに考える方法

    • {{short-title}}
      • メリット
        • SEOやURLシェアの観点から最高の選択肢
      • デメリット
        • 記事ごとに短いタイトルを英語でつけなおさなければならない
        • 記事を少ない英単語で表現するのは一般的に難しく、長くなってしまう場合もある
        • 少ない英単語で命名するため、URL衝突を考慮する必要がある
        • もし、Emacsと命名した記事より、もっと適切な記事を書いた場合にその名前はもう使えない
    • {{category}}
      • メリット
        • URLから得られる情報がある
        • カテゴリー名は記事名に比べて、ずっと少ないので、命名はあまり苦でない
      • デメリット
  • 自動で生成する方法

    • {{title}}
      • メリット
        • 記事ごとに考えなくてよい
      • デメリット
        • 日本語のタイトルをつけるとURLが長大になる
    • {{num}}
      • メリット
        • 記事ごとに考えなくてよい
        • キリ番記事が作りやすい (100記事達成記事など)
      • デメリット
        • 記事を後から非公開にすると、欠番が生じる
        • URLから得られる情報が少ない
    • {{year}}, {{month}}, {{day}}
      • メリット
        • 記事ごとに考えなくてよい
        • URLを見れば公開日が分かる (技術系記事において新しい記事は重要)
      • デメリット
        • URLから得られる情報が少ない

というところでしょうか。 それぞれにメリットとデメリットがあるので、それを評価した後は好みの問題となります。

決定

前段の評価に基づいて、私はこのブログのパーマリンクを以下のように設計しました。

  • {{base-url}} / blog / {{year}} / {{random}}

まず、私はとてもものぐさなので、記事ごとにショートタイトルを与える方法は難しいです。 いくらSEOやURLシェアの観点から最良の選択だと言っても、記事を書くモチベーションを失っては元も子もありません。

タイトルをそのまま付ける方法は、記事ごとに自動で決定できるので魅力的ですがきびしいです。各見出しの id は日本語をURLエンコードしたものをしかたなく使うとして、2つの要素をURLエンコードすると簡単に256文字を超えます。もちろん現代ではURLの流さに制限はないですが、限度はあると思います。

カテゴリー管理も同じような階層が現われ、破綻することが目に見えています。 実は前回のブログはそれで破綻したのです。 /emacs//blog/emacs/, blog/advent/emacs/ などが乱立し、新たな記事をどの階層に作ればよいのか混乱する要因になりました。

連番を付ける方法も魅力的ですが、欠番が発生することに耐えられません。これは気分の問題です。

日付を使用する方法はとても良いと思います。 URLから得られる情報もありますし、後述するランダム値の衝突について「永遠」を考えなくてすみます。

ここまで、日付を使うことが決まり、タイトルもだめ、ショートタイトルもだめ、連番もだめといろいろな物を拒否した結果、一意性を確保するものとして使えるものはランダム値しかありません。

まとめ

使用するパーマリンクを設計することができました。 しかし、 {{random}} はどれだけのビット数を使い、どのようなフォーマットを使うべきでしょうか。

その考察は次の記事「誕生日のパラドックスから考察する、個人ブログURLに必要なランダムビット数」に譲るとして、この記事ではパーマリンク設計について大きな決定ができたので、とても満足しています。

なお、例外的に {{base-url}} / emacs / {{package-name}} というURLを使おうと思っています。 これはるびきちさんのパーマリンク設計を踏襲しています。 るびきちさんと同じようにEmacsのパッケージ紹介記事ではこのURLを使用しようと思います。