Semantic HTML: Jangan Semua Dibungkus <div>
Di artikel sebelumnya kita sudah membuat sebuah form.
Halaman HTML kita sekarang mulai punya lebih banyak isi.
Ada heading.
Ada paragraf.
Ada link.
Ada form.
Dan semakin banyak yang kita pelajari, semakin besar pula kemungkinan halaman kita nantinya menjadi seperti ini:
<div> <div> <div>...</div> </div>
<div> <div>...</div> </div>
<div>...</div></div>Secara teknis?
Bisa saja.
Tapi beberapa minggu kemudian kita membuka kembali kode tersebut dan mulai bertanya:
<div>yang ini buat apa?
Lalu turun sedikit.
Kalau yang ini?
Turun lagi.
Lah, ini
<div>punya siapa? 😄
Nah, sebelum halaman kita berubah menjadi kerajaan <div>, sekarang waktunya berkenalan dengan Semantic HTML.
Kalau Gabuters baru sampai sini dan belum mencoba form dari artikel sebelumnya, bisa mampir dulu ke Membuat Form dengan HTML: Dari Input sampai Tombol Kirim.
Apa Masalahnya dengan <div>?
Sebenarnya tidak ada yang salah dengan <div>.
Serius.
Kita tidak sedang memusuhi <div>.
Elemen ini sangat berguna sebagai container atau pembungkus ketika kita memang membutuhkan sebuah elemen yang tidak membawa makna khusus.
Contohnya:
<div> <h2>Artikel Terbaru</h2> <p>Belajar HTML dari nol.</p></div>Masalahnya muncul kalau semua bagian halaman kita bungkus dengan <div> tanpa memikirkan arti bagian tersebut.
Bayangkan halaman sederhana seperti ini:
BapakGabut
Beranda | Programming | Game
--------------------------------
Belajar HTML
Isi artikel...
--------------------------------
Artikel lainnya...
--------------------------------
© 2026 BapakGabutKita bisa membuat strukturnya seperti:
<div> <div>BapakGabut</div>
<div> Beranda | Programming | Game </div>
<div> <div>Belajar HTML</div> <div>Isi artikel...</div> </div>
<div> Artikel lainnya... </div>
<div> © 2026 BapakGabut </div></div>Browser masih bisa menampilkannya.
Tapi kalau kita hanya membaca HTML-nya, banyak <div> tersebut tidak menjelaskan perannya.
Kita tahu sebuah bagian adalah navigasi karena melihat isinya.
Kita tahu bagian lain adalah artikel karena membaca teksnya.
HTML-nya sendiri tidak banyak membantu menjelaskan struktur tersebut.
Di sinilah elemen semantik mulai berguna.
Semantic HTML Itu Apa?
Kata semantic berkaitan dengan makna.
Jadi secara sederhana, Semantic HTML berarti menggunakan elemen HTML yang membantu menjelaskan makna atau peran sebuah bagian konten.
Daripada menulis:
<div> Beranda | Programming | Game</div>kita punya elemen:
<nav> Beranda | Programming | Game</nav>Sekarang bahkan sebelum membaca isinya, kita sudah mendapatkan petunjuk:
Oh, bagian ini adalah navigasi.
Daripada:
<div> © 2026 BapakGabut</div>kita bisa menggunakan:
<footer> © 2026 BapakGabut</footer>HTML kita bukan hanya menjadi kumpulan kotak.
Strukturnya mulai mempunyai arti.
Kenapa Makna Itu Penting?
Mungkin Gabuters berpikir:
Tapi kalau tampilannya sama, memangnya kenapa?
Pertanyaan yang masuk akal.
Semantic HTML bukan terutama soal membuat halaman terlihat berbeda.
Misalnya:
<div>Menu</div>dan:
<nav>Menu</nav>bisa saja secara visual terlihat sama.
Perbedaannya ada pada makna struktur.
Menggunakan elemen yang sesuai dapat membantu:
- developer memahami struktur kode;
- browser dan teknologi lain memahami bagian halaman;
- teknologi bantu seperti screen reader menavigasi konten;
- mesin pencari memahami struktur konten dengan lebih baik.
Tapi jangan salah kaprah.
Mengganti semua <div> menjadi elemen semantik bukan tombol rahasia yang otomatis membuat SEO kita sempurna. 😄
Tujuan utamanya adalah membuat struktur HTML lebih bermakna dan sesuai dengan fungsi kontennya.
header: Bagian Pembuka
Kita mulai dari:
<header>header digunakan untuk bagian pengantar atau pembuka dari sebuah halaman atau bagian konten.
Misalnya:
<header> <h1>BapakGabut</h1> <p>Ngoding, main game, dan ngulik apa saja.</p></header>Dalam sebuah halaman, header sering berisi hal seperti:
- judul;
- logo;
- informasi pengantar;
- navigasi.
Tapi jangan menganggap <header> hanya boleh muncul satu kali di seluruh halaman.
Sebuah <article> misalnya juga bisa memiliki header-nya sendiri.
Contoh:
<article> <header> <h2>Belajar Semantic HTML</h2> <p>Ditulis oleh BapakGabut</p> </header>
<p>Isi artikel...</p></article>Jadi maknanya tergantung konteks elemen tempat ia berada.
nav: Untuk Navigasi
Kalau halaman kita memiliki sekumpulan link navigasi utama:
<a href="/">Beranda</a><a href="/programming/">Programming</a><a href="/game/">Game</a>kita bisa membungkusnya dengan:
<nav> <a href="/">Beranda</a> <a href="/programming/">Programming</a> <a href="/game/">Game</a></nav>nav memberi tahu bahwa kumpulan link tersebut digunakan untuk navigasi.
Tapi bukan berarti setiap link harus dimasukkan ke <nav>.
Misalnya sebuah paragraf:
<p> Baca juga artikel <a href="/belajar-html/">belajar HTML</a>.</p>Link tersebut tidak otomatis membutuhkan <nav>.
Gunakan <nav> untuk bagian yang memang berfungsi sebagai blok navigasi.
main: Isi Utama Halaman
Setiap halaman biasanya memiliki sesuatu yang menjadi fokus utamanya.
Misalnya pada halaman artikel BapakGabut, bagian utama tentu adalah artikel yang sedang dibaca.
Kita bisa menggunakan:
<main> <h1>Belajar Semantic HTML</h1> <p>Isi utama halaman...</p></main>main menandai konten utama dari halaman.
Header situs, navigasi global, sidebar berulang, dan footer biasanya bukan bagian dari konten utama tersebut.
Sebagai kebiasaan untuk halaman biasa, kita umumnya memiliki satu <main> yang merepresentasikan konten utama halaman.
article: Konten yang Bisa Berdiri Sendiri
Sekarang kita punya:
<article>Nama elemennya cukup membantu.
Elemen ini cocok untuk konten yang relatif dapat berdiri sendiri.
Misalnya:
- artikel blog;
- berita;
- posting forum;
- komentar pengguna;
- entri konten yang independen.
Contohnya:
<article> <h2>Belajar HTML dari Nol</h2>
<p> Hari ini kita belajar tentang Semantic HTML. </p></article>Kalau halaman menampilkan beberapa artikel:
<main> <article> <h2>Belajar HTML</h2> <p>...</p> </article>
<article> <h2>Belajar CSS</h2> <p>...</p> </article></main>Masing-masing <article> memiliki konten yang bisa dipahami sebagai unit tersendiri.
section: Membagi Konten Berdasarkan Topik
Lalu ada:
<section>Elemen ini digunakan untuk mengelompokkan bagian konten yang memiliki tema atau topik tertentu.
Misalnya sebuah artikel:
<article> <h1>Cara Belajar HTML</h1>
<section> <h2>Persiapan</h2> <p>...</p> </section>
<section> <h2>Mulai Menulis HTML</h2> <p>...</p> </section></article>Di sini masing-masing section punya topik yang jelas.
Sebagai kebiasaan yang baik, sebuah <section> biasanya memiliki heading yang menjelaskan bagian tersebut.
Tapi jangan menggunakan <section> hanya karena kita membutuhkan pembungkus untuk styling.
Kalau tidak ada makna atau pengelompokan topik yang jelas dan kita hanya butuh container biasa, <div> mungkin justru lebih tepat.
Nah, ternyata <div> belum pensiun. 😄
article atau section?
Ini salah satu pertanyaan yang cukup sering muncul:
Pakai
<article>atau<section>?
Cara sederhana untuk mulai membedakannya:
article
Cocok ketika kontennya merupakan unit yang relatif bisa berdiri sendiri.
section
Cocok ketika kita sedang membagi sebuah konten menjadi bagian berdasarkan topik.
Misalnya:
<article> <h1>Panduan Belajar HTML</h1>
<section> <h2>Tag HTML</h2> <p>...</p> </section>
<section> <h2>Form HTML</h2> <p>...</p> </section></article>Seluruhnya adalah satu artikel.
Di dalam artikel tersebut ada beberapa section.
Tidak perlu terlalu stres mencari jawaban sempurna untuk setiap kasus.
Yang penting kita mulai bertanya:
Bagian ini sebenarnya punya peran apa?
Pertanyaan itu jauh lebih berguna daripada:
Enaknya pakai tag apa biar kelihatan keren? 😄
aside: Konten Tambahan
Kadang kita punya informasi yang masih berhubungan dengan konten utama, tetapi bukan bagian inti.
Misalnya:
<aside> <h2>Baca Juga</h2> <a href="/html-form/">Membuat Form dengan HTML</a></aside>aside cocok untuk konten tambahan atau tangensial seperti:
- sidebar;
- informasi tambahan;
- rekomendasi terkait;
- catatan yang bukan bagian utama konten.
Tapi sekali lagi, jangan memilih elemen hanya berdasarkan posisi visual.
Sesuatu yang berada di sebelah kanan layar tidak otomatis harus menjadi <aside>.
Yang kita lihat adalah maknanya, bukan sekadar posisinya.
footer: Bagian Penutup
Terakhir ada:
<footer>Pada level halaman, footer sering berisi:
- copyright;
- informasi penulis atau pemilik situs;
- link tambahan;
- informasi penutup.
Contohnya:
<footer> <p>© 2026 BapakGabut</p></footer>Sama seperti <header>, <footer> juga tidak selalu hanya muncul satu kali.
Sebuah artikel bisa memiliki footer sendiri.
<article> <h2>Belajar HTML</h2>
<p>Isi artikel...</p>
<footer> <p>Ditulis oleh BapakGabut</p> </footer></article>Jadi jangan menghafalkan:
header = paling atas layarfooter = paling bawah layarLebih tepat pikirkan:
header↓bagian pembuka dari konteksnya
footer↓bagian penutup dari konteksnyaDari Tumpukan <div> Menjadi Struktur yang Bermakna
Sekarang mari kembali ke halaman kita tadi.
Awalnya:
<div> <div>BapakGabut</div>
<div> Beranda | Programming | Game </div>
<div> <div>Belajar HTML</div> <div>Isi artikel...</div> </div>
<div> Artikel lainnya... </div>
<div> © 2026 BapakGabut </div></div>Sekarang kita bisa membuat struktur yang lebih bermakna:
<header> <h1>BapakGabut</h1>
<nav> <a href="/">Beranda</a> <a href="/programming/">Programming</a> <a href="/game/">Game</a> </nav></header>
<main> <article> <h2>Belajar HTML</h2>
<section> <h3>Tag HTML</h3> <p>Isi pembahasan...</p> </section>
<section> <h3>Form HTML</h3> <p>Isi pembahasan...</p> </section> </article>
<aside> <h2>Artikel Lainnya</h2> <p>Rekomendasi artikel...</p> </aside></main>
<footer> <p>© 2026 BapakGabut</p></footer>Sekarang coba baca hanya nama elemennya:
header│└── nav
main│├── article│ ├── section│ └── section│└── aside
footerTanpa membaca seluruh isi teksnya pun kita sudah mendapatkan gambaran tentang struktur halaman.
Itulah salah satu kekuatan Semantic HTML.
Jadi, Apakah <div> Harus Dihindari?
Tidak.
Justru ini penting.
Setelah belajar Semantic HTML, jangan sampai kita berubah dari:
Semua pakai
<div>.
menjadi:
<div>haram. Semua harus semantic element!
😄
<div> tetap berguna.
Misalnya kita membutuhkan wrapper untuk keperluan layout atau styling:
<div class="card-wrapper"> ...</div>Kalau wrapper tersebut memang tidak mempunyai makna khusus dalam struktur konten, <div> adalah pilihan yang wajar.
Jadi bukan soal:
semantic element = bagusdiv = jelekLebih tepat:
Apakah bagian ini punya makna/peran yang sesuaidengan semantic element tertentu?
│ ┌────┴────┐ │ │ Ya Tidak │ │ ▼ ▼gunakan <div>elemenyang sesuaiTidak perlu memaksakan semantic element kalau memang tidak cocok.
Coba Baca Struktur Halaman BapakGabut
Sekarang coba lihat halaman yang sedang Gabuters baca.
Tanpa perlu mengetahui kode asli BapakGabut, kita bisa membayangkan sebuah halaman artikel memiliki struktur kurang lebih:
header│├── identitas situs└── nav
main│└── article │ ├── judul ├── isi artikel └── beberapa section
aside│└── informasi tambahan
footer│└── informasi situsImplementasi situs nyata tentu bisa berbeda dan lebih kompleks.
Tapi sekarang ketika melihat sebuah halaman web, coba jangan hanya melihat:
Ini teks.
Ini gambar.
Ini menu.
Mulailah bertanya:
Bagian ini berperan sebagai apa dalam struktur halaman?
Itulah cara berpikir yang ingin kita bangun lewat Semantic HTML.
Apa yang Sudah Kita Pelajari?
Kita sekarang mengenal beberapa elemen semantik:
<header>↓bagian pembuka
<nav>↓blok navigasi
<main>↓konten utama halaman
<article>↓konten yang relatif dapat berdiri sendiri
<section>↓bagian konten berdasarkan topik
<aside>↓konten tambahan/tangensial
<footer>↓bagian penutupDan yang paling penting:
Semantic HTML bukan soal mengganti semua <div> dengan tag yang namanya lebih keren.
Tujuannya adalah membuat struktur HTML lebih bermakna.
Kadang elemen semantik adalah pilihan yang tepat.
Kadang <div> memang yang kita butuhkan.
Yang berubah sekarang adalah kita sudah mulai memikirkan arti dari struktur yang kita buat.
Selanjutnya: Kita Gabungkan Semuanya
Sampai sini kita sudah belajar cukup banyak.
Kita sudah membuat halaman HTML pertama.
Kita mengenal tag, elemen, dan atribut.
Kita membuat form.
Sekarang kita juga sudah memahami bagaimana menyusun halaman dengan elemen yang lebih bermakna.
Daripada menambah teori baru terus-menerus, di artikel berikutnya kita akan menggabungkan semuanya menjadi sebuah mini project HTML.
Kita akan membuat halaman profil sederhana dari nol.
Belum cantik.
Belum ada animasi.
Belum ada tombol yang terbang ketika disentuh. 😄
Tapi strukturnya akan benar-benar kita buat sendiri menggunakan apa yang sudah dipelajari sepanjang series ini.
HTML
SelesaiBagikan Artikel
Buat poster berbagi atau salin tautan artikel ini.
Lanjut membaca
Coba jalur lain
Pilihan konsisten dari artikel lain
Terakhir diperbarui pada , 31 hari yang lalu
Sebagian konten mungkin sudah tidak berlaku