メインコンテンツに移動

HTMLアクセシビリティとは?セマンティック HTML の基本から実装の考え方まで解説

Web アクセシビリティというと、色のコントラストやキーボード操作、スクリーンリーダー対応、ARIA 属性などを先に思い浮かべる人が多いかもしれません。しかし、実際にアクセシブルなページを作るうえで最初に重要になるのは、正しい HTML を正しい用途で使うことです。見た目が整っていても、HTML の意味づけが曖昧であれば、支援技術はその構造を十分に理解しにくくなります。逆に、見出し、ボタン、リンク、フォーム、表といった要素を正しく使っていれば、それだけでもページの理解しやすさや操作しやすさはかなり改善されます。つまり、HTML アクセシビリティは後から特別な対応を追加することではなく、最初から意味のある構造を作ることに近いです。

また、HTML アクセシビリティは障害のある人だけに関係する話でもありません。見出し構造が整理されていれば誰にとっても読みやすくなりますし、適切なラベルがあればフォームの理解もしやすくなります。リンク文言が明確なら、ページ全体の移動もしやすくなります。つまり、アクセシブルな HTML は一部の利用者のためだけではなく、情報をより明確に伝えるための土台でもあります。本記事では、HTML アクセシビリティの考え方を 9 つの視点で整理しながら、実務で押さえておきたい基本をコード例も交えて説明していきます。

1. HTMLアクセシビリティとは何か

HTML アクセシビリティとは、HTML の要素や属性を適切に使うことで、ページの意味、構造、関係性、操作対象を分かりやすく表現することです。これは単に支援技術へ配慮するためだけのものではなく、情報を正しく整理して伝えるための基本設計でもあります。見出しは見出しとして、リンクはリンクとして、ボタンはボタンとして、フォーム入力欄にはその目的が分かるラベルを付ける。こうした当たり前に見えることが、実はアクセシビリティの中心です。つまり、HTML アクセシビリティは高度な追加機能というより、マークアップの基本を意味のある形で実践することだと言えます。

この考え方が重要なのは、Web ページは見た目だけで理解されているわけではないからです。支援技術は HTML の構造を手がかりにページを把握しますし、ブラウザも HTML の意味を前提に振る舞いを提供しています。たとえば button を使えばキーボード操作や押下の意味が自然に伝わりやすくなりますが、同じ見た目を div で作ると、その意味や操作性を自前で補わなければならなくなります。つまり、HTML アクセシビリティを考えることは、HTML 本来の役割を活かして、ページをより理解しやすい状態へ整えることでもあります。

1.1 「見た目」ではなく「意味」を組み立てる

HTML アクセシビリティで最初に意識したいのは、見た目ではなく意味を組み立てるということです。たとえば、大きな文字で太字にしただけでは、それは視覚的には見出しに見えても、HTML 上はただのテキストかもしれません。同じように、青く下線を引いただけではリンクに見えても、本当のリンクではないかもしれません。アクセシビリティの観点では、この違いは非常に大きいです。なぜなら、支援技術は色や大きさではなく、HTML 上の意味を読んでいるからです。

つまり、ページを作るときには「どう見えるか」だけでなく、「これは何を表す要素なのか」を常に意識する必要があります。見出しなら h1 から h6、リンクなら a、操作なら button、主要コンテンツなら main といったように、意味に合った要素を選ぶことが基本です。この発想があるだけで、あとから ARIA を大量に足したり、JavaScript で無理に操作性を補ったりする必要がかなり減ります。

1.2 HTMLアクセシビリティは土台の品質そのもの

HTML アクセシビリティは、完成後に追加するチェック項目ではなく、ページそのものの品質に近いです。構造が分かりやすく、意味が正しく、フォームが理解しやすく、画像の情報が伝わる HTML は、その時点でかなり強い土台を持っています。逆に、HTML が曖昧なままだと、CSS や JavaScript で見た目を整えても、本質的な分かりにくさが残りやすいです。

特に実務では、後からアクセシビリティを直そうとするとコストが高くなりがちです。見出し構造を直す、ボタンをすべて本物の button に変える、フォームラベルを整理する、といった修正は、HTML の基本設計に関わるからです。つまり、HTML アクセシビリティは追加機能ではなく、最初から意識したほうが圧倒的に効率がよい領域です。

2. HTMLアクセシビリティの土台はセマンティック HTML

HTML アクセシビリティを考えるとき、もっとも重要な土台になるのがセマンティック HTML です。セマンティック HTML とは、見た目ではなく役割に応じた要素を使ってページを構成することです。たとえば、見出しには見出し要素を、ナビゲーションには nav を、主要な本文には mainarticle を、ボタンには button を使います。これによって、ページの構造や役割が HTML 自体に表れ、ブラウザや支援技術が内容を理解しやすくなります。つまり、セマンティック HTML はアクセシビリティの特別なテクニックではなく、HTML アクセシビリティそのものの中心にあります。

