HTML5セマンティックタグ完全ガイド:実例付き
セマンティックHTMLが、人と機械にとってのページ構造をどう明確にするか。アクセシビリティが向上する場面と、検索順位の近道ではない理由を解説します。
HTML5より前のWebは、.header、.sidebar、.footerといったCSSクラスを付けたdivとspanだらけでした。検索ロボットもスクリーンリーダーも、どの部分が何なのかを推測するしかありませんでした。そこでHTML5が導入したのがセマンティックタグです。CSSとは無関係に、要素自体が意味を持ちます。<article>タグは独立したコンテンツ、<nav>タグはナビゲーション、<aside>タグは本文に関連する補足コンテンツを表します。補足コンテンツは、なくても本文の理解には影響しません。
ページ構造のタグ
HTML5では、ページの大きな領域をマークアップするためのタグが追加されました。これらがブラウザー、検索エンジン、支援技術がCSSを読まずにたどれる文書の骨格になります。
- <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>の中では、本文の理解に欠かせない内容ではない注記や引用に使います。ページ単位では、サイド列になります。
あらゆるページの基本的な骨格は次のとおりです。これだけで、すでにセマンティクスとして正しいマークアップになっています。
<!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>© 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
ページ構造のタグはページの領域を決めます。コンテンツのタグは、中身の性質を表します。ここでは、どのブログページにも見られる組み合わせを見ていきます。
<!-- 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>sectionとdivの使い分け
ルールは単純です。ブロックに意味のある名前を付けられるなら<section>、スタイル用やJavaScriptのフックとして存在するだけなら<div>を使います。
<!-- 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>タグのマークアップ例です。<!-- 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"><article>...</article></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のセマンティクスが力を発揮するのは、個々のタグではなく、正しい組み合わせです。代表的なページ構成を順に見ていきます。
ブログ一覧ページ
<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>レビュー付きの商品カード
<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>セクションとサイドバーのあるランディングページ
<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>© 2026 seohead.tech</small></p>
</footer>
</body>複数の<nav>:パンくずリストとページネーション
<!-- 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>にあるリンクよりも価値が高くなります。
セマンティックマークアップのよくある間違い
間違いの大半は、何でもdivで書く癖か、タグの本来の用途の誤解から生じます。
<!-- 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>もう一つ多いのが、alt属性の欠落と空のalt属性です。<figure>内の画像には、意味のあるaltを付けるか、装飾的な画像で<figcaption>が説明している場合はalt=""を指定します。alt属性自体を省略するのは避けてください。アクセシビリティの基準と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の検索順位に直接影響しますか?
<article>の中に<article>を入れ子にできますか?
<strong>と<b>、<em>と<i>はどう違いますか?
<main>タグと一緒にrole="main"も必要ですか?
ReactやVueで作るシングルページアプリケーション(SPA)ではどうなりますか?
Check it with SpiderHead
Free and local: run the audit on your own machine.




