We are ACORN!

プログラムやサーバーの設定など、技術的な記事を載せております。

HTMLコーディング プログラミング

HTMLの見出しタグの使い方

投稿日:2025-07-22 更新日:

HTMLでコーディングしていると見出しタグ(h1とかh2とか)をどのように付けようか迷うことがありませんか?
そんなときには文書構造を考えるようにしましょう。

h1タグ

HTML Living Standardではsectionタグ内でh1を使うことが許されています。sectionタグが複数あればh1タグも複数使っても問題なさそうに思えます。
ただ[MDN](https://developer.mozilla.org/ja/docs/Web/HTML/Element/Heading_Elements)には次のようにあります。

1つのページに複数のh1要素を使用することはHTML標準では認められていますが(入れ子でない限り)、これはよい習慣とはみなされません。

やはりページ内にひとつだけh1タグを用いる方が良いと言えます。

h1タグはページの見出し的な要素に付けるようにします。トップページならロゴや社名、LP(ランディングページ)なら一番目立たせたいキャッチコピーなどになるでしょうね。
下層ページなら、そのページのタイトル的な部分がh1になるでしょうか。

h2~h6タグ

先ほどのMDNのページにもありますが、

スクリーンリーダーの利用者にとって一般的なナビゲーション技法として、ページのコンテンツを判断するために、すばやく見出しから見出しへジャンプすることがあります。このため、見出しレベルを飛ばさないようにすることが重要です。

必ず、h1の次にはh2h2の次には同じレベルのh2か下位のレベルのh3が来る・・・のように文書の階層構造を意識する必要があります。

・h1(タイトル)
  ・h2(副見出し)
    ・内容
  ・h2(副見出し)
    ・h3(小見出し)
      ・内容

のような階層構造を意識しましょう。

また、見出しタグを内容のない部分に付けるのはふさわしくありません。
同じMDNのページには以下のように書かれています。

多くのスクリーンリーダーはページのすべての見出しの順序付きリストを生成し、利用者がコンテンツの階層構造を手早く特定することもできます。

つまり見出しがあるところにスクリーンリーダーはナビゲートします。
見出しタグの直後に何もなければ、ナビゲートされた直後に次の見出しが読まれることになり、利用者は混乱することになります。
(副見出しのすぐ後に小見出しが来ることは文書構造上問題ありません)

HTMLと文書構造

この見出しタグは、HTMLの階層構造とは全く異なる文書構造を作ることにも注意が必要です。

<section>
  <h2>副見出しです</h2>
  <div>
    <div>
      <div>
        <h2>小見出しのつもり</h2>
      </div>
    </div>
  </div>
</section>

このようなHTMLがあっても、二つのh2は同じレベルの見出しになります。
できる限りHTMLの階層構造と見出しレベルを同じにする努力を払ったほうが、コードを見た時に構造が分かりやすいとは思いますけどね。

終わりに

ともすればこういう文書構造は無視されがちです。
でもスクリーンリーダーを使っておられる方からすれば、守ってもらわないとページから必要な情報を得られないことになります。
どんな方にも読んでいただけるようなページを意識してコーディングしたいものですね。

-HTMLコーディング, プログラミング


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

Google Apps Script でWebAPIを作ろう

Google Apps Scriptを使うと簡単にWeb APIを作ることが出来ます。 準備 まず、Google Drive上からApps Scriptを作れるようにしましょう。 ドライブの左上の「新 …

【HTML5】 FormDataオブジェクトがログに出力されない(出力方法追記)

どうも仕様みたいですね。 どうやっても、無理でした。 隠ぺいされたオブジェクトっていうのも気持ち悪いですね。 それをajaxで送る、っていうのも気持ち悪い。 var fd = new FormData …

【PHP】 全角記号のときmb_strwidthが1を返す

PHPで全角の判断に、mb_strwidthを使っていました。 mb_strwidth == (mb_strlen*2) だったら全角文字、みたいな。 そうしたら、「◎」を入れたらうまくいかないとクラ …

WordPressのメインループ&サブループ

WordPressのテンプレートを作っていると、ループの構造で混乱してくる人がいます。 ですので、不要なHTMLを除いた、単純な構造を書いておこうと思います。 解説はコメントに書いています。 < …

【PHP】ビルトインウェブサーバーで楽々テスト環境

teratailで質問に答えるようになったら、以外にサーバー立てずにテストして、ローカル制限に引っかかっている人が多いので、簡単に立てられるローカルサーバーの構築方法を書いておこうと思います。 まず、 …