逆に、divspan だけで全部を組み立てると、見た目の自由度は高くても意味が薄くなります。その場合、あとから role や ARIA を足したり、キーボード操作を自前で作り込んだりする必要が出てきます。もちろん複雑な UI ではそうした補助が必要になることもありますが、本来 HTML が持っている意味と操作性を最初から使えるなら、そのほうが自然で安定します。つまり、HTML アクセシビリティでは、まず「ネイティブの HTML で解決できるか」を考えることがとても重要です。

2.1 よい例と避けたい例

<!-- 避けたい例 --> <div class="button-like" onclick="saveData()">保存</div> <!-- よい例 --> <button type="button" onclick="saveData()">保存</button>

見た目は同じように作れるとしても、意味はまったく同じではありません。button は最初から押せるコントロールとして扱われ、キーボード操作や状態の解釈もしやすくなります。一方で div は単なる汎用コンテナなので、見た目をボタンに寄せても、意味や操作性までは自動で付きません。つまり、セマンティック HTML は見た目の選択ではなく、体験の質に関わる選択です。

2.2 「正しい要素を正しい目的で使う」を習慣にする

実務では、「この見た目を作るには何のタグが必要か」より、「この要素は何を意味するか」から考えたほうがよいです。たとえば、ページ移動ならリンク、何かを実行するならボタン、まとまった本文なら article、主要内容なら main といったように、役割から要素を選ぶ癖を付けると、HTML アクセシビリティはかなり安定します。

この習慣が付くと、後から補修する必要が大きく減ります。つまり、セマンティック HTML は知識として覚えるだけでなく、日常的なマークアップの判断基準として使えるようになることが大切です。

3. HTMLアクセシビリティで重要な見出し構造

見出し構造は、HTML アクセシビリティの中でも特に重要です。ページ全体の内容がどのような構造で並んでいるのか、どの情報が上位でどの情報が下位なのかを示す役割があるからです。見出しが正しく使われていると、視覚的にも支援技術的にも、ページ全体の流れを把握しやすくなります。つまり、見出しは単に文字を大きくするためのものではなく、文書の階層を示すための HTML です。

また、見出し構造は SEO や可読性の面でも意味がありますが、アクセシビリティでは特に「どこに何があるか」を素早く把握するための手がかりとして重要です。ページが長いほど、見出しの役割は大きくなります。見出しがなければ、ユーザーは本文を順に読まないと全体像をつかみにくくなります。つまり、HTML アクセシビリティにおける見出しは、ナビゲーションの一部でもあります。

3.1 見出しレベルは階層として使う

h1 から h6 は、見た目の大小ではなく、情報の階層を表すために使うべきです。ページ全体のタイトルが h1、大きな章が h2、その下位項目が h3 というように、内容の関係に沿って使うと分かりやすくなります。必ずしも数字を一つずつ順番に使わなければならないというより、「どの見出しがどの見出しの下に属しているか」が伝わることが重要です。

<h1>採用情報</h1> <h2>募集職種</h2> <h3>フロントエンドエンジニア</h3> <h3>バックエンドエンジニア</h3> <h2>選考フロー</h2>

このように、情報のまとまりごとに自然な階層を作ると、ページの構造が理解しやすくなります。

3.2 太字の div を見出し代わりにしない

視覚的な見出しだけを作るために、div に大きなフォントや太字を当てることがあります。しかし、それでは支援技術にとって見出しとは認識されません。つまり、見た目では見出しに見えても、HTML 上は見出しになっていない状態が起こります。

そのため、見出しとして意味を持たせたいものは、必ず h1 から h6 を使ったほうがよいです。つまり、見出しのデザインは CSS で作れても、見出しの意味は HTML でしか作れません。

4. HTMLアクセシビリティにおけるランドマークとページ構造

ページ全体の大きな領域を分かりやすくするために、ランドマークとなる要素を適切に使うことも HTML アクセシビリティでは重要です。たとえば headernavmainfooteraside などは、ページの主要な領域を表すために使われます。これらを正しく使うことで、支援技術を使う人がページ内を移動しやすくなり、どこが主要な内容でどこが補助情報なのかが伝わりやすくなります。つまり、ランドマークはページ全体の地図を作るための HTML だと考えると分かりやすいです。

