結果的に、特にスクリーンリーダーを使用するユーザーは、ページ全体を読まなければ内容を把握できず、非常に非効率になります。
具体例:設定画面での困りごと
Fさんはスクリーンリーダーを使用しています。
あるアプリの設定画面で、「設定1」「設定2」「設定3」という見出しが使われていました。
各設定が何を意味するのか分からず、すべてのセクションを読み上げて確認する必要がありました。
以下のデモで見出しとラベルの違いを確認してください。
悪い例: 見出しとラベルが不明確
<article>
<h1>お知らせ</h1>
<section>
<h3>項目1</h3>
<p>内容がここに入ります。</p>
</section>
<section>
<h3>項目2</h3>
<p>別の内容がここに入ります。</p>
</section>
<form>
<div class="field">
<label>入力欄</label>
<input type="text" />
</div>
<div class="field">
<label>入力欄</label>
<input type="email" />
</div>
<button>送信</button>
</form>
</article>
良い例: 見出しとラベルが明確
<article>
<h1>2024年11月のお知らせ</h1>
<section>
<h2>システムメンテナンスのお知らせ</h2>
<p>11月15日 午前2時から4時までメンテナンスを行います。</p>
</section>
<section>
<h2>新機能リリースのお知らせ</h2>
<p>ダークモードが利用可能になりました。</p>
</section>
<form aria-labelledby="form-title">
<h2 id="form-title">お問い合わせフォーム</h2>
<div class="field">
<label for="name">お名前(必須)</label>
<input type="text" id="name" required />
</div>
<div class="field">
<label for="email">メールアドレス(必須)</label>
<input type="email" id="email" required />
</div>
<button type="submit">お問い合わせを送信</button>
</form>
</article>
- 見出しとラベルのガイドラインを定義する
- 見出しはコンテンツの内容を説明する具体的な文言にする
- 見出しの階層構造を視覚的に設計する
- フォームのラベルは入力内容を明確に示す
- ボタンは動作を説明するラベルにする
良い見出し・ラベルの例
<div class="examples">
<div class="example">
<h3>見出しの例</h3>
<ul>
<li><strong>良い:</strong> 「2024年の売上レポート」</li>
<li><strong>悪い:</strong> 「レポート」</li>
</ul>
</div>
<div class="example">
<h3>フォームラベルの例</h3>
<ul>
<li><strong>良い:</strong> 「メールアドレス」</li>
<li><strong>悪い:</strong> 「入力欄1」</li>
</ul>
</div>
<div class="example">
<h3>ボタンの例</h3>
<ul>
<li><strong>良い:</strong> 「注文を確定する」</li>
<li><strong>悪い:</strong> 「OK」「送信」</li>
</ul>
</div>
</div>
- 見出しは論理的な階層構造(h1→h2→h3)を維持する
- フォームの
label要素とinputをfor属性で関連付ける
- ボタンには動作を説明するテキストを含める
- スクリーンリーダーで見出しの一覧を確認する
- 見出しだけでページの内容が理解できるか確認する
- フォームのラベルが入力内容を適切に説明しているか確認する
- ユーザーからのフィードバックを収集する
- 分かりにくい見出しやラベルを改善する
<h4>セクション1</h4> <!-- h2, h3をスキップ -->
リンクテキストは、リンク先の内容が分かるようにする必要があります。
<p>詳細は<a href="/guide">こちら</a>をご覧ください。</p>
<p><a href="/guide">利用ガイド</a>をご覧ください。</p>
<p>詳細は<a href="/guide">利用ガイドのページ</a>をご覧ください。</p>
同じページに同じラベルのボタンが複数あると、どれを押すべきか分かりません。
<div class="cart-demo">
<h3>悪い例</h3>
<div class="cart-item">
<span>商品A</span>
<button>削除</button>
</div>
<div class="cart-item">
<span>商品B</span>
<button>削除</button>
</div>
<h3>良い例</h3>
<div class="cart-item">
<span>商品A</span>
<button aria-label="商品Aを削除">削除</button>
</div>
<div class="cart-item">
<span>商品B</span>
<button aria-label="商品Bを削除">削除</button>
</div>
</div>
スクリーンリーダーは見出しの一覧を表示する機能があります。ユーザーは見出し間をジャンプしてページを素早く把握できます。
| キー | 動作(NVDA/JAWS) |
|---|
| H | 次の見出しへ移動 |
| Shift + H | 前の見出しへ移動 |
| 1〜6 | 指定レベルの見出しへ移動 |
視覚的なラベルを変更せずに、スクリーンリーダー向けに説明を追加できます。
<button aria-label="メニューを開く">
<button aria-label="商品Aを削除">削除</button>
<button aria-label="商品Bを削除">削除</button>
<section aria-labelledby="section-title">
<h2 id="section-title">お知らせ</h2>
| 見出しレベル | 用途 |
|---|
| h1 | ページのメインタイトル(通常1つ) |
| h2 | 主要なセクション |
| h3 | h2内のサブセクション |
| h4〜h6 | さらに細かい階層 |