記事を読み終わった読者に対して「次はこの記事を読んでみませんか?」とスムーズに提案できれば、サイト全体の回遊率(PV数)アップにつながります。

毎回Markdownファイル内に手動でリンクを貼るのは非常に手間がかかるため、Hugoのテンプレート機能を使って**「前の記事」と「次の記事」へのリンクを自動表示させるナビゲーション**を実装してみましょう!

1. 魔法の変数 .Prev.Next

Hugoには、今の記事の前後の記事を教えてくれる便利な変数があります。

  • .Next: 次の記事
  • .Prev: 前の記事

これを使ってリンクを作りましょう。

2. page.html を改造しよう

themes/my-diy-theme/layouts/page.html を開いて、記事本文の {{ .Content }} の下に、以下のコードを追加してみてください。

    <!-- 記事の本文 -->
    <div class="content">
        {{ .Content }}
    </div>

    <!-- ここから追加! -->
    <nav class="post-nav">
        {{ if .Prev }}
            <div class="nav-prev">
                <span>&lt; 前の記事</span>
                <a href="{{ .Prev.Permalink }}">{{ .Prev.Title }}</a>
            </div>
        {{ end }}
        {{ if .Next }}
            <div class="nav-next">
                <span>次の記事 &gt;</span>
                <a href="{{ .Next.Permalink }}">{{ .Next.Title }}</a>
            </div>
        {{ end }}
    </nav>
    <!-- ここまで -->

3. CSSで見た目を整える

これだけだと文字が並ぶだけなので、static/css/style.css にスタイルを追加して、左右に配置しましょう。

/* ナビゲーション */
.post-nav {
    margin-top: 40px;
    padding-top: 20px;
    border-top: 1px solid #eee;
    display: flex;
    justify-content: space-between;
}

.nav-next {
    text-align: right;
    margin-left: auto; /* 右寄せ */
}

.nav-prev {
    text-align: left;
}

.post-nav span {
    display: block;
    font-size: 0.8rem;
    color: #999;
}

これで、自動的に前後の記事へのリンクが表示されるようになりました!
Tutorial記事のように順番に読んでほしいサイトには必須の機能ですね!🚀


4. セクション内で完結させる

ブログ記事 (posts) とニュース (news) が混在しているサイトなどでは、
「ニュースを見ていたのに、次の記事がお知らせじゃなくてブログ記事だった…」
ということが起こってしまいます。

そんな時は、.Prev / .Next の代わりに .PrevInSection / .NextInSection を使いましょう!

{{ if .PrevInSection }}
    <a href="{{ .PrevInSection.Permalink }}">&lt; 前の記事 (同じコーナー)</a>
{{ end }}

こうすると、「同じフォルダ(セクション)の中だけで」対象を探してリンクを出力してくれます。用途やサイト構成に合わせて使い分けてみてくださいね。

「セクションって何?」という方は、少し先の ブログ以外のセクション作成 でも詳しく解説しています。


ナビゲーションを自動化して読者が次に進む道筋を作ろう

.Prev.Next (セクション内なら .PrevInSection など)を記事テンプレートの末尾に追記するだけで、読者がサイト内を連続して読み進めやすいナビゲーションが完成します。
CSSできれいに左右に整列させることで、スマートフォンでもパソコンでもクリックしやすい定番のデザインを作ることができます!