特に main は、そのページでいちばん重要な本文領域を示すために使われます。ナビゲーションやヘッダーやフッターとは区別して、何が中心コンテンツなのかを明確にしておくことは、アクセシビリティの面でもかなり意味があります。つまり、HTML アクセシビリティでは、文書の段落構造だけでなく、ページ全体の領域構造も整理しておく必要があります。

4.1 基本的なランドマーク構造の例

<header>  <h1>会社名</h1> </header> <nav aria-label="主要ナビゲーション">  <ul>    <li><a href="/about">会社情報</a></li>    <li><a href="/services">サービス</a></li>  </ul> </nav> <main>  <article>    <h2>記事タイトル</h2>    <p>本文...</p>  </article> </main> <footer>  <p>© Example Inc.</p> </footer>

このような構造にすると、ページの各領域がかなり分かりやすくなります。特に navaria-label を添えると、複数ナビゲーションがある場合でも目的を区別しやすくなります。

4.2 「主要コンテンツはどこか」を明確にする

長いページや複雑なレイアウトのページほど、「何が主要コンテンツなのか」が曖昧になることがあります。サイドバー、関連記事、おすすめ、広告、パンくずなどが多いページでは、中心内容がどこなのかを HTML で示しておく意味が大きいです。

そのため、main を適切に使い、その中に本当に重要な情報を置くことが大切です。つまり、HTML アクセシビリティではページの中心を見失わない構造づくりが重要です。

5. HTMLアクセシビリティにおけるリンクとボタンの使い分け

リンクとボタンは、見た目が似ていても役割が違います。リンクは別の場所へ移動するためのものであり、ボタンはその場で何かの処理を起こすためのものです。この違いを曖昧にすると、支援技術の利用者だけでなく、キーボード利用者や一般ユーザーにとっても分かりにくい UI になりやすいです。つまり、HTML アクセシビリティでは、リンクとボタンの役割を見た目ではなく HTML で正しく表現することが重要です。

また、リンク文言自体も重要です。「こちら」「詳しく」だけでは、リンクの一覧として見たときに何へ移動するのか分かりにくくなります。リンクは単独で読まれてもある程度意味が分かる文言のほうが望ましいです。つまり、リンクやボタンでは要素の選び方だけでなく、中に書くテキストもアクセシビリティに大きく関わります。

5.1 リンク文言は単独でも分かるようにする

<!-- やや分かりにくい --> <a href="/pricing">こちら</a> <!-- 分かりやすい --> <a href="/pricing">料金プランを見る</a>

後者のように、リンク先の目的がはっきりしているほうが理解しやすくなります。つまり、HTML アクセシビリティでは短さよりも意味の明確さを優先したほうがよいです。

5.2 移動はリンク、操作はボタン

<!-- ページ移動 --> <a href="/signup" class="btn">無料登録</a> <!-- 処理実行 --> <button type="button" class="btn" onclick="openModal()">詳しく見る</button>

このように、移動と操作を分けると、ユーザーの予測もしやすくなります。つまり、HTML の意味と UI の役割を一致させることが大切です。

6. HTMLアクセシビリティで重要な画像と alt 属性

画像のアクセシビリティでは、alt 属性が非常に重要です。ただし、すべての画像に同じような説明を書くのが正解ではありません。大切なのは、その画像がページの中でどんな役割を持っているかを考えることです。商品写真のように内容理解に必要な画像もあれば、単なる装飾として置かれている画像もあります。つまり、HTML アクセシビリティでは、画像の見た目ではなく「その画像が何を伝えているか」で alt を決める必要があります。

また、alt は長ければよいわけでもありません。画像の役割を短く適切に伝えることが大切です。不要に冗長な説明はかえって分かりにくくなりますし、装飾画像に意味のある alt を付けるとノイズになります。つまり、画像アクセシビリティでは「説明を足すこと」だけでなく、「説明しないことが適切な場合」もあると理解することが重要です。

6.1 情報を持つ画像の例

<img src="product-red-shoes.jpg" alt="赤いランニングシューズの側面写真">

このように、画像が内容理解に必要なら、その画像が伝えている情報を具体的に短く表します。

6.2 装飾画像の例

<img src="decoration-line.png" alt="">

装飾だけの画像なら空の alt にして、読み上げ対象から外すほうが自然です。つまり、すべての画像に意味を与える必要はありません。

7. HTMLアクセシビリティで特に重要なフォーム

フォームは、HTML アクセシビリティの中でも特に重要な領域です。入力欄に対して適切なラベルがないと、何を入力すればよいのかが分かりにくくなります。placeholder だけで済ませてしまうと、入力中に消えてしまったり、項目の目的が曖昧になったりしやすいです。つまり、フォームでは入力欄の役割を HTML 上で明確にすることが基本です。

