基礎

HTML5セマンティック要素入門|意味のあるマークアップで構造化する

HTML5 セマンティック アクセシビリティ

HTML5セマンティック要素入門
意味のあるマークアップで構造化する

HTML5のセマンティック要素を使って、意味のある構造化されたWebページを作る方法を解説。SEOとアクセシビリティにも効果的です。

こんな人向けの記事です

  • HTMLのセマンティック要素を正しく使いたい
  • divの代わりに適切な要素を選びたい
  • SEOやアクセシビリティを改善したい

Step 1セマンティックHTMLとは

セマンティック(semantic)とは「意味のある」という意味です。セマンティックHTMLとは、ページの構造や内容の意味をタグ自体で表現するマークアップ方法です。

従来は <div><span> で何でも囲んでいましたが、これではブラウザや検索エンジンが「その部分が何なのか」を理解できません。HTML5で導入されたセマンティック要素を使うことで、構造に意味を持たせることができます。

<!-- 非セマンティック -->
<div class="header">...</div>
<div class="nav">...</div>
<div class="content">...</div>
<div class="footer">...</div>

<!-- セマンティック -->
<header>...</header>
<nav>...</nav>
<main>...</main>
<footer>...</footer>
HTML
<!-- 非セマンティック(意味がない) -->
<div class="header">...</div>
<div class="nav">...</div>
<div class="content">...</div>
<div class="footer">...</div>

<!-- セマンティック(意味がある) -->
<header>...</header>
<nav>...</nav>
<main>...</main>
<footer>...</footer>

セマンティック要素を使うメリットは大きく3つあります:

  • 検索エンジン(SEO) — Googleなどがページ構造を正確に理解できる
  • アクセシビリティ — スクリーンリーダーが適切にナビゲーションできる
  • メンテナンス性 — コードを読むだけで構造がわかる
divは悪ではない

<div> 自体が悪いわけではありません。レイアウトやスタイル目的で使うのは問題ありません。ただし、ページの構造的な意味がある場所には、適切なセマンティック要素を使いましょう。

Step 2header, nav, main, footer

ページ全体の構造を表す4つの基本要素です。これらを組み合わせることで、ページのレイアウト構造を意味的に表現できます。

header — サイトのタイトル・ロゴ
nav — ホーム | 記事一覧 | お問い合わせ
main — ページのメインコンテンツ
ページに1つだけ配置する。主要なコンテンツを囲む。
footer — © 2026 サイト名
HTML
<header>
  <h1>サイトのタイトル・ロゴ</h1>
</header>

<nav>
  <ul>
    <li><a href="/">ホーム</a></li>
    <li><a href="/articles">記事一覧</a></li>
    <li><a href="/contact">お問い合わせ</a></li>
  </ul>
</nav>

<main>
  <h2>ページのメインコンテンツ</h2>
  <p>ページに1つだけ配置する。主要なコンテンツを囲む。</p>
</main>

<footer>
  <p>&copy; 2026 サイト名</p>
</footer>

それぞれの要素の役割を整理します:

  • <header> — ページやセクションのヘッダー。ロゴ、タイトル、ナビゲーションなどを含む
  • <nav> — ナビゲーションリンクのまとまり。メインメニュー、パンくずリストなど
  • <main> — ページの主要コンテンツ。1ページに1つだけ使用する
  • <footer> — ページやセクションのフッター。著作権表示、連絡先情報など
mainは1ページに1つだけ

<main> 要素は1つのページに1回だけ使えます。また、<article><aside><header><footer><nav> の子要素にはできません。

Step 3article, section, aside

コンテンツの論理的なグループ分けに使う要素です。これらを正しく使い分けることで、ページの内容構造が明確になります。

article
ブログ記事タイトル
2026年2月18日
section
第1章の内容...
section
第2章の内容...
aside
関連記事
  • 記事A
  • 記事B
HTML
<main>
  <article>
    <h2>ブログ記事タイトル</h2>
    <time datetime="2026-02-18">2026年2月18日</time>

    <section>
      <h3>第1章</h3>
      <p>第1章の内容...</p>
    </section>

    <section>
      <h3>第2章</h3>
      <p>第2章の内容...</p>
    </section>
  </article>

  <aside>
    <h3>関連記事</h3>
    <ul>
      <li>記事A</li>
      <li>記事B</li>
    </ul>
  </aside>
</main>

使い分けのポイント:

  • <article>独立して完結するコンテンツ。ブログ記事、ニュース記事、コメントなど。RSSフィードで配信しても意味が通じるかが判断基準
  • <section>テーマ的にまとまったグループ。通常は見出しを伴う。章、タブパネルなど
  • <aside>主要コンテンツに関連するが独立した情報。サイドバー、補足説明、広告など
articleの中にarticleを入れてもOK

ブログ記事(<article>)の中にコメント(<article>)をネストすることも仕様上有効です。それぞれが独立したコンテンツであれば問題ありません。

Step 4figure, figcaption

<figure> は画像、図表、コードブロックなどの「参照される独立したコンテンツ」を囲む要素です。<figcaption> でキャプション(説明文)をつけることができます。

画像の表示エリア
図1: セマンティック要素の関係図
HTML
<figure>
  <img src="semantic-structure.png"
       alt="セマンティック要素の関係図">
  <figcaption>図1: セマンティック要素の関係図</figcaption>
</figure>

<!-- コードブロックにも使える -->
<figure>
  <pre><code>const greeting = "Hello";</code></pre>
  <figcaption>リスト1: JavaScriptの変数宣言</figcaption>
</figure>

<!-- 複数画像のギャラリーにも -->
<figure>
  <img src="photo1.jpg" alt="写真1">
  <img src="photo2.jpg" alt="写真2">
  <figcaption>2026年のイベント写真</figcaption>
