| この記事の要点 |
nav 要素とは
nav 要素は HTML5 で追加されたセマンティック要素で、ナビゲーションリンクを含むセクションであることを明示します。グローバルナビゲーション、サイドメニュー、パンくず、目次、ページネーションなど「ユーザーを別ページ・別セクションに案内するためのリンク群」を囲むために使います。
div で囲んでも見た目は同じですが、nav にすることでブラウザ・スクリーンリーダー・検索エンジンが「ここはナビ領域」と認識し、アクセシビリティと SEO の両面で意味を持ちます。
基本構文
<nav>
<ul>
<li><a href="/">トップ</a></li>
<li><a href="/about">サービス紹介</a></li>
<li><a href="/blog">ブログ</a></li>
<li><a href="/contact">お問い合わせ</a></li>
</ul>
</nav>
典型的にはリストでマークアップし、CSS で横並びやドロワーに整形します。
主な利用パターン
| パターン | 説明 | aria-label の例 |
|---|---|---|
| グローバルナビ | サイト全体のメインメニュー | "global" |
| パンくず (breadcrumb) | 現在地までの階層リンク | "breadcrumb" |
| サイドナビ | カテゴリ別の下層リンク | "sidebar" |
| 目次 (TOC) | 長文記事の見出し一覧 | "toc" |
| ページネーション | 1, 2, 3, ... のページ送り | "pagination" |
| フッターナビ | フッター内のメインリンク | "footer" |
複数の nav を区別する
1 ページに nav が複数あるとスクリーンリーダーが「nav, nav, nav...」と読んでしまい区別できません。aria-label または aria-labelledby で役割を明示しましょう。
<nav aria-label="global">
<ul><li><a href="/">Home</a></li>...</ul>
</nav>
<nav aria-label="breadcrumb">
<ol>
<li><a href="/">Home</a></li>
<li><a href="/category">Category</a></li>
<li aria-current="page">Current</li>
</ol>
</nav>
nav を使うべきでない例
- フッターのコピーライト・利用規約・プライバシーリンクだけのまとまり — 主要ナビではないので不要
- 記事本文中の「関連リンク」 — aside の方が適切な場合が多い
- ロゴをトップに戻すための単一リンク — nav で囲む必要なし
- ソーシャルアイコン群 — ul + aside / div で十分
WHATWG 仕様は「主要 (major) なナビゲーションブロックのみ」と明記しています。すべてのリンク集合に nav をつける必要はありません。
パンくずでの典型実装
<nav aria-label="breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/"><span itemprop="name">Home</span></a>
<meta itemprop="position" content="1" />
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/category"><span itemprop="name">Category</span></a>
<meta itemprop="position" content="2" />
</li>
</ol>
</nav>
Schema.org の BreadcrumbList を付与すると、Google の検索結果にパンくずが表示されやすくなります。
アクセシビリティ上のメリット
- スクリーンリーダーは nav をランドマークとして扱い、利用者が領域単位でジャンプ可能
- JAWS / NVDA の「ナビゲーションリンク一覧」コマンドで nav 内のリンクだけ抽出できる
- キーボード利用者にも領域の切り替えが伝わる
SEO の観点
Google は HTML5 セマンティック要素を解析に利用しており、nav 内のリンクは「ナビゲーション系」と認識されます。直接の順位ブーストは公表されていませんが、構造化されたページはクロール効率・ユーザー行動指標の両面で有利と考えられます。
関連要素
| 要素 | 役割 |
|---|---|
| <header> | ページや section の冒頭領域(ロゴ + nav を入れることが多い) |
| <footer> | ページや section の末尾領域 |
| <aside> | 本文から離れた補足(サイドバーの「関連記事」など) |
| <main> | そのページの主たるコンテンツ(nav は main の外が一般的) |
モバイルメニュー(ハンバーガー)の実装パターン
近年の Web サイトでは、画面幅が狭い場合に nav を折りたたんでハンバーガーアイコンで開閉するのが標準です。アクセシビリティを担保するには次の要素が必要。
- ボタン側に aria-expanded(展開状態)と aria-controls(対応する nav の id)を付与
- nav 側には非表示時
hidden属性またはdisplay:noneを付け、スクリーンリーダーから隠す - キーボードのみで操作できるように、ハンバーガーボタンを <button type="button"> で実装
- Esc キーで閉じる JS をつけると親切
nav の入れ子は OK か
WHATWG 仕様上、nav の中に nav を入れることは禁止されていません。とはいえ意味的に混乱するため、1 ページ内で複数の nav を並列に置く方が一般的です。サイドナビをグローバルナビの内側に書きたくなった場合は、入れ子ではなく独立した nav として並べましょう。
FAQ
Q: nav 内に ul を必ず使う?
A: 必須ではない。div + a でも良いが、リンク集合はリスト構造が論理的に正しい。
Q: nav にも heading(h1〜h6)を入れていい?
A: 入れて良い。「メニュー」「目次」など、ナビの主題を見出しで示すと aria-labelledby と組み合わせやすい。
Q: モバイルのハンバーガーメニューも nav?
A: 中身がグローバルナビなら nav で囲む。aria-expanded / aria-controls で展開状態を持たせるのが定番。
関連: HTML セクション要素 / header 要素
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15