また、フォームは単に入力欄が並んでいるだけでなく、関連する質問や選択肢をまとまりとして示すことも重要です。ラジオボタンやチェックボックスのグループには fieldsetlegend を使うと、まとまりとして理解しやすくなります。つまり、フォームアクセシビリティでは個々の要素だけでなく、グループ全体の意味も考える必要があります。

7.1 label を正しく関連付ける

<label for="email">メールアドレス</label> <input id="email" name="email" type="email">

このように、labelinput を関連付けておくと、入力項目の意味が明確になります。

7.2 関連する入力をグループ化する

<fieldset>  <legend>希望する連絡方法</legend>  <label>    <input type="radio" name="contact" value="email">    メール  </label>  <label>    <input type="radio" name="contact" value="phone">    電話  </label> </fieldset>

このようなグループ化は、選択肢のまとまりを分かりやすくします。つまり、フォームアクセシビリティでは「項目」と「まとまり」の両方が大切です。

8. HTMLアクセシビリティにおけるテーブルの使い方

テーブルは、本来は行と列の関係を持つデータを表すための要素です。そのため、レイアウト目的で使うと、支援技術に表として解釈されてしまい、かえって分かりにくくなることがあります。つまり、HTML アクセシビリティでは、テーブルは「表として意味があるデータ」にだけ使うべきです。

また、テーブルを使う場合も、見出しセルやキャプションを適切に使うとかなり理解しやすくなります。どの列が何を表しているか、どの行が何に対応しているかを HTML 上でも示しておくことで、表の意味が明確になります。つまり、テーブルは単に枠線付きのレイアウトではなく、関係性を伝えるための HTML です。

8.1 レイアウト用 table は避ける

<!-- 避けたい例 --> <table>  <tr>    <td>左カラム</td>    <td>右カラム</td>  </tr> </table>

このような使い方は、見た目は並べやすくても、アクセシビリティの面では適切ではありません。レイアウトは CSS で行うほうが自然です。

8.2 表データには見出しを付ける

<table>  <caption>料金プラン比較</caption>  <thead>    <tr>      <th scope="col">プラン</th>      <th scope="col">月額</th>      <th scope="col">ユーザー数</th>    </tr>  </thead>  <tbody>    <tr>      <th scope="row">Starter</th>      <td>1,200円</td>      <td>3人まで</td>    </tr>    <tr>      <th scope="row">Business</th>      <td>4,800円</td>      <td>10人まで</td>    </tr>  </tbody> </table>

このように captionth を適切に使うと、表の内容と関係性がかなり分かりやすくなります。

9. HTMLアクセシビリティと ARIA の関係

ARIA は、動的な UI や複雑なコンポーネントで HTML だけでは足りない情報を補うための仕組みです。ただし、ARIA は HTML の代わりではありません。まず意味のある HTML を使い、それでも不足する場合に補助として使うのが基本です。間違った ARIA は、ないより悪いこともあります。つまり、HTML アクセシビリティでは「まず HTML、それでも足りないときに ARIA」という順番を守ることが重要です。

たとえば、アイコンだけのボタンであれば aria-label が役立つことがありますし、複雑なタブやアコーディオンの状態表現では ARIA が必要になることがあります。しかし、普通のボタンやリンクや見出しまで何でも ARIA で置き換える必要はありません。つまり、ARIA は強力ですが、HTML の基礎が整っていてこそ意味があります。

9.1 ARIA が役立つ場面

<button type="button" aria-label="メニューを開く">  ☰ </button>

このように、見た目のテキストだけでは名前が伝わりにくい場合に ARIA で補うのは有効です。

9.2 まず HTML で解決する

普通の見出し、リンク、ボタン、フォームなどは、まず HTML で適切に書くべきです。ARIA は最後の補助として考えたほうが安定します。つまり、HTML アクセシビリティでは ARIA 知識より先に、HTML の意味を正しく使えることが大切です。

おわりに

HTML アクセシビリティとは、HTML の要素や属性を正しく使い、ページの意味や構造や操作対象を分かりやすくすることです。見出し、ランドマーク、リンク、ボタン、画像、フォーム、テーブルなど、どれも特別な技術ではありません。しかし、これらを適切に使うだけで、支援技術にも一般ユーザーにも分かりやすいページにかなり近づきます。つまり、アクセシビリティは最初から難しいものではなく、まずは HTML の基本を丁寧に使うことから始められます。

実務で大切なのは、後からまとめて直そうとするのではなく、最初から意味を持つマークアップを選ぶことです。その土台がしっかりしていれば、CSS や JavaScript や ARIA を足すときもかなり安定します。つまり、HTML アクセシビリティはチェックリストではなく、良い Web ページを作るための基本姿勢でもあります。

LINE Chat