ネットや参考書で HTML の勉強を進めていると、時々こんな情報を見かけることがあります。
「<div>タグを使いすぎてはいけない」
「コードが <div> ばかり(div地獄)なのは古い、初心者っぽい」
「これからは header や main、section などのタグを使うべき」
このような情報を見ると、HTML を学び始めたばかりの人ほど、
「えっ、今まで便利に使っていた <div> は使ってはいけないの?」
「div を使うと、良くない HTML になってしまうの?」
と不安になるかもしれません。
しかし、結論から言うと、<div> は決して古いタグではありません。
現在でもWebサイト制作では、要素をグループ化するための基本的なタグとして、<div> は幅広く使われています。
Webページのレイアウトを作る、複数の要素をまとめる、CSSを適用する、JavaScript で操作するといった場面では、今でも <div> が重要な役割を持っています。
そのため、「div をできるだけ減らさなければいけない」と考える必要はありません。
ただし、現在の HTML では、<div> 以外にもページやコンテンツの役割を表すためのタグが用意されています。
例えば、ページの構造や役割を伝えるために、次のようなタグがあります。
- <header>:ページやコンテンツの導入部分
- <main>:ページの中心となる主要な内容
- <section>:見出しを持つテーマごとのまとまり
- <article>:それ単体で成立する記事やコンテンツ
などです。
大切なのは、「div を使わないこと」ではありません。
役割を明確に伝えたい場所では適切なタグを使い、それ以外のグループ化やレイアウトには <div> を使う。
この考え方が、現在の HTML を書く上で重要になります。
ここでは、なぜ <div> が今でも重要なのか、そして header や main、section などの役割を持つタグと、どのように使い分ければよいのかを解説します。
「divを使いすぎ」は本当に問題?まず知っておきたいdivの現在地
ネットの解説記事や SNS を見ていると、「div地獄」という言葉が、まるで悪い HTML の代表例のように紹介されていることがあります。
そのため、HTML を学び始めた初心者の中には、
「自分のコードは <div> ばかりだからダメなのでは?」
「できるだけ <div> を減らして、別のタグに置き換えなければいけないのでは?」
と不安になる人も少なくありません。
しかし、結論から言うと、Webページ内に <div> タグが多く使われていること自体は、現在の Web制作でも問題ではありません。
「div地獄」という言葉は、ときに
<div> が多い
↓
<div> の使いすぎ
↓
悪いHTML
という意味で使われることがあります。
しかし、本当に問題になるのは <div> の数ではありません。
問題の本質は、HTML の構造が分かりにくくなっているかどうかです。
「div地獄」の本当の正体とは?
実際のWebサイト制作では、レイアウトやデザインを作るために、多くの <div> が使われています。
例えば、
・複数の要素を横並びにする
・コンテンツをグループ化する
・CSS でデザインを適用する
・JavaScript で特定の部分を操作する
といった場面では、グループ化のための <div> が必要になります。
そのため、実際のWebサイトのHTMLを見ると、<div> が何重にも入れ子になっていることも珍しくありません。
それでも問題にならないのは、div の数が多くても、構造が整理されているからです。
逆に、次のような状態になると、コードの管理が難しくなります。
・どの <div> がどこで閉じているのか分からない
・インデント(字下げ)が乱れて、親子関係が見えない
・class名や id名が分かりにくく、その <div> の目的が判断できない
・後から修正するときに、どこを変更すればよいか分からない
つまり、「div地獄」と呼ばれる状態は、div が多いことではなく、div が整理されていない HTML構造のことです。
div は「意味を持たない便利な箱」
<div> は、「意味を持たないグループ化のためのタグ」です。
しかし、「意味を持たない」ということは欠点ではありません。
どのような用途にも使える自由な箱だからこそ、Web制作では現在でも重要な役割を持っています。
荷物を整理するとき、箱が1つだけで足りるとは限りません。
種類ごとに分けたり、さらに小さな箱に分けたりすることで、整理しやすくなります。
HTML でも同じです。
ページを構成する要素を整理するために、複数の <div> が必要になるのは自然なことです。
大切なのは、
「div を減らすこと」ではなく、「何のための div なのか分かる状態にすること」
です。
適切な範囲で <div> を使い、きれいなインデントを保ち、目的が分かる class名を付ける。
これができていれば、<div> が多く使われていても、それは「div地獄」ではなく、管理しやすい整理された HTML になります。
まずは <div> を無理に減らそうとするのではなく、グループ化の基本として正しく使うことを意識してください。
なぜ現在のWeb制作でも<div>が使い続けられているのか
「HTML5以降は、意味を持つタグを使うべき」と聞くと、「では <div> はもう必要ないのでは?」と思うかもしれません。
しかし、現在のWeb制作でも <div> は非常によく使われています。
その理由は、Webページを作る上で「意味を持たないグループ化」が必要になる場面が非常に多いからです。
<div> は、特定の意味を持たないからこそ、さまざまな用途に使える便利な箱として現在でも重要な役割を持っています。
デザインやレイアウトには「意味を持たない箱」が必要
Webページを作るとき、HTML の役割は文章や情報の構造を作ることだけではありません。
実際のWeb制作では、次のようなデザインやレイアウトの調整が大量に発生します。
・複数の要素を横並びにする
・コンテンツを一定の幅に収める
・カード型のデザインを作る
・背景色や枠線を設定する
・余白や配置を調整する
このような場合、「ここは記事です」「ここは見出しです」といった意味を持たせる必要はありません。
必要なのは、
「これらの要素をひとまとめにして、CSS でデザインを調整したい」
というグループ化です。
そこで活躍するのが <div> です。
例えば、商品の紹介カードを横並びにする場合を考えてみます。
<div class="card-wrapper">
<div class="card">
<h3>商品A</h3>
<p>商品の説明</p>
</div>
<div class="card">
<h3>商品B</h3>
<p>商品の説明</p>
</div>
</div>この場合、card-wrapper や card は、文章として特別な意味を持っているわけではありません。
しかし、CSS でレイアウトを作るためには、このような「箱」が必要になります。
<div> は「意味がないから不要」なのではなく、「意味を持たせない自由な箱だから必要」なのです。
WordPressや実際の制作現場でも <div> は多く使われている
<div> が現在でも使われ続けている理由は、実際のWeb制作環境を見ると分かります。
例えば、世界中で利用されているWordPressのテーマやページ構築ツールでは、多くの <div> が HTML として出力されます。
また、CSSフレームワークやWebアプリケーション開発でも、レイアウトやコンポーネントを管理するために <div> は頻繁に利用されています。
これは、制作者が <div> を適当に使っているからではありません。
Webサイトを作るには、
・デザインを適用する範囲
・部品ごとのまとまり
・レイアウトを制御する単位
が必要であり、その役割を <div> が担っているためです。
現在のWeb制作では、
「意味を伝える部分」
→ header、main、sectionなどの役割を持つタグ
「デザインや構造を作る部分」
→ <div>
というように、それぞれの役割を分けて利用しています。
<div> だからSEOで不利になるわけではない
「div ばかりの HTML は SEO に悪いのでは?」と心配する人もいます。
しかし、<div> を使っていること自体が検索順位を下げる原因になるわけではありません。
検索エンジンは、単純に HTMLタグの種類だけを見てページを評価しているわけではありません。
ページ内の文章内容、ユーザーにとっての価値、表示速度、リンク構造など、さまざまな要素を総合的に判断しています。
そのため、
「section を使えば SEO に有利」
「div を使うと SEO で不利」
という単純な考え方は正しくありません。
もちろん、HTML の構造を分かりやすくすることは大切です。
しかし、その目的は「検索順位を上げるため」ではなく、人や支援技術、そして制作者自身が内容を理解しやすくするためです。
<div> を正しく使いながら、必要な場所で役割を持つタグを使う。
これが現在のWeb制作における <div> との付き合い方です。
<header> や <main> などのタグがあるのはなぜ?
ここまで説明したように、<div> は現在でも Web制作に欠かせない重要なタグです。
では、なぜHTMLには <header> や <main>、<section>、<article> のようなタグが用意されているのでしょうか。
その理由は、HTML にページやコンテンツの「役割」を伝えるためです。
<div> は、複数の要素をまとめるためのグループ化タグです。
しかし、<div> そのものには、
・ここはページの導入部分
・ここがページ全体の主要な内容
・ここは1つのテーマについてまとめた部分
といった、囲った範囲全体の役割を表す情報はありません。
例えば、次のようなHTMLを考えてみます。
<div class="content-area">
<div>
<h2>商品の特徴</h2>
<p>商品の特徴を紹介します。</p>
</div>
<div>
<h2>料金プラン</h2>
<p>料金について説明します。</p>
</div>
</div>このHTMLでも、<h2> は見出し、<p> は文章として、それぞれ正しい意味を持っています。
つまり、検索エンジンやブラウザ、支援技術は、
・ここが見出しである
・ここが文章である
という情報を理解できます。
しかし、外側の <div> についてはどうでしょうか。
この <div> で囲まれた範囲が、
・ページ全体の中心となる内容なのか
・1つのテーマとしてまとめられた部分なのか
・単に複数の要素をまとめたグループなのか
という「範囲全体の役割」は、<div> だけでは表現されません。
そこで使われるのが、役割を持つタグです。
<main>
<section>
<h2>商品の特徴</h2>
<p>商品の特徴を紹介します。</p>
</section>
<section>
<h2>料金プラン</h2>
<p>料金について説明します。</p>
</section>
</main>このように書くことで、
・<main>:ページ内で中心となる主要な内容
・<section>:1つのテーマとしてまとめられた部分
という情報を HTML に追加できます。
大切なのは、<main> や <section> が <div> より優れているということではありません。
それぞれ役割が違います。
<div> は、意味を決めずに要素をまとめるための自由なグループ化タグです。
一方で、役割を持つタグは、その部分がページの中でどのような役割を持つのかをHTMLに伝えるためのタグです。
<div> と役割を持つタグの違い
<div> と<header>、<main>、<section> などの違いは、その要素自体が役割や意味を持っているかどうかです。
<div> は、要素をまとめるためのグループ化タグです。
例えば、
・複数の要素をひとまとまりにする
・レイアウトを作るための範囲を作る
・CSSを適用する範囲を指定する
といった目的で利用されます。
一方で、<header> や <main>、<section> などのタグは、その部分がページ内でどのような役割を持つのかを HTML に伝えることができます。
整理すると、次のようになります。
| 目的 | 使用するタグ |
|---|---|
| 特定の意味を持たない要素のグループ化 | <div> |
| ページやコンテンツの導入部分を表す | <header> |
| ページ内で中心となる主要な内容を表す | <main> |
| 1つのテーマとしてまとまった範囲を表す | <section> |
| 単独で成立する記事やコンテンツを表す | <article> |
ここで大切なのは、役割を持つタグは <div> の上位互換ではないということです。
例えば、商品のカードを並べるためのまとまりや、デザインを調整するためのグループなどは、無理に <section> や <article> へ置き換える必要はありません。
逆に、「ここがページの主要部分」「ここから別のテーマが始まる」といった、HTML として役割を伝えたい場所では、<main> や <section> などを使う意味があります。
また、JavaScript で操作する場合も同じです。
<div> だけが JavaScript の対象になるわけではありません。
<header> <main>、<section> など、必要に応じてどの HTML要素でも JavaScript で取得・操作できます。
つまり、
・<div> は意味を決めずに要素を整理するための箱。
・役割を持つタグは、その部分が何を表しているのかを HTML に伝えるためのタグ。
この違いを理解すると、「div を減らすべきか」ではなく、「どの場所にどのタグが適切なのか」という正しい判断ができるようになります。
役割を持つタグはアクセシビリティにも役立つ
<header>、<main>、<section>、<article> などの役割を持つタグは、HTMLの見た目を変えるためだけに存在しているわけではありません。
これらのタグは、アクセシビリティ(誰にとっても利用しやすいWebサイトにすること)の面でも重要な役割を持っています。
ただし、ここで誤解してはいけないことがあります。
よく「アクセシビリティを高めるために、<div> を減らして役割を持つタグを増やしましょう」と説明されることがあります。
しかし、本質はそこではありません。
大切なのは、
「<div> を減らすこと」ではなく、「役割を伝える必要がある場所では、役割を持つタグを使うこと」
です。
<div> は現在でも必要なグループ化タグです。
その上で、ページの中で重要な役割を持つ部分に適切なタグを使うことで、HTML の構造をより分かりやすく伝えることができます。
音声でサイトを利用する人への「案内看板」になる
Webサイトを利用する人の中には、画面を見ることが難しく、スクリーンリーダー(画面読み上げソフト)を利用している人もいます。
スクリーンリーダーは、HTML の情報を利用してページの構造を把握し、利用者が目的の場所へ移動できるようにします。
例えば、ページの中に <main> が使われている場合、スクリーンリーダーは、
「ここがページの主要な内容である」
という情報を取得できます。
そのため、利用者はサイトロゴやナビゲーション部分をすべて読み終わるまで待つのではなく、主要な本文部分へ移動しやすくなります。
また、<section> を見出し(<h2> など)と組み合わせて使うことで、
「ここから別のテーマが始まる」
というページ構造を理解しやすくなります。
これは、本でいう章や見出しを頼りに、必要な部分を探す感覚に近いものです。
div を減らすことが目的ではない
すべてを <div> だけで作る場合、HTML には「この部分は何の役割なのか」という情報が少なくなります。
一方で、必要な場所に <header>、<main>、<section> などを使うことで、ページ構造を理解するための手がかりを追加できます。
例えるなら、
<div> だけで構成されたページは、道そのものは歩けるものの、案内標識が少ない状態です。
そこに役割を持つタグを適切に配置することは、必要な場所に案内標識を設置するようなものです。
ただし、道路そのものを作るための材料まで減らす必要はありません。
<div> は、現在でもWebページを構築するために必要な基本要素です。
大切なのは、
「div をたくさん使っているから問題」ではなく、「必要な場所に適切な役割を持たせているか」
ということです。
これが、現在の HTML における <div> と役割を持つタグの正しい使い分け方です。
実際のWebサイトではdivと役割を持つタグをどう組み合わせるのか
divを正しく使えることがHTML理解の基本になる
覚えておきたいのは、<div> は決して古いタグでも、避けるべきタグでもないということです。
現在のWeb制作でも、<div> は多くのWebサイトで使われています。
なぜなら、Webページを作るには、複数の要素をまとめたり、レイアウトを組み立てたり、CSSを適用する範囲を作ったりするための「自由な箱」が必要だからです。
その役割を担っているのが <div> です。
一方で、HTMLには <header>>、<main>、<section>、<article> など、役割を持つタグもあります。
これらは <div> を置き換えるためのものではありません。
「ここはページの導入部分」
「ここが主要な内容」
「ここから別のテーマが始まる」
といった、HTML 上の役割を伝えるために使われます。
つまり、現在の HTML では、
・すべてを <div> で作る
・div をできるだけ減らして役割タグだけで作る
という両極端な考え方ではなく、
必要な場所で必要なタグを使い分けること
が重要になります。
<div> を正しく理解できると、単にタグを覚えるだけではなく、
・HTMLの階層構造
・親要素と子要素の関係
・CSSでデザインを作る考え方
・Webページがどのように組み立てられているか
といった、HTML全体の基本的な仕組みが理解しやすくなります。
逆に言えば、<div> を「何となく使う箱」として扱っていると、ページが大きくなったときに構造が分かりにくくなります。
大切なのは、<div> を減らすことではありません。
なぜそこに <div> が必要なのか、なぜ別のタグではなく
これができるようになると、HTMLを書く力は大きく向上します。
次の記事では、さらに一歩進んで、実際のWebサイト制作で迷いやすい <div> と <header>、<main>、<section>、<article> などの具体的な使い分けについて解説します。
>>HTMLのdivタグとheader・main・section・articleの使い分け方|サンプルコードで解説
