HTML5セマンティックタグ完全ガイド:実例付き

セマンティックHTMLが、人と機械にとってのページ構造をどう明確にするか。アクセシビリティが向上する場面と、検索順位の近道ではない理由を解説します。

HTML5より前のWebは、.header、.sidebar、.footerといったCSSクラスを付けたdivとspanだらけでした。検索ロボットもスクリーンリーダーも、どの部分が何なのかを推測するしかありませんでした。そこでHTML5が導入したのがセマンティックタグです。CSSとは無関係に、要素自体が意味を持ちます。<article>タグは独立したコンテンツ、<nav>タグはナビゲーション、<aside>タグは本文に関連する補足コンテンツを表します。補足コンテンツは、なくても本文の理解には影響しません。

セマンティクスとスタイリングは別物です。セマンティックタグが示すのは文書内での要素の役割であり、見た目ではありません。見た目はCSSの仕事です。スタイルがなければ<section>と<div>は見分けがつきません。違いは、<div>についてはわからないことが、<section>についてはブラウザーと検索エンジンにわかる点です。

ページ構造のタグ

HTML5では、ページの大きな領域をマークアップするためのタグが追加されました。これらがブラウザー、検索エンジン、支援技術がCSSを読まずにたどれる文書の骨格になります。

HTML5のセマンティックなページ構造の図
<header>
最も近いセクショニングコンテキスト(ページまたはセクション)の導入部分です。ページ単位では、ロゴ、ナビゲーション、検索を含むサイトヘッダーになります。<article>の中では、タイトル、メタデータ、著者を置きます。別のセクションに属していれば、1ページに複数の<header>があっても問題ありません。
<nav>
ナビゲーション用リンクのまとまりです。リンクの集まりすべてが<nav>になるわけではありません。対象は主要な導線だけで、メインメニュー、パンくずリスト、ページネーションなどです。フッターのプライバシーポリシーへのリンクは<nav>にしません。スクリーンリーダーは、キーボードショートカットでナビゲーションへ移動するために<nav>を使います。
<main>
ページ固有のメインコンテンツです。1つの文書に<main>は1つだけです。<main>の中身は他のページで繰り返さないようにします(ヘッダー、フッター、サイドバーは繰り返されるため<main>の外に置きます)。スクリーンリーダーは、キーボードショートカットで<main>へ直接移動します。
<footer>
最も近いセクショニングコンテキストの末尾部分です。ページ単位では、連絡先、著作権表示、リンクを置きます。<article>の中では、著者情報、タグ、最終更新日を置きます。<header>と同様に、複数のセクションに置けます。
<article>
それだけで完結し、単独で配信できるコンテンツです。ブログ記事、ニュース記事、フォーラムの投稿、商品カード、コメントなどが該当します。判断の基準は、<article>を文脈から切り離して単独で公開しても意味が通じるかどうかです。通じるなら<article>です。
<section>
より具体的なタグがない、テーマのまとまりを持つ文書の一部です。必ず見出し(<h2>〜<h6>)を付けます。見出しがなければ、<div>が適切な場合がほとんどです。<section>をスタイル用の<div>の代わりに使うのは避けます。
<aside>
本文と間接的に関連するコンテンツです。補足ボックス、サイドバー、広告枠、著者プロフィール、関連記事などが該当します。<article>の中では、本文の理解に欠かせない内容ではない注記や引用に使います。ページ単位では、サイド列になります。

あらゆるページの基本的な骨格は次のとおりです。これだけで、すでにセマンティクスとして正しいマークアップになっています。

html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Page title</title>
</head>
<body>

  <header>
    <a href="/"><img src="logo.svg" alt="Company name"></a>
    <nav aria-label="Main navigation">
      <ul>
        <li><a href="/blog">Blog</a></li>
        <li><a href="/services">Services</a></li>
        <li><a href="/contacts">Contacts</a></li>
      </ul>
    </nav>
  </header>

  <main>
    <!-- Unique page content -->
  </main>

  <footer>
    <p>&copy; 2026 Company name</p>
    <nav aria-label="Secondary navigation">
      <a href="/privacy">Privacy</a>
      <a href="/sitemap">Sitemap</a>
    </nav>
  </footer>

</body>
</html>

コンテンツのタグ:article、section、h1〜h6、p

ページ構造のタグはページの領域を決めます。コンテンツのタグは、中身の性質を表します。ここでは、どのブログページにも見られる組み合わせを見ていきます。

