- Bab 2 dari 10
- 25 menit
- 1 latihan kode
- 4 soal kuis
Elemen Semantik HTML5
Di bab ini (8 bagian)
Tujuan bab ini
- Mengenal elemen semantik HTML5:
header,nav,main,article,section,aside,footer,figure/figcaption, dantime. - Memahami kenapa semantik penting untuk aksesibilitas, SEO, dan keterbacaan kode.
- Bisa memilih kapan memakai
<div>dan kapan memakai elemen semantik. - Menyusun outline heading yang rapi.
Masalah "div soup"
Sebelum HTML5, hampir semua tata letak dibuat dengan <div>:
Kode ini jalan, tampilannya bisa dibuat cantik dengan CSS. Masalahnya, bagi browser, screen reader, dan mesin pencari, semua kotak itu sama saja: "sebuah div". Nama class seperti header hanya bermakna bagi manusia yang membacanya, bukan bagi mesin. Developer menyebut kondisi ini div soup, sup berisi div.
HTML5 menyelesaikannya dengan elemen yang namanya sudah membawa makna.
Kenalan dengan elemen semantik
| Elemen | Isi yang cocok |
|---|---|
<header> | Bagian pembuka: logo, judul situs, atau judul sebuah artikel |
<nav> | Kumpulan tautan navigasi utama |
<main> | Konten inti halaman, hanya satu yang tampil per halaman |
<article> | Konten mandiri yang masuk akal dibaca sendiri: postingan blog, berita, kartu produk, komentar |
<section> | Kelompok konten bertema, biasanya punya heading sendiri |
<aside> | Konten pendukung: sidebar, info tambahan, tautan terkait |
<footer> | Bagian penutup: hak cipta, kontak, info penulis |
<figure> + <figcaption> | Gambar, diagram, atau potongan kode beserta keterangannya |
<time> | Tanggal atau waktu, dengan atribut datetime yang bisa dibaca mesin |
Ini halaman blog yang sama, ditulis ulang secara semantik:
Tanpa CSS apa pun, tampilannya masih mirip versi div: teks tersusun dari atas ke bawah. Elemen semantik tidak punya gaya khusus (paling hanya display: block). Bedanya ada di makna yang tercatat di DOM.
Beberapa detail yang sering bikin bingung:
<header>dan<footer>tidak hanya untuk bagian atas dan bawah halaman. Sebuah<article>boleh punya<header>sendiri (judul dan tanggal) dan<footer>sendiri (nama penulis, tag).<main>tidak boleh berada di dalam<article>,<aside>,<header>,<footer>, atau<nav>. Ia berdiri sebagai bagian utama halaman.<time>menampilkan teks yang ramah manusia ("14 Maret 2026"), sementaradatetime="2026-03-14"memberi format standar yang dimengerti mesin, misalnya kalender atau mesin pencari.<figure>tidak khusus gambar. Potongan kode, grafik, atau kutipan dengan keterangan juga cocok.
Kenapa semantik penting?
1. Aksesibilitas
Pengguna screen reader sering menjelajah halaman lewat landmark. Elemen <nav>, <main>, <aside>, serta <header> dan <footer> di level halaman otomatis dikenali sebagai landmark. Pengguna bisa langsung lompat "ke konten utama" atau "ke navigasi" tanpa mendengarkan seluruh halaman dari awal. Dengan div soup, fitur itu tidak ada.
2. SEO
Mesin pencari membaca struktur halaman untuk memahami mana konten utama dan mana pelengkap. Isi <article> dan heading yang tertata memberi sinyal yang jelas. Semantik bukan tombol ajaib peringkat satu, tapi membantu mesin pencari memahami halamanmu dengan benar.
3. Keterbacaan kode
Bandingkan </div></div></div> dengan </section></article></main>. Yang kedua langsung memberi tahu kamu sedang menutup apa. Teman setim (dan kamu sendiri tiga bulan lagi) akan berterima kasih.
Jadi, div dilarang?
Tidak. <div> tetap berguna sebagai pembungkus netral untuk keperluan tampilan, misalnya membungkus beberapa kartu agar bisa diatur dengan Flexbox atau Grid. Aturan praktisnya:
- Tanya dulu: "Apakah bagian ini punya makna?" Kalau ya, cari elemen semantik yang cocok.
- Kalau bagian itu hanya ada demi styling atau layout, pakai
<div>. - Bingung antara
<article>dan<section>? Tes ini: kalau potongan itu dipindah ke halaman lain dan tetap masuk akal sendirian, pakai<article>. Kalau ia hanya bagian dari sesuatu yang lebih besar, pakai<section>.
Untuk teks sebaris tanpa makna khusus, pasangan <div> adalah <span>.
Sebelum menulis HTML, coba sketsa halamanmu di kertas lalu beri label setiap kotak: "ini header", "ini navigasi", "ini artikel", "ini sidebar". Label itu hampir selalu langsung menunjuk elemen semantik yang tepat. Kotak yang tidak bisa kamu beri nama bermakna biasanya memang cukup jadi <div>.
Outline heading
Heading membentuk semacam daftar isi tak terlihat yang disebut outline. Screen reader bisa menampilkan daftar heading dan pengguna melompat ke bagian yang diinginkan. Supaya outline rapi:
- Pakai satu
<h1>sebagai judul utama halaman. - Turun satu tingkat setiap masuk ke sub-bagian:
h1laluh2laluh3. Jangan lompat darih2keh4. - Bagian yang setingkat memakai heading yang setingkat.
Outline contoh di atas kira-kira seperti ini:
Dulu spesifikasi HTML5 sempat menjanjikan "outline algorithm": setiap <section> boleh pakai <h1> dan browser akan menghitung tingkatnya sendiri. Fitur ini tidak pernah diterapkan oleh browser dan screen reader, lalu dihapus dari standar. Jadi, tetap atur tingkat heading secara manual.
Kesalahan umum
- Memakai
<section>sebagai pengganti<div>di mana-mana. Section seharusnya punya tema dan biasanya heading. Kalau cuma pembungkus layout, pakai div. - Lebih dari satu
<main>yang tampil dalam satu halaman. - Membungkus setiap kumpulan link dengan
<nav>. Nav untuk navigasi utama atau penting, bukan setiap link di footer. - Memilih heading karena ukuran hurufnya sehingga outline jadi loncat-loncat.
- Menulis
<time>tanpadatetimeuntuk teks seperti "kemarin" atau "14 Maret". Mesin tidak bisa membacanya tanpa format standar. - Mengira elemen semantik mengubah tampilan. Tampilan tetap urusan CSS.
Rangkuman
- Elemen semantik memberi makna pada struktur:
header,nav,main,article,section,aside,footer,figure/figcaption,time. - Manfaatnya: landmark untuk screen reader, sinyal yang jelas untuk mesin pencari, dan kode yang mudah dibaca.
<div>tetap dipakai untuk pembungkus netral demi layout. Piliharticleuntuk konten mandiri,sectionuntuk bagian bertema.- Susun heading berurutan tanpa melompat tingkat, satu
<h1>untuk judul utama.
Slide 6 sampai 6 dari deck HTML5 dan CSS3. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Latihan kode (1)
- 3. Kuis (4 soal)
Latihan kode: Ubah div soup jadi semantik
Halaman blog ini seluruhnya dibuat dari <div>. Tulis ulang dengan elemen semantik:
- Bagian atas jadi
<header>, dan kumpulan link di dalamnya jadi<nav>. - Bungkus postingan dan sidebar dengan satu
<main>. - Postingan jadi
<article>, sidebar jadi<aside>. - Tanggal di postingan dibungkus
<time>dengandatetime="2026-03-14". - Bagian hak cipta jadi
<footer>langsung di dalam body.
Cek pemahaman
1Elemen mana yang paling tepat untuk membungkus satu postingan blog yang tetap masuk akal dibaca sendiri?
2Dalam satu halaman boleh ada beberapa elemen `<main>` yang tampil bersamaan.
3Apa warna teks "Promo Minggu Ini"?
<style> h2 { color: black; } main h2 { color: blue; } aside h2 { color: green; } </style> <main> <article><h2>Cara Seduh V60</h2></article> <aside><h2>Promo Minggu Ini</h2></aside> </main>4Kenapa `<time datetime="2026-03-14">14 Maret 2026</time>` lebih baik daripada teks tanggal biasa?