Ini adalah salah satu topik yang paling fundamental dalam menulis HTML modern — kapan harus menggunakan <div> generik dan kapan harus menggunakan tag semantik. Memahami perbedaannya adalah tanda developer yang benar-benar paham HTML, bukan sekadar bisa membuatnya tampil di browser.
<div> dan <span>?Sebelum masuk ke perbandingan, kenali dua elemen generik HTML:
<div> — Generic Block Container:
Elemen blok yang tidak memiliki makna apapun — murni pembungkus untuk keperluan layout dan styling:
<div>Ini blok konten tanpa makna semantik</div>
<span> — Generic Inline Container:
Elemen inline yang juga tidak memiliki makna apapun — untuk styling sebagian teks atau elemen kecil:
<p>Harga produk ini <span style="color:red;">Rp 99.000</span> saja.</p>
Divitis adalah istilah yang digunakan developer untuk menggambarkan kebiasaan menggunakan <div> untuk segalanya tanpa pertimbangan semantik:
<!-- DIVITIS — semua pakai div -->
<div id="header">
<div id="logo">WebSaya</div>
<div id="nav">
<div class="nav-item"><a href="/">Beranda</a></div>
<div class="nav-item"><a href="/tentang">Tentang</a></div>
<div class="nav-item"><a href="/kontak">Kontak</a></div>
</div>
</div>
<div id="main">
<div class="post">
<div class="post-header">
<div class="post-title">Belajar HTML Semantik</div>
<div class="post-meta">Oleh Budi — 20 April 2025</div>
</div>
<div class="post-body">
<p>HTML semantik adalah cara menulis...</p>
</div>
<div class="post-footer">
<div class="tags">
<div class="tag">HTML</div>
<div class="tag">Tutorial</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div class="copyright">© 2025 WebSaya</div>
</div>
Kode di atas berfungsi — browser tetap menampilkannya dengan benar. Tapi tidak ada makna struktural yang bisa dipahami oleh mesin pencari, screen reader, atau developer lain.
<!-- SEMANTIK — menggunakan tag yang bermakna -->
<header>
<a href="/" class="logo">WebSaya</a>
<nav>
<ul>
<li><a href="/">Beranda</a></li>
<li><a href="/tentang">Tentang</a></li>
<li><a href="/kontak">Kontak</a></li>
</ul>
</nav>
</header>
<main>
<article>
<header>
<h1>Belajar HTML Semantik</h1>
<p>Oleh <strong>Budi</strong> — <time datetime="2025-04-20">20 April 2025</time></p>
</header>
<p>HTML semantik adalah cara menulis...</p>
<footer>
<ul class="tags">
<li><a href="#">HTML</a></li>
<li><a href="#">Tutorial</a></li>
</ul>
</footer>
</article>
</main>
<footer>
<p>© 2025 WebSaya</p>
</footer>
Tampilan di browser identik — tapi maknanya jauh berbeda.
| Tag Semantik | Pengganti | Makna |
|---|---|---|
<header> |
<div id="header"> |
Kepala halaman atau section |
<nav> |
<div id="nav"> |
Blok navigasi |
<main> |
<div id="main"> |
Konten utama halaman |
<article> |
<div class="post"> |
Konten berdiri sendiri |
<section> |
<div class="section"> |
Kelompok konten bertema |
<aside> |
<div id="sidebar"> |
Konten sampingan |
<footer> |
<div id="footer"> |
Kaki halaman atau section |
<figure> |
<div class="image"> |
Media dengan keterangan |
<figcaption> |
<div class="caption"> |
Keterangan media |
<time> |
<span class="date"> |
Tanggal atau waktu |
<mark> |
<span class="highlight"> |
Teks yang di-highlight |
<address> |
<div class="contact"> |
Informasi kontak |
<div> dan <span> Tetap Digunakan?Meski ada banyak tag semantik, <div> dan <span> masih sangat dibutuhkan dan tidak bisa digantikan sepenuhnya:
Gunakan <div> untuk:
<!-- Wrapper layout — tidak ada tag semantik yang tepat -->
<div class="container">
<main>...</main>
</div>
<!-- Grid atau flexbox container -->
<div class="grid-tiga-kolom">
<article>...</article>
<article>...</article>
<article>...</article>
</div>
<!-- Komponen UI yang tidak punya padanan semantik -->
<div class="modal">
<div class="modal-overlay"></div>
<div class="modal-content">...</div>
</div>
<!-- Card tanpa konten yang bisa berdiri sendiri -->
<div class="card">
<div class="card-icon">📊</div>
<div class="card-body">
<h3>Total Pengguna</h3>
<p>12.453</p>
</div>
</div>
Gunakan <span> untuk:
<!-- Styling sebagian teks -->
<p>Status pesanan: <span class="badge badge-sukses">Terkirim</span></p>
<!-- Highlight teks tertentu -->
<p>Gunakan tag <span class="code-inline"><section></span> untuk...</p>
<!-- Ikon inline -->
<button>
<span class="ikon">🔍</span>
Cari
</button>
<!-- Bagian teks dengan warna berbeda -->
<h1>Web<span style="color:#4a9eed;">Saya</span></h1>
<time> — Tanggal dan Waktu:
<!-- Memberi makna mesin-dapat-baca pada tanggal -->
<p>Artikel ini diterbitkan pada
<time datetime="2025-04-20">20 April 2025</time>.
</p>
<!-- Waktu acara -->
<p>Acara dimulai pukul
<time datetime="2025-04-20T19:00">19.00 WIB</time>.
</p>
<mark> — Teks yang Di-highlight:
<!-- Seperti stabilo kuning di buku -->
<p>Perlu diingat bahwa <mark>tag semantik meningkatkan aksesibilitas</mark>
secara signifikan dibanding penggunaan div generik.</p>
<!-- Hasil pencarian yang cocok -->
<p>Hasil pencarian untuk "HTML":
Belajar <mark>HTML</mark> dari nol untuk pemula.</p>
<address> — Informasi Kontak:
<address>
<strong>Kantor WebSaya</strong><br>
Jl. Merdeka No. 10, Semarang<br>
Jawa Tengah, 50123<br>
<a href="mailto:[email protected]">[email protected]</a><br>
<a href="tel:+6224123456">024-123456</a>
</address>
<abbr> — Singkatan:
<p>
<abbr title="HyperText Markup Language">HTML</abbr> adalah bahasa
markup standar untuk membuat halaman web.
Dikembangkan oleh <abbr title="World Wide Web Consortium">W3C</abbr>.
</p>
Saat mouse diarahkan ke singkatan, tooltip menampilkan kepanjangan lengkapnya.
<details> dan <summary> — Konten Lipat:
<details>
<summary>Apa itu HTML Semantik?</summary>
<p>HTML semantik adalah penggunaan tag HTML yang sesuai dengan
makna konten yang dibungkusnya — bukan sekadar untuk tampilan.</p>
</details>
<details>
<summary>Mengapa semantik penting untuk SEO?</summary>
<p>Mesin pencari seperti Google menggunakan struktur semantik untuk
memahami hierarki dan relevansi konten halaman web.</p>
</details>
Elemen ini membuat konten bisa dilipat dan dibuka tanpa JavaScript sama sekali.
<progress> dan <meter> — Indikator Nilai:
<!-- Progress bar — untuk progres yang sedang berjalan -->
<label>Progres belajar HTML:</label>
<progress value="65" max="100">65%</progress>
<!-- Meter — untuk nilai dalam rentang tertentu -->
<label>Kapasitas storage:</label>
<meter value="7" min="0" max="10" low="3" high="8" optimum="5">
7 dari 10 GB
</meter>
1. SEO — Mesin Pencari:
<!-- Google memahami struktur ini dengan jelas -->
<article>
<h1>Tips Belajar CSS Grid</h1> <!-- Topik utama artikel -->
<time datetime="2025-04-20">20 April 2025</time>
<p>CSS Grid adalah sistem layout...</p>
<section>
<h2>Cara Membuat Grid Dasar</h2> <!-- Sub-topik artikel -->
...
</section>
</article>
<!-- vs div yang membingungkan Google -->
<div>
<div class="title">Tips Belajar CSS Grid</div>
<div class="date">20 April 2025</div>
<div class="content">CSS Grid adalah sistem layout...</div>
</div>
2. Aksesibilitas — Screen Reader:
<!-- Screen reader mengumumkan: "Navigasi, daftar 5 item" -->
<nav aria-label="Menu Utama">
<ul>
<li><a href="/">Beranda</a></li>
<li><a href="/kursus">Kursus</a></li>
<li><a href="/tentang">Tentang</a></li>
<li><a href="/blog">Blog</a></li>
<li><a href="/kontak">Kontak</a></li>
</ul>
</nav>
<!-- Screen reader membaca biasa: "daftar 5 item" — tanpa konteks navigasi -->
<div id="nav">
<ul>
<li><a href="/">Beranda</a></li>
...
</ul>
</div>
3. Keterbacaan Kode:
<!-- Developer baru langsung paham struktur tanpa baca kelas CSS -->
<body>
<header>
<nav>...</nav>
</header>
<main>
<article>
<section>...</section>
</article>
<aside>...</aside>
</main>
<footer>...</footer>
</body>
<!-- vs harus baca nama kelas satu per satu -->
<body>
<div class="top-wrapper">
<div class="menu-container">...</div>
</div>
<div class="content-area">
<div class="post-wrapper">
<div class="content-block">...</div>
</div>
<div class="right-panel">...</div>
</div>
<div class="bottom-bar">...</div>
</body>
Butuh membungkus sesuatu?
│
├── Apakah ada tag semantik yang sesuai?
│ ├── Ya → Gunakan tag semantik tersebut
│ │ (header, nav, main, article, section,
│ │ aside, footer, figure, time, mark, dll)
│ │
│ └── Tidak → Apakah elemen ini block atau inline?
│ ├── Block → Gunakan <div>
│ └── Inline → Gunakan <span>
│
└── Selesai
Gunakan checklist ini untuk mengevaluasi HTML yang sudah ditulis:
Struktur halaman:
✓ Ada satu <main> yang membungkus konten utama
✓ Header halaman menggunakan <header>
✓ Navigasi utama menggunakan <nav>
✓ Footer halaman menggunakan <footer>
Konten:
✓ Artikel atau posting menggunakan <article>
✓ Kelompok konten bertema menggunakan <section>
✓ Sidebar atau konten sampingan menggunakan <aside>
✓ Media dengan keterangan menggunakan <figure> + <figcaption>
✓ Tanggal dan waktu menggunakan <time datetime="...">
✓ Singkatan menggunakan <abbr title="...">
Teks:
✓ Teks penting menggunakan <strong> bukan hanya bold CSS
✓ Penekanan menggunakan <em> bukan hanya italic CSS
✓ Highlight hasil pencarian menggunakan <mark>
Umum:
✓ <div> hanya digunakan untuk layout dan wrapper tanpa makna
✓ <span> hanya digunakan untuk styling inline tanpa makna
✓ Tidak ada "divitis" — penggunaan div yang berlebihan
✓ Setiap <section> memiliki heading
✓ <h1> hanya ada satu per halaman
Sebelum — Penuh divitis:
<div id="wrapper">
<div id="header">
<div id="logo">
<img src="logo.png" alt="Logo">
</div>
<div id="main-menu">
<div class="menu-item"><a href="/">Home</a></div>
<div class="menu-item"><a href="/about">About</a></div>
</div>
</div>
<div id="content">
<div class="article-box">
<div class="article-title">
<h1>Judul Artikel</h1>
</div>
<div class="article-date">20 April 2025</div>
<div class="article-text">
<p>Isi artikel...</p>
</div>
<div class="article-image">
<img src="gambar.jpg" alt="Gambar">
<div class="image-caption">Keterangan gambar</div>
</div>
</div>
<div id="sidebar">
<div class="widget">
<div class="widget-title">Artikel Terkait</div>
<div class="widget-content">
<div class="related-item"><a href="#">Artikel 1</a></div>
<div class="related-item"><a href="#">Artikel 2</a></div>
</div>
</div>
</div>
</div>
<div id="footer">
<div class="copyright">2025 WebSaya</div>
</div>
</div>
Sesudah — Semantik dan bersih:
<div class="wrapper"> <!-- div tetap OK untuk wrapper layout -->
<header>
<a href="/" class="logo">
<img src="logo.png" alt="Logo WebSaya">
</a>
<nav aria-label="Navigasi Utama">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
</header>
<div class="content-layout"> <!-- div OK — hanya untuk grid layout -->
<main>
<article>
<header>
<h1>Judul Artikel</h1>
<time datetime="2025-04-20">20 April 2025</time>
</header>
<p>Isi artikel...</p>
<figure>
<img src="gambar.jpg" alt="Deskripsi gambar yang informatif">
<figcaption>Keterangan gambar</figcaption>
</figure>
</article>
</main>
<aside>
<section>
<h2>Artikel Terkait</h2>
<ul>
<li><a href="#">Artikel 1</a></li>
<li><a href="#">Artikel 2</a></li>
</ul>
</section>
</aside>
</div>
<footer>
<p>© 2025 WebSaya</p>
</footer>
</div>
| Elemen | Kapan Digunakan |
|---|---|
<div> |
Layout, wrapper, container tanpa makna semantik |
<span> |
Styling inline tanpa makna semantik |
| Tag semantik | Kapanpun ada tag yang sesuai dengan makna konten |
Aturan emas:
Selalu tanya: "Apakah ada tag semantik yang lebih tepat?"
Jika ada → gunakan tag itu
Jika tidak ada → gunakan <div> atau <span>
💡 Tips: Mulai kebiasaan audit HTML secara berkala — buka kode yang sudah ditulis dan cari setiap
<div>yang bisa digantikan oleh tag semantik. Refactoring HTML dari divitis ke semantik adalah latihan yang sangat efektif untuk membangun pemahaman mendalam tentang struktur halaman web. Tools seperti WAVE atau axe DevTools di browser bisa membantu mengidentifikasi masalah aksesibilitas akibat kurangnya semantik. 🔍
Kursus
HTML Dasar
Kategori
Semantik HTML
Durasi Pelajaran
20 menit