html
<!-- Blog post page -->
<main>

  <article>
    <header>
      <h1>How to choose the right HTML tag</h1>
      <p>Published: <time datetime="2026-05-22">22 May 2026</time></p>
      <address>
        By: <a rel="author" href="/authors/pavlo">seohead</a>
      </address>
    </header>

    <section>
      <h2>Why semantics matters</h2>
      <p>Section text...</p>
    </section>

    <section>
      <h2>Main tags</h2>
      <p>Section text...</p>

      <aside>
        <p>Note: the HTML Living Standard is continuously updated.</p>
      </aside>
    </section>

    <footer>
      <p>Tags: <a href="/tags/html">#html</a>, <a href="/tags/seo">#seo</a></p>
    </footer>
  </article>

  <!-- Related articles -->
  <aside aria-label="Related articles">
    <h2>Also read</h2>
    <ul>
      <li><a href="/blog/heading-structure">Heading structure</a></li>
      <li><a href="/blog/schema-org-json-ld">Schema.org markup</a></li>
    </ul>
  </aside>

</main>
注意:<article>内の<header>と<footer>は、ページ単位の<header>と<footer>とは別物です。それぞれ独立したセクショニングコンテキストになります。検索ロボットはこの違いを理解しており、タイトル、日付、著者をサイト全体ではなく、その記事に正しく関連付けます。

sectionとdivの使い分け

ルールは単純です。ブロックに意味のある名前を付けられるなら<section>、スタイル用やJavaScriptのフックとして存在するだけなら<div>を使います。

html
<!-- CORRECT: section with a heading -->
<section>
  <h2>Product benefits</h2>
  <ul>
    <li>Fast delivery</li>
    <li>2-year warranty</li>
  </ul>
</section>

<!-- CORRECT: div for styling -->
<div class="cards-grid">
  <article>...</article>
  <article>...</article>
  <article>...</article>
</div>

<!-- WRONG: section with no heading -->
<section class="cards-grid">
  <article>...</article>
</section>

<!-- WRONG: div where content has meaning -->
<div id="about">
  <!-- The About section — this should be <section> -->
  <h2>About us</h2>
  <p>...</p>
</div>

メディア、データ、ユーティリティのタグ

HTML5では特定のデータ型向けのタグも追加されました。Schema.orgのマークアップがなくても、検索エンジンに追加のシグナルを渡せます。

<figure>と<figcaption>

キャプション付きの独立したメディアコンテンツです。画像、図、表、コードスニペットなど、本文に関連し、意味を損なわずに移動したり付録に回したりできるものに使います。<figcaption>は<figure>の正式なキャプションです。Googleは画像を解析する際、<figcaption>を補足的な画像の説明として利用します。

<time>

機械が読み取れる日付や時刻です。ISO 8601形式のdatetime属性を使うと、ユーザーへの表示形式に関係なく、検索エンジンが公開日やイベント日を正確に判断できます。Googleは、Articleの構造化データで記事の日付に<time>を使うことを明確に推奨しています。

<address>

最も近い<article>、または文書全体の連絡先情報です。<article>の中では、著者の連絡先になります。ページ単位では、組織の連絡先情報です。著者や組織の連絡先という文脈以外の住所に、<address>は使いません。

<details>と<summary>

JavaScriptなしで動くネイティブの開閉ウィジェットです。<summary>が見出しとして常に表示され、<details>に隠す内容を入れます。開閉はブラウザーが自動で処理します。検索エンジンは、閉じた状態でも<details>の中身をインデックスに登録します。FAQやネタバレの表示にも向いています。

<mark>

現在の文脈で関連性のあるテキストを強調します。たとえば、検索結果や引用中のキーワードです。<strong>(重要性)や<em>(強調)と混同しないでください。<mark>が表すのは「関連があるとして目印を付けた」ことで、「重要」でも「装飾のためのスタイル」でもありません。

<data>と<output>

<data value="42">Forty-two</data>は、人が読むテキストを機械が読み取れる値に結び付けます。<output>は、計算やユーザー操作の結果を表します。どちらもコンテンツサイトではあまり使われませんが、フォームや計算機のあるWebアプリでは欠かせません。

キャプション付き<figure>タグのマークアップ例です。
html
<!-- figure + figcaption for an image -->
<figure>
  <img
    src="/images/html5-structure.webp"
    alt="Diagram of the semantic structure of an HTML5 page"
    width="800" height="450"
  >
  <figcaption>Fig. 1 — Typical semantic structure of an HTML5 document</figcaption>
</figure>

<!-- figure + figcaption for code -->
<figure>
  <pre><code class="language-html">&lt;article&gt;...&lt;/article&gt;</code></pre>
  <figcaption>Example: minimal article markup</figcaption>
