既存の Web ページの URL を変更した場合は、古い URL にアクセスしたときに自動的に新しい URL にリダイレクトされるようにしておくと親切です。 ここでは、2 種類のリダイレクト方法を説明します。
aliases
を使う方法 … 同じ Hugo サイト内でリダイレクトするredirectTo
を使う方法(独自) … 別のサイトへリダイレクトする
aliases を使う方法
同一の Hugo サイト内でページの URL を変更した場合は、新しいページのフロントマターに aliases プロパティを追加し、以前の URL を列挙しておきます。 古いページの Markdown ファイルは削除します。
上記のように記述しておくと、古いページの URL (https://examle.com/old-page
) にアクセスしたときに、新しいページの URL (https://example.com/new-page
) にリダイレクトしてくれます。
この仕組みは単純で、aliases
に列挙した URL に対応するように、Hugo が次のような内容のファイルを出力しています。
meta
要素を使って、Web ブラウザに新しい URL にジャンプするように指示しています。
さらに、link
要素の Canonical URL として新しい URL を設定することで、Google などの検索エンジンに、正しい URL はこちらですよと知らせています。
redirectTo を使う方法(独自)
応用として、別の Web サイトにリダイレクトしたい場合を考えてみます。
前述の aliases
を使う方法は、あくまで同じ Hugo サイト内でのリダイレクトを想定しています。
別ドメインへのリダイレクトを行う方法は Hugo 標準では用意されていないようなので、フロントマターに独自のプロパティ redirectTo
を指定できるようにしてみます。
まず、リダイレクト用の出力を行えるように、独自の redirect
レイアウトテンプレートを作っておきます。
内容は、Hugo の aliases.html を真似しています(.Permalink
の部分を .Params.redirectTo
に置き換えています)。
あとは、リダイレクトさせたいページのフロントマターで、このレイアウトを使うように指定すれば OK です。
リダイレクト先の URL は、redirectTo
プロパティで設定します。
さらに、_build プロパティ を指定して、ページのコレクションとして列挙されないようにしておくのがよさそうです。
これで、https://example.com/old-page/
にアクセスしたときに、https://google.com
にリダイレクトされるようになります。