BeAct Co., Ltd.

BLOG
社員ブログ

これからのWeb開発に必須!「HTMLのセマンティクス」とは?

こんにちは! みなさん、今日もコーディングを楽しんでいますか?

最近、「セマンティクスを意識したマークアップが重要」という話を聞くことが増えていませんか? でも、「そもそもセマンティクスって何?」「自分の書くHTMLに関係あるの?」と思う方もいるかもしれません。

結論から言うと、セマンティクスを意識すると、コードが「伝わりやすく」なり、開発しやすくなる んです。

こんかいは、HTMLのセマンティクスの基本と、実際の使い方を、いっしょに学んでゆきましょう!

※注記

本記事では rolearia-* 属性については扱いません。これらは別の機会に解説します。


セマンティクス is 何

セマンティクスとは、ある文書を評価する際、「文字や記号がどの順番に並んでいるか」ではなく、「それが伝える意味はなにか」に焦点を当てる考え方です。対照的に、文字や記号の並びに注目するものは「シンタックス」と呼ばれます。

料理のレシピを例にすると、「どの手順で何をするか」がシンタックス、「どんな料理になるのか」がセマンティクスです。

一般的な文書における「セマンティクス」

文書の「アウトライン」と「セクション」

文書が長くなると、序論、本論、結論といった「話の流れ」を明確にしないと、読みにくくなります。そのため、見出しや段落で文書を構造化する必要があります。これを「文書の論理構造」と呼び、最終的に左図のような、幹から枝葉を伸ばしたような木構造を形成します。


この木構造全体を「アウトライン」、木の各枝葉を「セクション」と呼びます。ワープロソフトの「アウトライン表示」をイメージするとわかりやすいでしょう。

こうした、一般的な文書における「セマンティクス」は、文書のアウトラインにおけるセクションを明示するための、見出し段落が相当します。

HTML文書における「セマンティクス」

HTML 文書には、「そのタグで囲った部分はセクションとして扱う」や「セクション内の特定のタグは見出しとして扱う」といった、暗黙的な論理構造を持つタグが存在します。通常、HTML のセマンティクスはこうしたタグを使って構成されます

例として、次の2つのコードを比べてみましょう。

❌ NG(セマンティクスのないHTML)

<div class="header">サイトのタイトル</div>
<div class="menu">メニュー</div>
<div class="content">記事の本文</div>

見た目は問題なくても、<div>というタグは「意味づけ」を持たない=セマンティクスが存在しないため、これでは「このHTMLのどこがタイトルで、どこが本文なのか」がコード上で伝わりません。

✅ OK(セマンティクスのあるHTML)

<header>サイトのタイトル</header>
<nav>メニュー</nav>
<main>記事の本文</main>

「意味づけ」を持つタグを適切に使うだけで、コードの意味が明確になりました! これが 「HTMLのセマンティクスを意識する」 ということです。

なぜセマンティクスが重要なのか?

HTML 文書のセマンティクスを適切に構成すべき理由は、以下が挙げられます。

コードの見通しを良くする

適切にセマンティクスが構成された HTML 文書は、それ自体が「自己説明的」になり、見通しが格段に向上します。これは、今の自分以外の開発者のコードの理解にも寄与します。

たとえば、1年前のあなたが書いたコードを見直すときでも、セマンティクスを意識したコードなら、スムースに理解できることでしょう!

Webサイトのバリアフリー化

それ以上に HTML のセマンティクスが注目されている理由は、Webサイトのバリアフリー化です。セマンティクスが適切に構成された Web サイトは、視覚や運動に障害がある方でも、スクリーンリーダー等の支援技術を使って問題なく利用できます。

バリアフリーか? SEOか?

しかし最近、HTML のセマンティクスが注目されている背景には、もう一つの理由があります。それは、Google などの検索エンジンが、バリアフリーに配慮された(role属性やaria-*属性などもふんだんに使った)ページの評価を高くするような基準を採用していることです。このため、 SEO 対策としてセマンティクスを意識する Web サイトが増えています。

ここで考えてみてください。「検索順位を上げるためにバリアフリー化する」という行為は、本当に健全でしょうか? バリアフリー化の目的は、すべての人が平等に Web 技術を利用できるようにすることです。不適切なセマンティクスの導入で、逆に障害者が使いにくいサイトになることは、避けるべきでしょう。

MDN でも「WAI-ARIA は必要な場合のみ使用する」ことが推奨されています。HTML のセマンティクスは、バリアフリーの実現や、開発者間でのコード保守のために活用されるべきです。

実践! HTMLのセマンティクスタグ

「HTMLのセマンティクスを意識する」といっても、すべてのタグを暗記する必要はありません。まずは よく使う基本のタグ を覚えましょう!


セクション化要素(文書を区切るタグ)

セクション化要素 (sectioning content elements) とは、「開始タグと終了タグで囲うことで、特定のセマンティクスを持つセクション(アウトラインの構成要素)であると示すもの」のことです。

なお、HTMLにおけるセクションは、後述する<header>や<footer>を受け入れる単位でもあります。後の混乱を避けるため、このことは今のうちに覚えておきましょう

タグ通称役割
<body>文書本体要素ページ全体の「ルートセクション」、すなわちHTMLボディ
<article>記事要素独立した記事やトピック。見出しコンテンツを内部に置くことを強く推奨
<nav>誘導要素ナビゲーションエリア。いわゆるリンク集
<aside>余談要素本文の流れとは関係のない、読み手の興味を引くための補足情報。すなわち余談