</figure>

<!-- time with datetime attribute -->
<p>
  Article updated:
  <time datetime="2026-05-22T10:30:00+03:00">22 May 2026</time>
</p>

<!-- details + summary (FAQ without JS) -->
<details>
  <summary>What is semantic HTML?</summary>
  <p>Markup where each tag conveys the meaning of the content,
     not just its visual appearance.</p>
</details>

<!-- mark for search highlighting -->
<p>Results for "<mark>semantic tags</mark>" — 42 articles</p>

ネストと組み合わせ:実際の例

HTML5のセマンティクスが力を発揮するのは、個々のタグではなく、正しい組み合わせです。代表的なページ構成を順に見ていきます。

ブログ一覧ページ

html
<main>
  <header>
    <h1>SEO blog</h1>
    <p>Practical articles on website promotion</p>
  </header>

  <!-- Article list — each card is an article -->
  <section aria-label="Article list">
    <article>
      <header>
        <h2><a href="/blog/semantic-html5">HTML5 semantic tags</a></h2>
        <p>
          <time datetime="2026-05-22">22 May 2026</time>
          · <span>18 min read</span>
        </p>
      </header>
      <p>HTML5 semantic tags are the foundation of correct page markup...</p>
      <footer>
        <a href="/blog/semantic-html5">Read more</a>
      </footer>
    </article>

    <article>
      <header>
        <h2><a href="/blog/heading-structure">Heading structure</a></h2>
        <p>
          <time datetime="2026-04-10">10 April 2026</time>
          · <span>12 min read</span>
        </p>
      </header>
      <p>One H1 per page. H2 divides content into sections...</p>
      <footer>
        <a href="/blog/heading-structure">Read more</a>
      </footer>
    </article>
  </section>

  <!-- Pagination -->
  <nav aria-label="Pagination">
    <a href="?page=1" aria-current="page">1</a>
    <a href="?page=2">2</a>
    <a href="?page=3">3</a>
  </nav>
</main>

レビュー付きの商品カード

html
<main>
  <article itemscope itemtype="https://schema.org/Product">

    <!-- Product main area -->
    <header>
      <h1 itemprop="name">SoundMax Pro Wireless Headphones</h1>
      <p itemprop="description">40 hours of battery life, active noise cancellation...</p>
    </header>

    <!-- Product image -->
    <figure>
      <img
        src="/products/soundmax-pro.webp"
        alt="SoundMax Pro wireless headphones — front view"
        itemprop="image"
        width="600" height="600"
      >
      <figcaption>SoundMax Pro in three colours: black, white, blue</figcaption>
    </figure>

    <!-- Price -->
    <section aria-label="Price and purchase">
      <p>
        <data value="129" itemprop="price">$129</data>
      </p>
      <button type="button">Add to cart</button>
    </section>

    <!-- Specs -->
    <section>
      <h2>Specifications</h2>
      <dl>
        <dt>Battery life</dt><dd>40 hours</dd>
        <dt>Connection</dt><dd>Bluetooth 5.3</dd>
        <dt>Weight</dt><dd>250 g</dd>
      </dl>
    </section>

    <!-- Reviews — each review is an article inside article -->
    <section aria-label="Customer reviews">
      <h2>Reviews</h2>

      <article>
        <header>
          <strong>Anna K.</strong>
          <time datetime="2026-04-15">15 April 2026</time>
        </header>
        <p>Excellent headphones, clean sound. The noise cancellation works brilliantly.</p>
      </article>

      <article>
        <header>
          <strong>Michael R.</strong>
          <time datetime="2026-03-28">28 March 2026</time>
        </header>
        <p>The 40-hour claim is real. Took them on a business trip and they lasted the week.</p>
      </article>
    </section>

  </article>
</main>

セクションとサイドバーのあるランディングページ

html
<body>
  <header>
    <nav aria-label="Main navigation">
      <!-- logo + menu -->
    </nav>
  </header>

  <main>
    <!-- Hero section -->
    <section aria-labelledby="hero-title">
      <h1 id="hero-title">SEO promotion for your business</h1>
      <p>We help businesses improve technical and content foundations</p>
      <a href="#contacts" role="button">Get a free audit</a>
    </section>

    <!-- Services -->
    <section>
      <h2>Our services</h2>
      <ul role="list">
        <li>
          <article>
            <h3>Technical audit</h3>
            <p>Full technical health check of your site...</p>
          </article>
        </li>
        <li>
          <article>
            <h3>Content strategy</h3>
            <p>Keyword universe and content calendar...</p>
          </article>
        </li>
      </ul>
    </section>

    <!-- Main content + sidebar -->
    <div class="layout-two-col">
      <section>
        <h2>Case studies</h2>
        <!-- ... -->
      </section>

      <aside aria-label="Contact us">
        <h2>Get in touch</h2>
        <address>
          <p>Email: <a href="mailto:hello@seohead.tech">hello@seohead.tech</a></p>
          <p>Telegram: <a href="https://t.me/seohead">@seohead</a></p>
        </address>
      </aside>
    </div>
  </main>

  <footer>
    <nav aria-label="Site map">
      <ul>
        <li><a href="/blog">Blog</a></li>
        <li><a href="/glossary">Glossary</a></li>
      </ul>
    </nav>
    <p><small>&copy; 2026 seohead.tech</small></p>
  </footer>