</figure>

<figure> のポイント:

  • 本文から参照される独立したコンテンツに使う(「図1を参照」のように)
  • 画像だけでなく、コード例、引用、表など何でも囲める
  • <figcaption><figure> の最初か最後の子要素として配置する
  • 単なる装飾画像には使わない(装飾は <img> や CSS で対応)
figcaptionとalt属性の違い

alt 属性は画像が表示できないときの代替テキストです。<figcaption> は画像の説明やキャプションで、画像と一緒に表示されます。両方とも設定するのが推奨です。

Step 5details, summary

<details><summary> は、JavaScriptなしで開閉できるアコーディオンを作れる要素です。FAQ、補足情報、長いコード例の折りたたみに便利です。

セマンティック要素は何種類ある?
HTML5では約30種類のセマンティック要素が定義されています。代表的なものとして header, nav, main, footer, article, section, aside, figure, details などがあります。
古いブラウザでも使える?
主要なモダンブラウザ(Chrome, Firefox, Safari, Edge)では完全にサポートされています。IE11では details/summary が未対応ですが、ポリフィルで対応可能です。
open属性で最初から開いた状態にできる
この項目は <details open> を使っているため、最初から開いた状態で表示されています。
HTML
<!-- 基本的な使い方 -->
<details>
  <summary>セマンティック要素は何種類ある?</summary>
  <p>HTML5では約30種類のセマンティック要素が
  定義されています。代表的なものとして header,
  nav, main, footer, article, section, aside,
  figure, details などがあります。</p>
</details>

<details>
  <summary>古いブラウザでも使える?</summary>
  <p>主要なモダンブラウザでは完全にサポート
  されています。IE11では details/summary が
  未対応ですが、ポリフィルで対応可能です。</p>
</details>

<!-- open属性で最初から開く -->
<details open>
  <summary>open属性で最初から開いた状態にできる</summary>
  <p>この項目は最初から開いた状態で表示されます。</p>
</details>

<details> / <summary> の特徴:

  • JavaScriptが不要 — ブラウザのネイティブ機能で開閉できる
  • open 属性を付けると最初から開いた状態になる
  • FAQ、用語集、トラブルシューティングなどに最適
  • <summary> がないと、ブラウザがデフォルトで「詳細」と表示する
summaryは最初の子要素に

<summary><details>最初の子要素として配置してください。それ以外の位置に置くと、ブラウザの挙動が不安定になることがあります。

Step 6SEOとアクセシビリティへの効果

セマンティック要素を正しく使うことで、SEO(検索エンジン最適化)とアクセシビリティの両方が向上します。

SEOへの効果

検索エンジンのクローラーは、セマンティック要素をもとにページ構造を理解します。

検索エンジンが理解する構造
<nav> → ナビゲーションリンク(サイトリンクとして表示される可能性)
<main> → メインコンテンツ(インデックスの優先対象)
<article> → 独立記事(リッチスニペット候補)
<aside> → 補足情報(ランキングへの影響が低い)
divだけだと...
すべて同じ「コンテナ」として扱われ、構造の意味が伝わらない
HTML
<!-- SEO最適化されたページ構造 -->
<header>
  <h1>サイト名</h1>
  <nav aria-label="メインメニュー">
    <ul>
      <li><a href="/">ホーム</a></li>
      <li><a href="/blog">ブログ</a></li>
    </ul>
  </nav>
</header>

<main>
  <article>
    <h2>記事タイトル</h2>
    <time datetime="2026-02-18">2026年2月18日</time>
    <section>
      <h3>セクション見出し</h3>
      <p>本文...</p>
    </section>
  </article>

  <aside aria-label="関連情報">
    <h3>関連記事</h3>
    <ul>...</ul>
  </aside>
</main>

<footer>
  <p>&copy; 2026 サイト名</p>
</footer>

アクセシビリティへの効果

セマンティック要素は、ARIA(Accessible Rich Internet Applications)のランドマークロールに自動的にマッピングされます。

セマンティック要素 ARIAロール スクリーンリーダーの挙動
<header> banner 「バナー」として認識。ページ先頭にジャンプできる
<nav> navigation 「ナビゲーション」として一覧表示・ジャンプできる
<main> main ショートカットキーで直接ジャンプできる
<aside> complementary 「補足情報」として認識される
<footer> contentinfo 「コンテンツ情報」として認識される
aria-labelで複数のnavを区別する

ページに複数の <nav> がある場合、aria-label を付けてスクリーンリーダーが区別できるようにしましょう。例: <nav aria-label="メインメニュー"><nav aria-label="パンくずリスト">

セマンティック要素の選び方フローチャート

迷ったときは以下のフローチャートで判断しましょう:

  1. そのコンテンツは独立して意味を持つか? → <article>
  2. テーマ的なまとまりがあるか? → <section>
  3. 主要コンテンツの補足情報か? → <aside>
  4. ナビゲーションリンクの集まりか? → <nav>
  5. 上記に当てはまらない → <div>(スタイル目的のコンテナ)

まとめ

  • セマンティックHTMLは「意味のあるタグ」でページ構造を表現する方法
  • <header> / <nav> / <main> / <footer> でページ全体の構造を定義する
  • <article>(独立コンテンツ)、<section>(テーマのまとまり)、<aside>(補足情報)でコンテンツを分類する
  • <figure> + <figcaption> で画像やコードにキャプションを付ける
  • <details> + <summary> でJavaScript不要のアコーディオンを作れる
  • セマンティック要素はSEO・アクセシビリティ・コードの可読性すべてに貢献する
  • 迷ったら「この部分が何なのか」を考え、意味に合った要素を選ぶ。該当しなければ <div>