Strategi 404: Bukan Sekadar Halaman Not Found
Memahami kapan 404 tepat dipakai, kapan tidak, dan cara merancang pengalaman 404 yang baik di API maupun website.
Alamat yang tidak ada di peta
Kamu mengikuti peta ke "Jalan Mawar 99", tapi jalan itu tidak ada. Bukan salahmu membaca peta, alamatnya memang tidak terdaftar. 404 Not Found berarti persis itu: server tidak menemukan apa pun di alamat yang diminta. Ini status code paling terkenal, tapi juga paling sering disalahgunakan.
Kenapa strategi 404 perlu dipikirkan
404 yang buruk membuat user tersesat: halaman putih, pesan teknis, tidak ada jalan kembali. 404 yang baik justru menenangkan: menjelaskan apa yang terjadi, memberi jalan keluar (pencarian, link populer, tombol kembali). Untuk API, 404 yang konsisten (format JSON standar) membuat frontend bisa menangani "data tidak ada" dengan elegan, bukan crash.
Contoh 1: 404 yang benar di API
GET /api/produk/99999 HTTP/1.1
Host: toko.contoh.idHTTP/1.1 404 Not Found
Content-Type: application/json
{"error": "Produk tidak ditemukan", "id": 99999}Frontend menanganinya sebagai kondisi normal:
const response = await fetch("/api/produk/99999");
if (response.status === 404) {
tampilkanPesan("Produk ini sudah tidak tersedia.");
} else {
const produk = await response.json();
tampilkanProduk(produk);
}Contoh 2: kapan JANGAN pakai 404
Kasus: mencari produk dengan filter yang tidak cocok.
GET /api/produk?q=xyz-tidak-ada HTTP/1.1
Host: toko.contoh.idHTTP/1.1 200 OK
{"data": [], "total": 0}Ini BUKAN 404. Endpoint-nya ada dan bekerja dengan benar, hanya hasilnya kosong. Aturannya: 404 untuk "alamat tidak ada", 200 dengan data kosong untuk "pencarian tidak cocok". Tertukar membuat frontend sulit membedakan error beneran dengan hasil kosong.
Kesalahan umum
Salah: 404 untuk semua kegagalan. Termasuk error validasi atau server. Yang benar: pilih status paling spesifik (400, 401, 500).
Salah: halaman 404 tanpa navigasi. User mentok tanpa jalan keluar. Yang benar: sertakan search box, link populer, dan tombol kembali.
Salah: SPA yang mengembalikan 200 untuk semua route. Refresh di route /profil menampilkan halaman kosong karena server tidak tahu route itu. Yang benar: konfigurasi server fallback ke index.html untuk route SPA (atau pakai 404 yang me-render aplikasi).
Checklist audit 404 untuk project-mu
Jalankan audit ini tiap sebelum rilis:
- Buka URL asal di website-mu. Apakah statusnya benar 404 (bukan 200)?
- Apakah halaman 404 punya search box dan link kembali?
- Panggil API dengan id acak. Apakah 404-nya JSON konsisten dengan format error lain?
- Cari
GET /favicon.ico 404di log: tambahkan favicon agar log bersih. - Untuk SPA: apakah refresh di route dalam menampilkan aplikasi (bukan halaman kosong)?
Lima menit audit ini mencegah pengalaman paling memalukan: user tersesat di halaman kosong tanpa jalan pulang.
Catatan teknis: Untuk SEO, pastikan halaman 404 benar-benar mengembalikan status 404, bukan 200 dengan tampilan "not found". Mesin pencari memakai status code untuk memutuskan apakah URL dihapus dari indeks.
Tantangan
Audit 404 di website sendiri
Pilih satu website (boleh project-mu sendiri):
- Buka URL yang jelas tidak ada (misalnya /halaman-ini-tidak-ada-xyz).
- Catat: status code-nya berapa? Apakah halamannya membantu (ada search/navigasi)?
- Cek satu API: panggil endpoint dengan id asal, apakah 404-nya berupa JSON yang konsisten?
Tulis hasil auditmu dalam 3 poin.