余談は本文の流れを一度断ち切るため、多用するとアウトラインの「ノイズ」になってしまいます(特に「音声読み上げ機能」でサイトを閲覧している人にとっては)。1セクション内に1つ、のように、控えめに使うことをオススメします。
<section>汎用セクション要素上記のどれにも当てはまらない、汎用セクション。見出しコンテンツを内部に置くことを強く推奨

例: 記事要素の構造

<article>
  <header><h2>記事タイトル</h2></header>
  <section><p>本文</p></section>
  <footer><p>著者情報</p></footer>
</article>

セクションのヘッダー・フッターコンテンツ要素

最も近い祖先セクションに対して作用しながらも、文書全体のアウトラインには影響を及ぼさないタグのことです。自身ではセマンティクスを持たない代わり、その内容のセマンティクスを提供します。

ただし、最も近い祖先セクションルートセクションだった場合には、セマンティクスを持ち、アウトラインに影響を及ぼす可能性があります(具体的な挙動の説明は割愛します)。これは歴史的経緯によるものです。

タグ通称役割
<header>導入要素そのセクションの導入部分。
通常、見出しコンテンツが子要素に置かれるが、義務ではない
<footer>脚注要素そのセクションの脚注部分。
<p>タグの他:
  • 連絡先セマンティクスを持つ<address>タグ
  • 日時セマンティクスを持つ<time>タグ
  • 付随コメントセマンティクスを持つ<small>タグ
を子要素として持つ例が多い。

例: 汎用セクション要素のヘッダーとフッターの構造

<section>
  <header><h2>セクションの見出し</h2></header>
  <section><p>本文</p></section>
  <footer><p>脚注</p></footer>
</section>

見出し要素

任意のセクションの子要素とすることで、そのセクションの「見出し」セマンティクスを持たせるタグのことです。

タグ通称役割
<h1><h6>見出し要素そのセクションの見出し。1~6まで存在する。
ただし<h1>だけは、「ルートセクション (<body>) に対する見出し」という慣例上、1つのHTMLページにつき1つだけ、が強く求められる。
<hgroup>見出しグループ化要素見出しと副題をまとめる。子要素には、<h*><p>以外認められない。
このタグ自身は、アウトラインを作らない。

例: 記事要素の見出しグループ化要素の構造

<article>
  <header>
    <hgroup>
      <!-- 見出し -->
      <h2>スター・ウォーズ</h2>
      <!-- 副見出し -->
      <p>帝国の逆襲</p>
    </hgroup>
    <!-- 見出しではない導入 -->
    <p>公開中</p>
  </header>
  <section><p>本文</p></section>
  <footer><time>公開日付</time></footer>
</article>

その他の基本的な要素

以下のタグはアウトラインを構成しません(=それ自体はセクションを作りません)が、特別なセマンティクスを持ちます。

タグ通称役割
<main>主要コンテンツ要素スクリーンリーダーなどの支援技術に対し、「ここから本文」と示す。
「スキップナビゲーション」参照
<address>連絡先要素そのセクションの内容に対する「連絡先」。例:
  • 名前や店名、団体名など(強く推奨される)
  • 住所
  • 電話番号
  • メールアドレス
  • SNSアカウント
  • 緯度・経度
<search>一般検索要素検索UIエリア

例: <main>で「スキップナビゲーション」を実装する

<body>
  <a href="#main">本文へ</a>
  <header>
    <nav>
      <!-- たくさんのリンク…… -->
    </nav>
  </header>
  <main id="main">
    <h1>サイトのメインコンテンツ</h1>
    <p>...</p>
  </main>
</body>

よくある質問(FAQ)

……以上、文書のアウトラインに関わるセマンティクスを持つ、基本的なタグを学習してきましたが、それでも「意外と多いなぁ」と思う方もいらっしゃるかもしれませんね。そんな方々へのFAQをご案内します。

Q. これまで divspan だけで書いていたけど、全部書き直さなきゃダメ?

A. いいえ! まずは新しく書くHTMLからセマンティクスを意識すればOKです。少しずつ改善していきましょう。

Q. <section><div> の違いは?

A. <section>「意味のあるまとまり」 を作るときに使います。見た目だけを調整することが目的なら、<div> を使いましょう。

Q. <h1> は1ページに1つだけ?

A. 本記事の執筆時点でのHTML仕様では、「各セクションごとに <h1> を使ってOK」 です。ただし、「1ページに1つだけであること」は、強く求められています。ページ全体の見出し構造を意識して使いましょう。

Q. 最初は何から使えばいい?

A. header nav main footerから使ってみましょう!

<body>
  <header>
    <h1>サイトのタイトル</h1>
  </header>
  <nav>
    <ul>
      <li><a href="#">ホーム</a></li>
      <li><a href="#">記事一覧</a></li>
    </ul>
  </nav>
  <main>
    <h2>記事タイトル</h2>
    <p>本文の内容...</p>
  </main>
  <footer>
    <p>© 2025 My Website</p>
  </footer>
</body>

これだけで、セマンティクスで意味づけされたHTML文書のできあがりです! 少しずつ慣れていきましょう!

まとめ

HTMLのセマンティクスを意識することは確かに大事ですが、今までセマンティクスを意識せずに運営してきたサイトに対して、急に対応するというのは無理な話です。まずは、「今すぐできること」から始めてみましょう!

  • 新しく書くHTMLから、セマンティクスを意識してみる
  • 既存のコードを少しずつ修正していく
  • 対象のサイトが「分かりやすいHTML」になっているか確認

こんかいのお話は、以上です。それでは、よきコーディングライフを!