Web制作コラム
内部リンクとパンくずの組み方|アンカーテキストと、リンクを置く場所
サイトの中のページどうしをつなぐリンクは、読者が移動する道であり、検索エンジンがページを見つけて内容を知る手がかりでもあります。リンクの文言、置く場所、パンくずの HTML の書き方を、現場でやっている形でまとめました。

引き継いだサイトの記事を整理していたとき、本文のリンクがほとんど「こちら」になっていて、どこへ飛ぶのか一つずつ開かないと分からない、ということがありました。直す前に、まず全体のリンクの置き方から見直すことになりました。
内部リンクとは、同じサイトの中のページどうしをつなぐリンクのことです。メニュー、パンくず、本文中のリンク、記事の下の関連記事などは、すべて内部リンクにあたります。
内部リンクは、読者が次に読むページへ移るための道です。同時に、検索エンジンもリンクをたどってページを見つけ、リンクの文言から行き先の内容を知ります。どこに、どんな文言で、どう書くか。この3つを順に説明していきます。
アンカーテキストは行き先の内容にする
アンカーテキストは、リンクになっている文字のことです。「こちら」「詳しくはこちら」「クリック」だと、リンクの先に何があるのかが分からないんです。
Google も、リンクの文言は行き先の内容が分かる簡潔なものにするよう勧めています。それに、読み上げソフトの利用者は、ページの中のリンクだけを一覧にして移動することがあります。そこに「こちら」がいくつも並ぶと、どれがどこへのリンクなのか区別できません。
| 悪い例([ ]がリンクの文字) | 良い例([ ]がリンクの文字) |
|---|---|
| 料金は[こちら] | [保守プランの料金]をご覧ください |
| [詳しくはこちら] | [WordPressの引っ越し手順]で詳しく説明しています |
| [クリック]して資料をダウンロード | [サービス資料(PDF)をダウンロード] |
※ 横にスクロールできます
HTML
<!-- 行き先が分からない -->
<p>料金については<a href="/price/">こちら</a>。</p>
<!-- リンクの文字だけで行き先が分かる -->
<p><a href="/price/">保守プランの料金</a>をご覧ください。</p>とはいえ、すべてのリンクに同じキーワードを詰め込む必要はありません。文として自然で、行き先が分かれば十分だと考えています。
画像のリンクは alt がアンカーテキストになる
ロゴやバナーのように画像をリンクにしている場合は、画像の alt がリンクの文言として扱われます。alt が空だと、何のリンクか分からないリンクになってしまいます。ロゴの alt が空のままのサイトは、案件でもわりとよく見かけます。
HTML
<a href="/">
<img src="/img/logo.svg" alt="株式会社サンプル" width="180" height="40">
</a>リンクの種類ごとに役割が違う
同じ内部リンクでも、置く場所によって役割が違います。整理すると次のようになります。
| リンクの種類 | 置く場所 | 役割 |
|---|---|---|
| グローバルナビ | 全ページのヘッダー | 主要なページへの入口。数を絞る |
| パンくず | ページの上部 | いまの位置と、上の階層への戻り道を示す |
| 本文中のリンク | 本文の中 | 話の流れの中で、詳しい説明のページへ送る |
| 関連記事 | 記事の下 | 読み終えた人に、次に読む1本を示す |
| フッター | 全ページの下 | 会社情報・お問い合わせ・プライバシーポリシーなど |
※ 横にスクロールできます
ページどうしの関係をいちばんよく伝えるのは、本文中のリンクです。前後の文章から、なぜそのページにつながっているのかが分かるからなんです。グローバルナビやフッターはどのページにも同じものが出るので、個々のページの関係までは伝えられません。
関連記事を同じカテゴリから自動で並べるだけだと、話の流れと関係ない記事が並ぶこともあります。「この記事を読んだ人に次に読んでほしい1本」は、本文の中で指名してリンクするのが確実で、私もそうするようおすすめしています。
孤立ページを作らない
どこからもリンクされていないページを、孤立ページと呼びます。サイトマップに載せていても、サイトの中からリンクされていないページは見つけてもらいにくく、重要でないページとして扱われやすくなります。
キャンペーンのページ、広告用に作った LP、カテゴリに入れ忘れた記事などで起きやすい問題です。保守の相談で「このページだけ検索に出ない」と言われて調べると、これだったことが何度かあります。
- ページを新しく作ったら、関連する既存のページから1本以上リンクする
- 一覧のページ送りを「もっと見る」ボタンだけにしない。2ページ目以降にも URL を持たせ、リンクでたどれるようにする
- 重要なページは、トップページから少ないクリック数で届く位置に置く
サイトの中で、どのページがどれだけリンクされているかは、Google Search Console の「リンク」のレポートで確認できます。
リンクは a 要素の href で書く
Google がリンクとしてたどれるのは、href 属性に URL が入った a 要素です。ボタンの onclick で JavaScript からページを移動させる作りや、href="javascript:void(0)" のようなリンクは、リンクとして扱われにくくなります。
HTML
<!-- たどられにくい -->
<span onclick="location.href='/price/'">料金</span>
<a href="javascript:void(0)" onclick="goPrice()">料金</a>
<!-- リンクとしてたどれる -->
<a href="/price/">料金</a>a 要素で書いておけば、新しいタブで開く、URL をコピーする、といったブラウザの機能もそのまま使えます。React や Next.js でも、ルーターのリンク部品(Next.js の Link など)は a 要素を出力するので、案件ではそれを使っています。
ページを移動するものは a、その場で何かを動かすもの(開閉、送信など)は button、と使い分けます。見た目がボタンでも、移動するなら a で書きます。
パンくずの HTML
パンくずは、いまのページがサイトのどこにあるかを示すリンクの並びです。順番に意味があるので ol で書き、nav で囲んで aria-label で名前を付けます。いま見ているページはリンクにせず、aria-current="page" を付けます。
HTML
<nav aria-label="パンくずリスト" class="breadcrumb">
<ol>
<li><a href="/">ホーム</a></li>
<li><a href="/column/">コラム</a></li>
<li aria-current="page">内部リンクとパンくずの組み方</li>
</ol>
</nav>区切りの「>」や「/」を HTML に文字で書くと、読み上げソフトがそのたびに記号を読んでしまいます。区切りは CSS で付けておくのがおすすめです。
CSS
.breadcrumb ol {
display: flex;
flex-wrap: wrap;
list-style: none;
margin: 0;
padding: 0;
}
/* 2つ目以降の項目の前に区切りを付ける。
「/ ""」は読み上げ用の代替テキストで、記号を読ませないための指定 */
.breadcrumb li + li::before {
content: "›" / "";
margin: 0 .5em;
color: #999;
}カテゴリを1記事に1つにしておくと、パンくずが決まる
WordPress で1つの記事に複数のカテゴリを付けると、パンくずにどのカテゴリを出すかが決まらなくなります。パンくずを素直に組むなら、カテゴリは1記事に1つにし、横断的な分類はタグで付けるのが扱いやすい形です。ここは構築のときによく相談を受けるところです。
パンくずには、検索エンジン向けの構造化データ(BreadcrumbList)も添えられます。書き方は別の記事にまとめています。画面のパンくずと同じ並びにすることだけ、気を付けてください。
まとめ
- リンクの文言は「こちら」でなく、行き先の内容にする
- 話の流れで読ませたいページは、本文の中でリンクする
- どこからもリンクされていないページを作らない
- リンクは a 要素の href で書く。onclick での移動にしない
- パンくずは nav・ol・aria-current で組み、区切りは CSS で付ける
リンクとパンくずを組んだ状態で納品します
ワプラボのコーディング代行では、ナビやパンくずを nav と ol で組み、リンクはすべて a 要素で書いたうえで納品しています。WordPress 化する場合は、パンくずと構造化データをカテゴリの階層から自動で出力するところまで組み込めます。
「コーディング」のコラム
この記事と同じカテゴリの記事です。
WordPressとECサイトの制作、
まとめてご相談いただけます
WordPress制作・構築代行
デザインデータやコーディング済みHTMLを、オリジナルテーマとして構築します。プラグイン開発も対応。
構築基本費用 50,000円
詳しく見るコーディングコーディング代行
デザインデータをHTML/CSSに起こします。WordPress化まで通しでも、コーディングだけでも承ります。
1ページ 15,000円〜
詳しく見るReactReactコーディング代行
デザインデータをReactのコンポーネントとして実装します。既存アプリへの画面追加・UI改修だけでも承ります。
1ページ 18,000円〜
詳しく見るNext.jsNext.js制作・コーディング代行
検索エンジンに読まれるHTMLを返せるNext.jsで構築します。静的書き出しでレンタルサーバーでも公開できます。
1ページ 18,000円〜
詳しく見るEC / WordPressWelcartでのECサイト構築
WordPress専用のネットショップ構築プラグイン。機能面まで踏み込んだカスタマイズができます。
デザイン制作+構築 一式 120万円〜
詳しく見るEC / EC-CUBEEC-CUBEでのECサイト構築
国産オープンソースのECパッケージ。決済・受注・在庫まわりを業務に合わせて作り込めます。
デザイン制作+構築 一式 120万円〜
詳しく見るEC / ASPカートECサイト制作代行
Shopify・MakeShop・カラーミーなどのカートに、オリジナルデザインを組み込みます。
構築基本費用 100,000円
詳しく見る制作のご相談も承っています
デザインデータと画面数をお知らせいただければ、お見積りと納期をご提示します。