</body>
ランディングページの例では、aria-labelledbyとidを使って、セクションを見出しに結び付けています。見出しが一般的でないスタイルでも、スクリーンリーダーがセクション名を正しく読み上げられます。構造だけでは名前が明らかでない<section>や<nav>には、この方法を使うとよいでしょう。
html
<!-- Multiple <nav> elements are fine — distinguish them with aria-label -->

<!-- Breadcrumbs -->
<nav aria-label="Breadcrumbs">
  <ol>
    <li><a href="/">Home</a></li>
    <li><a href="/blog">Blog</a></li>
    <li aria-current="page">HTML5 semantic tags</li>
  </ol>
</nav>

<!-- Main navigation inside <header> -->
<nav aria-label="Main navigation">
  <ul>
    <li><a href="/blog" aria-current="page">Blog</a></li>
    <li><a href="/services">Services</a></li>
  </ul>
</nav>

<!-- Pagination at the end of a listing -->
<nav aria-label="Blog pages">
  <a href="?page=1" rel="prev" aria-label="Previous page">←</a>
  <a href="?page=1">1</a>
  <span aria-current="page">2</span>
  <a href="?page=3">3</a>
  <a href="?page=3" rel="next" aria-label="Next page">→</a>
</nav>

<!-- In-page table of contents -->
<nav aria-label="Article contents">
  <ol>
    <li><a href="#structural-tags">Structural tags</a></li>
    <li><a href="#content-tags">Content tags</a></li>
    <li><a href="#nesting-examples">Nesting examples</a></li>
  </ol>
</nav>

SEOへの影響:検索エンジンが実際に受け取るもの

セマンティックなマークアップは、ブラウザーや支援技術に、より明確な構造情報を渡します。ページの解釈や保守がしやすくなる一方で、検索順位を直接上げる仕組みではなく、役に立つコンテンツの代わりにもなりません。

メインコンテンツの特定

Googleは<main>を使ってページの主要コンテンツを特定します。ヘッダー、フッター、<aside>の内容は、ランキングでの重みが小さくなります。テキストがすべて<div class="main">に入っていると、Googleは構造を判別するために余分なリソースを使います。

日付と著者の帰属

<time datetime="2026-05-22">は、Googleに正確な公開日を伝え、鮮度の評価に影響します。rel="author"を付けた<address>は、記事と著者を結び付けます。どちらのシグナルも、検索結果のリッチスニペット生成に使われます。

リッチリザルト

<details>+<summary>の内容はGoogleにインデックス登録され、検索結果で展開できるブロック(他の人はこちらも検索)として表示されることがあります。<figure>+<figcaption>は、画像のインデックス登録と、Google画像検索での表示に影響します。

内部リンク

<nav>内のリンクにはナビゲーションの文脈があり、<article>内のリンクにはコンテンツの文脈があります。Googlebotは、リンクの重みを評価する際にページ内での位置を考慮します。<article>の本文にあるリンクは、<aside>にあるリンクよりも価値が高くなります。

Schema.org(JSON-LD)とHTML5のセマンティックタグは、競合するものではなく補完し合います。セマンティクスが文書構造を定義し、Schema.orgがコンテンツの種類、エンティティ、プロパティについての機械可読なデータを加えます。両方そろうと、Googleはページの全体像を把握できます。

セマンティックマークアップのよくある間違い

間違いの大半は、何でもdivで書く癖か、タグの本来の用途の誤解から生じます。

html
<!-- MISTAKE 1: <section> instead of <div> for styling -->
<section class="flex-wrapper">  <!-- no heading = not section -->
  <img src="photo.jpg" alt="">
</section>
<!-- CORRECT -->
<div class="flex-wrapper">
  <img src="photo.jpg" alt="Photo description">
</div>

