コンテンツにスキップ

コンテンツの目的を明確に伝える見出しとラベル

このガイドラインが達成されないとどうなるか

Section titled “このガイドラインが達成されないとどうなるか”

結果的に、特にスクリーンリーダーを使用するユーザーは、ページ全体を読まなければ内容を把握できず、非常に非効率になります。

具体例:設定画面での困りごと

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>

最低限、すぐに取り組めること

Section titled “最低限、すぐに取り組めること”
  • 見出しとラベルのガイドラインを定義する
  • 見出しはコンテンツの内容を説明する具体的な文言にする
  • 見出しの階層構造を視覚的に設計する
  • フォームのラベルは入力内容を明確に示す
  • ボタンは動作を説明するラベルにする

良い見出し・ラベルの例

<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要素とinputfor属性で関連付ける
  • ボタンには動作を説明するテキストを含める
適切な見出し構造の例
<h1>商品カタログ</h1>
<h2>電化製品</h2>
<h3>テレビ</h3>
<h3>オーディオ</h3>
<h2>家具</h2>
<h3>ソファ</h3>
<h3>テーブル</h3>
  • スクリーンリーダーで見出しの一覧を確認する
  • 見出しだけでページの内容が理解できるか確認する
  • フォームのラベルが入力内容を適切に説明しているか確認する
  • ユーザーからのフィードバックを収集する
  • 分かりにくい見出しやラベルを改善する

見出しの階層構造が崩れている

Section titled “見出しの階層構造が崩れている”
悪い例:見出しレベルのスキップ
<h1>ページタイトル</h1>
<h4>セクション1</h4> <!-- h2, h3をスキップ -->
<h2>セクション2</h2>
良い例:論理的な階層構造
<h1>ページタイトル</h1>
<h2>セクション1</h2>
<h3>サブセクション1-1</h3>
<h2>セクション2</h2>

「こちら」「クリック」などの曖昧なリンク

Section titled “「こちら」「クリック」などの曖昧なリンク”

リンクテキストは、リンク先の内容が分かるようにする必要があります。

悪い例
<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>

スクリーンリーダーでの見出しナビゲーション

Section titled “スクリーンリーダーでの見出しナビゲーション”

スクリーンリーダーは見出しの一覧を表示する機能があります。ユーザーは見出し間をジャンプしてページを素早く把握できます。

キー動作(NVDA/JAWS)
H次の見出しへ移動
Shift + H前の見出しへ移動
1〜6指定レベルの見出しへ移動

視覚的なラベルを変更せずに、スクリーンリーダー向けに説明を追加できます。

aria-labelの使用例
<!-- アイコンのみのボタン -->
<button aria-label="メニューを開く">
<svg>...</svg>
</button>
<!-- 複数の同名ボタンを区別 -->
<button aria-label="商品Aを削除">削除</button>
<button aria-label="商品Bを削除">削除</button>
aria-labelledbyの使用例
<section aria-labelledby="section-title">
<h2 id="section-title">お知らせ</h2>
<p>内容...</p>
</section>
見出しレベル用途
h1ページのメインタイトル(通常1つ)
h2主要なセクション
h3h2内のサブセクション
h4〜h6さらに細かい階層