ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
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 内のリンクは「ナビゲーション系」と認識されます。直接の順位ブーストは公表されていませんが、構造化されたページはクロール効率・ユーザー行動指標の両面で有利と考えられます。
関連要素
| 要素 | 役割 |
|---|---|
| ページや section の冒頭領域(ロゴ + nav を入れることが多い) | |
| ページや section の末尾領域 | |
| 本文から離れた補足(サイドバーの「関連記事」など) | |
| そのページの主たるコンテンツ(nav は main の外が一般的) |
モバイルメニュー(ハンバーガー)の実装パターン
近年の Web サイトでは、画面幅が狭い場合に nav を折りたたんでハンバーガーアイコンで開閉するのが標準です。アクセシビリティを担保するには次の要素が必要。
- ボタン側に aria-expanded(展開状態)と aria-controls(対応する nav の id)を付与
- nav 側には非表示時
hidden属性またはdisplay:noneを付け、スクリーンリーダーから隠す - キーボードのみで操作できるように、ハンバーガーボタンを で実装
- 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=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Unreal Engine AI MoveTo 完全ガイド(NavMesh / AIController / Behavior Tree) 2026-06-11 07:07:02
- shutdown コマンド完全ガイド(Linux / Windows / systemd の使い分け) 2026-06-11 07:07:02
- DI(依存性注入)完全ガイド(Dependency Injection / IoC / Spring / CDI / コンストラクタ・セッター注入) 2026-06-11 07:07:02
- git 用語一覧完全リファレンス(Repository / HEAD / Branch / Rebase / Stash 他) 2026-06-11 07:07:02
- TCP/IP リンク層 (ネットワークインターフェース層) 完全ガイド 2026-06-11 07:07:02
- Laravel ルート認証化完全ガイド — middleware と Gate 2026-06-11 07:07:02
- EJB完全ガイド(Stateless/Stateful/Singleton/MDB/CDIとの違い/Spring代替) 2026-06-11 07:07:02
- git log コミット履歴確認完全ガイド — oneline/graph/stat/blame 2026-06-11 07:07:02
- Laravel のインストール手順まとめ — composer / Sail / Valet / Herd と初期設定 2026-06-11 07:07:02
- CDI完全ガイド(Inject/Produces/Qualifier/Scope/Spring DIとの違い) 2026-06-11 07:07:02
- Python set 入門 — 作成方法、frozenset、内包表記、リスト重複削除 2026-06-11 07:07:02
- Apache .htaccess でベーシック認証を設定する手順(.htpasswd / htpasswd / AuthType Basic / トラブルシュート) 2026-06-11 07:07:02
- Python アプリのローカル独立配布完全ガイド(PyInstaller / wheel / Docker) 2026-06-11 07:07:02
- Laravel Eloquent モデルのデフォルト値設定 2026-06-11 07:07:02
- Unity Component 取得とキャッシュの完全ガイド(GetComponent/RequireComponent/TryGetComponent) 2026-06-11 07:07:02
コメントを削除してもよろしいでしょうか?