<!-- MISTAKE 2: <article> for a card without standalone meaning -->
<article class="feature-card">
  <span class="icon">⚡</span>
  <h3>Fast delivery</h3>
</article>
<!-- CORRECT: a benefits card is li or div, not article -->
<li class="feature-card">
  <span class="icon" aria-hidden="true">⚡</span>
  <h3>Fast delivery</h3>
</li>

<!-- MISTAKE 3: <header> as a synonym for <div class="header"> -->
<header class="section-header">
  <h2>Our advantages</h2>
</header>
<!-- CORRECT: use <header> only when a section has an introductory group -->
<section>
  <h2>Our advantages</h2>  <!-- h2 directly, no header wrapper -->
  ...
</section>

<!-- MISTAKE 4: two <main> elements -->
<main>Primary content</main>
<main>Also important content</main>  <!-- invalid! -->
<!-- CORRECT: one <main>, supplementary content in <aside> -->
<main>Primary content</main>
<aside>Supplementary content</aside>

<!-- MISTAKE 5: <address> for an office address in body text -->
<address>1 High Street, London</address>  <!-- not in an author/org context -->
<!-- CORRECT -->
<p>Office address: 1 High Street, London</p>
<!-- or in footer as site contact information: -->
<footer>
  <address>
    <a href="mailto:hello@company.com">hello@company.com</a>
  </address>
</footer>
最も多い間違いは、意味のないラッパー用ブロックを<section>と呼び替えて使うことです。簡単な判定方法があります。<section>を<div>に置き換えても意味が何も変わらないなら、正しいタグは<div>です。

もう一つ多いのが、alt属性の欠落と空のalt属性です。<figure>内の画像には、意味のあるaltを付けるか、装飾的な画像で<figcaption>が説明している場合はalt=""を指定します。alt属性自体を省略するのは避けてください。アクセシビリティの基準とHTMLの検証に反します。

html
<!-- Decorative image: empty alt, figcaption describes it -->
<figure>
  <img src="chart.png" alt="" role="presentation">
  <figcaption>Organic traffic growth over 6 months: +340%</figcaption>
</figure>

<!-- Informative image: full alt text -->
<figure>
  <img
    src="html5-tags-map.png"
    alt="Map of HTML5 semantic tags: header, nav, main, article, section, aside, footer"
  >
  <figcaption>Fig. 2 — Complete map of HTML5 semantic elements</figcaption>
</figure>

<!-- Mistake: no alt at all -->
<img src="diagram.png">  <!-- invalid! -->

FAQ

セマンティックマークアップはGoogleの検索順位に直接影響しますか?
セマンティクスだけを理由にした加点はありません。セマンティックHTMLは、文書の構造が明確になりアクセシビリティを支えるために使います。検索でのパフォーマンスは、特定のタグの選び方ではなく、ページ全体のコンテンツと技術面の根拠から評価します。
<article>の中に<article>を入れ子にできますか?
できますし、正しい使い方です。代表的な例は、商品カード(<article>)の中にレビューのセクションがあり、各レビューも<article>になっている構成です。ブログ記事(<article>)にSNSの投稿(<article>)を埋め込む場合も同じです。入れ子の<article>は、内側の要素が外側と関連する独立したコンテンツであることを示します。
<strong>と<b>、<em>と<i>はどう違いますか?
<strong>はコンテンツが重要であることを示し、スクリーンリーダーは強調して読み上げます。<b>は重要性の意味を持たない、見た目だけの太字です。<em>は、意味が変わる語調の強調を加えます(話し言葉の強調のように、「I didn't say he stole it」)。<i>は強調を伴わない斜体で、専門用語、外国語、タイトルなどに使います。SEOでの違いはごくわずかですが、アクセシビリティでの違いは大きくなります。
<main>タグと一緒にrole="main"も必要ですか?
不要です。<main>タグには、暗黙のARIAロール「main」がすでにあります。role="main"を加えるのは冗長です。<nav>(navigationロール)、ページ単位の<header>(bannerロール)、<footer>(contentinfoロール)も同じです。タグとロールを重複させると、アクセシビリティツリーが混乱します。
ReactやVueで作るシングルページアプリケーション(SPA)ではどうなりますか?
セマンティクスは2倍重要になります。SPAはHTMLを動的に生成するため、クローラーもスクリーンリーダーも、JavaScriptのレンダリング後にしか構造を受け取れません。ルートの遷移時に<title>が更新されるか、フォーカスが<main>に移動するか、各「ページ」のセマンティックな構造が正しく再現されるかを確認します。ReactやVueがセマンティックマークアップを妨げることはなく、あとはチームの規律の問題です。

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it