3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【実務メモ】<section> に aria-label ではなく aria-labelledby を使う理由

Last updated at Posted at 2025-03-25

最近、HTMLのアクセシビリティ対応を見直している中で、

要素に aria-labelledby を使う書き方に触れる機会がありました。
<section aria-labelledby="service-heading">
  <h2 id="service-heading">サービス</h2>
  ...
</section>

この構文、一見まわりくどいように感じるんですが、ちゃんと理由があります。

aria-label ではダメなのか?

たとえばこう書いた場合:

<section aria-label="サービス">
  <h2>サービス</h2>
  ...
</section>

ぱっと見はこっちのほうがシンプルに見えます。
でも実務で考えると、ラベルと見出しの2箇所を管理することになるので、変更があったときに片方だけ直し忘れるリスクがあります。

aria-labelledby のほうがいい理由

メンテナンス性が高い
→ 見出しテキストを1か所変えれば、スクリーンリーダーの読み上げも自動で変わる。

情報の一貫性が担保できる
→ 開発者の意図とスクリーンリーダーに伝わる内容が一致する。

セマンティクスがはっきりする
→ 見出しの要素とラベルの要素が明確につながるので、アクセシビリティツールでもセクションの意味を正確に捉えられる。

実際の現場での使い分け指針

状況 選ぶ属性
セクションに見出し(h2など)がある aria-labelledby を使う
見出しを表示したくない、
もしくは見た目だけの装飾で意味を持たせたい
aria-label を使う

結論:命名の一元化と可読性の両立を意識する

案件をやっていると「これ、あとで文言変わるかも」と思うことって多いですよね。
そういうときに aria-label で書いてしまうと、見た目とスクリーンリーダーで読まれる内容がずれて、修正漏れやバグの温床になります。

なので、自分は今後、以下のルールで書いていくつもりです。

  • 基本は aria-labelledby を使って、見出しと役割を紐づける

  • 見出しを出したくないときだけ aria-label を使う

今までは「アクセシビリティ対応=altつけること」くらいの認識でやっていた部分もあったので、
こうした細かい部分からも品質を上げていけるように意識していきたいです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?