304 Tidak Diubah

Arti respons HTTP 304 Tidak Diubah, alasan kode ini termasuk kelas 3xx tetapi bukan redirect, cara ETag dan Last-Modified bekerja, serta cara mengukur manfaat efisiensi crawl tanpa dampak langsung pada peringkat.

Pertama kali diterbitkan: 3 Jul 2026 · Terakhir diperbarui: 6 Agu 2026 · Advanced
Bahasa
1 sinyal bukti di halaman ini

HTTP 304 Tidak Diubah adalah respons atas permintaan GET atau HEAD bersyarat yang kondisinya false dan seharusnya menghasilkan 200. Ini adalah respons kelas 3xx, tetapi bukan redirect: tidak memiliki header Location, URL baru, atau body. Klien memakai If-None-Match terhadap ETag dan/atau If-Modified-Since terhadap Last-Modified; ketika validator cocok, server mengembalikan 304 dan klien memakai salinan cache. Tidak ada efek peringkat langsung atau perubahan indexing selain kemungkinan penghitungan ulang sinyal URL oleh Google. Pada situs besar, penghematan bandwidth dan komputasi dapat secara tidak langsung meningkatkan efisiensi crawl, tanpa menjanjikan alokasi ulang anggaran crawl. Google merekomendasikan ETag sebagai validator utama dan menyarankan invalidasi hanya untuk perubahan konten yang signifikan. Jangan samakan 304 dengan redirect 301/302/307/308 atau 204 No Content.

TL;DR — 304 adalah respons atas GET/HEAD bersyarat yang kondisinya bernilai false dan seharusnya menghasilkan 200 (RFC 9110 §15.4.5). Respons ini berada di kelas 3xx, tetapi bukan redirect: tidak ada Location, URL baru, atau—secara normatif—body (“it cannot contain content or trailers” (terjemahan) “tidak boleh memuat konten atau trailer”). Kondisi dibawa oleh If-None-Match (dibandingkan dengan ETag) dan/atau If-Modified-Since (dibandingkan dengan Last-Modified). Jika validator masih cocok, server mengembalikan 304 dan klien memakai cache-nya. Dampak SEO: tidak ada efek peringkat langsung—Google sudah memiliki konten, meski Search masih dapat menghitung ulang sinyal URL—serta ada penghematan sumber daya pada situs besar. Google menyebutnya dapat secara tidak langsung meningkatkan efisiensi crawl, bukan menjanjikan pengalokasian ulang anggaran crawl. Infrastruktur crawling Google mendukung kedua validator dan merekomendasikan ETag sebagai yang utama. Bandingkan dengan 301/302/307/308 (yang memindahkan URL) dan 204 (juga tanpa body, tetapi karena memang tidak ada yang dikirim).

Arti 304 menurut spesifikasi

RFC 9110 (HTTP Semantics) §15.4.5 mendefinisikannya secara tepat: “The 304 (Not Modified) status code indicates that a conditional GET or HEAD request has been received and would have resulted in a 200 (OK) response if it were not for the fact that the condition evaluated to false.” (terjemahan) “Kode status 304 (Not Modified) menunjukkan bahwa permintaan GET atau HEAD bersyarat telah diterima dan akan menghasilkan respons 200 (OK) jika kondisinya tidak bernilai false.” Itulah pemicu normatifnya: GET/HEAD bersyarat yang kondisinya false dan seharusnya menghasilkan 200. Dengan kata sederhana, klien meminta halaman hanya jika berubah, server melihat belum berubah, lalu tidak mengirim body. “Kunjungan kedua” adalah contoh sehari-hari saat permintaan menjadi bersyarat karena klien melampirkan validator dari respons sebelumnya, bukan aturan protokol; spesifikasi tidak mengharuskan kunjungan sebelumnya. Evidence for this claim RFC 9110 defines 304 Not Modified as the response to a conditional GET or HEAD when the selected representation has not changed and says the response cannot contain content. Scope: HTTP semantics for 304 conditional responses. Confidence: high · Verified: IETF: RFC 9110 §15.4.5 — 304 Not Modified

Spesifikasi bahkan memakai kata “redirecting”: “the server is therefore redirecting the client to make use of that stored representation as if it were the content of a 200 (OK) response” (terjemahan) “server mengarahkan klien untuk memakai representasi tersimpan seolah-olah itu isi respons 200 (OK)”. Bacalah dengan saksama: klien diarahkan kembali ke cache miliknya sendiri, bukan ke URL lain. Tidak ada header Location dan tidak ada alamat baru. Kalimat inilah yang paling sering menimbulkan pertanyaan apakah 304 adalah redirect. Dalam pengertian HTTP, bukan.

Dua poin normatif lain juga penting:

  • Tidak pernah ada body. RFC 9110 menyatakan: “A 304 response is terminated by the end of the header section; it cannot contain content or trailers.” (terjemahan) “Respons 304 berakhir pada akhir bagian header; respons ini tidak boleh memuat konten atau trailer.” 304 yang mengirim body melanggar spesifikasi dan dapat disalahartikan oleh sebagian klien. Ini aturan keras, bukan pilihan gaya.
  • Metadata-nya sama seperti yang akan dibawa 200. Server “MUST generate any of the following header fields that would have been sent in a 200 (OK) response to the same request: Content-Location, Date, ETag, and Vary,” (terjemahan) “WAJIB menghasilkan field header yang akan dikirim pada respons 200 (OK) untuk permintaan yang sama: Content-Location, Date, ETag, dan Vary,” ditambah Cache-Control dan Expires jika berlaku. Jadi 304 membawa header 200 tanpa payload.
Evidence for this claim A 304 response terminates after the header section and cannot contain content or trailers. Scope: conditional GET and HEAD Confidence: high · Verified: RFC 9110 §15.4.5: 304 Not Modified

Cara kerja 304: permintaan bersyarat

Server tidak pernah mengirim 304 tanpa alasan. Respons ini selalu merupakan jawaban atas permintaan bersyarat—permintaan yang dibuat bersyarat oleh klien dengan melampirkan validator yang disimpan dari respons sebelumnya. Ada dua validator.

ETag dan If-None-Match

ETag (entity tag) adalah token buram yang ditempelkan server pada respons 200—anggap sebagai sidik jari versi untuk representasi URL tersebut. Pada permintaan berikutnya ke URL itu, klien mengirim kembali nilai yang disimpan dalam header If-None-Match. Server membandingkan: jika ETag saat ini masih cocok, tidak ada perubahan dan server mengembalikan 304; jika berbeda, server mengembalikan 200 baru dengan konten dan ETag baru.

Last-Modified dan If-Modified-Since

Alternatif berbasis tanggal: server mengirim timestamp Last-Modified pada 200. Pada permintaan berikutnya, klien mengirimkannya kembali dalam header If-Modified-Since dan server membandingkan tanggal. Jika sumber daya belum berubah sejak timestamp itu, jawabannya 304. Cara ini lebih sederhana tetapi lebih kasar (ketelitiannya hanya setara timestamp) dan sensitif terhadap format HTTP-date yang tepat, sumber bug yang umum. Jika kedua validator ada, If-None-Match (ETag) memiliki prioritas atas If-Modified-Since.

ETag kuat dan lemah

ETag dapat kuat atau lemah, dan perbedaannya penting. Menurut panduan conditional request MDN, “strong validation consists of guaranteeing that the resource is, byte to byte, identical to the one it is compared to.” (terjemahan) “validasi kuat menjamin bahwa sumber daya identik byte demi byte dengan pembandingnya.” ETag lemah diawali W/ (misalnya ETag: W/"abc123") dan hanya menyatakan kesetaraan semantik—contoh MDN: “a page that would differ from another only by a different date in its footer, or different advertising, would be considered identical to the other with weak validation.” (terjemahan) “halaman yang hanya berbeda tanggal footer atau iklannya akan dianggap identik pada validasi lemah.” ETag kuat (tanpa awalan) diperlukan untuk permintaan rentang yang membutuhkan kecocokan byte; ETag lemah berguna ketika kompresi, spasi, atau perbedaan kecil tidak substantif seharusnya tidak memicu pengambilan ulang. Jebakan praktisnya: ETag yang berubah setiap kali gzip/Brotli dikompresi ulang atau berbeda antarserver seimbang-beban akan memicu crawl ulang yang tidak perlu. Pilih kuat atau lemah dengan sengaja dan pertahankan nilainya untuk konten yang benar-benar tidak berubah.

Jabat tangan lengkap, langkah demi langkah

  1. Permintaan pertama → server mengembalikan 200 OK dengan konten serta ETag dan/atau Last-Modified.
  2. Klien menyimpan konten dan validator tersebut.
  3. Permintaan berikutnya → klien mengirim If-None-Match dan/atau If-Modified-Since bersama nilai yang tersimpan.
  4. Server memutuskan: tidak berubah → 304 Not Modified tanpa body dan klien memakai cache; berubah → 200 OK dengan body serta validator baru. Evidence for this claim RFC 9111 defines validation as checking whether a stored response remains current, typically with a conditional request that can receive 304 Not Modified. Scope: HTTP cache validation; it does not create a Search ranking benefit. Confidence: high · Verified: IETF: RFC 9111 §4.3 — Validation

Jika ingin membahas caching dan validator lebih dalam sebagai pengungkit efisiensi crawl—seluruh mekanisme permintaan bersyarat dan kaitannya dengan anggaran crawl—itu merupakan topik pendamping; artikel ini berfokus pada kode status.

304 dan SEO: tanpa efek peringkat, tetapi nyata untuk efisiensi crawl

Inilah keseluruhan cerita SEO-nya, dan lebih sempit daripada klaim blog yang sering diulang. 304 tidak memiliki efek peringkat langsung, dan panduan Google tentang pengaruh kode status terhadap crawling dan indexing juga membatasi efek pengindeksannya: Search masih dapat menghitung ulang sinyal URL, tetapi selain itu 304 tidak mengubah cara halaman diindeks. Google sudah memiliki konten dari crawl sebelumnya; 304 hanya mengonfirmasi bahwa tidak ada perubahan sehingga Google tetap memakai konten yang ada. Tidak ada bonus peringkat karena mengembalikan 304.

Yang diberikan 304 adalah penghematan sumber daya yang dapat secara tidak langsung meningkatkan efisiensi crawl. Dalam tulisan Google Search Central Desember 2024 tentang HTTP caching, Gary Illyes menjelaskannya: “Especially if you have a large site with rarely-changing content under individual URLs, allowing caching locally may help your site be crawled more efficiently. Google’s crawling infrastructure supports heuristic HTTP caching as defined by the HTTP caching standard, specifically through the ETag response- and If-None-Match request header, and the Last-Modified response- and If-Modified-Since request header.” (terjemahan) “Khususnya jika situs Anda besar dan konten pada URL individual jarang berubah, caching lokal dapat membantu situs di-crawl lebih efisien. Infrastruktur crawling Google mendukung HTTP caching heuristik sesuai standar HTTP caching, khususnya melalui header respons ETag dan header permintaan If-None-Match, serta header respons Last-Modified dan header permintaan If-Modified-Since.”

Tulisan yang sama menjelaskan mekanisme 304 secara eksplisit: jika ETag yang dikirim crawler “matches the current value the server generated, your server should return an HTTP 304 (Not modified) status code with no HTTP body,” (terjemahan) “cocok dengan nilai terbaru yang dibuat server, server seharusnya mengembalikan kode status HTTP 304 (Not modified) tanpa body HTTP”. Bagian “no HTTP body” penting karena “your server doesn’t have to spend compute resources on actually generating content” (terjemahan) “server tidak perlu menghabiskan sumber daya komputasi untuk membuat konten” dan “doesn’t have to transfer the HTTP body” (terjemahan) “tidak perlu mentransfer body HTTP”. Anda menghemat komputasi dan bandwidth di kedua sisi. Google menyebut manfaat akhirnya secara bersyarat: penghematan ini dapat secara tidak langsung meningkatkan efisiensi crawl. Itu bukan janji bahwa upaya yang dihemat otomatis dialihkan ke URL baru atau yang diperbarui; anggap sebagai mekanisme penghematan dengan efek limpahan yang masuk akal, bukan kepastian.

Mengapa lebih penting pada situs besar

Jika hanya memiliki beberapa ratus halaman, hal ini sebagian besar bersifat akademis—Google dapat merayapi seluruh situs dengan nyaman. Manfaat meningkat seiring ukuran: situs dengan ratusan ribu atau jutaan URL, banyak di antaranya jarang berubah, memperoleh manfaat nyata ketika crawler melewati pengambilan ulang halaman yang tidak berubah. Itulah sasaran tulisan Google, jadi pertahankan pembingkaian yang jujur; jangan menjual 304 sebagai taktik khusus situs kecil.

ETag atau Last-Modified, dan apa yang dianggap “berubah”

Google merekomendasikan ETag sebagai validator utama: “We strongly recommend using ETag because it’s less prone to errors and mistakes (the value is not structured unlike the Last-Modified value).” (terjemahan) “Kami sangat merekomendasikan ETag karena lebih kecil kemungkinannya menimbulkan error dan kesalahan (nilainya tidak terstruktur seperti Last-Modified).” Memasang keduanya boleh dan dianjurkan. Jika memakai Last-Modified, tanggal “must be formatted according to the HTTP standard” (terjemahan) “harus diformat sesuai standar HTTP”—Google merekomendasikan format “Weekday, DD Mon YYYY HH:MM:SS Timezone,” (terjemahan) “Weekday, DD Mon YYYY HH:MM:SS Timezone,” misalnya “Fri, 4 Sep 1998 19:15:56 GMT” (terjemahan) “Fri, 4 Sep 1998 19:15:56 GMT”—atau tanggal dapat diabaikan diam-diam. Google juga menyarankan field max-age pada Cache-Control agar crawler dapat menentukan kapan harus crawl ulang.

Evidence for this claim Google's crawler guidance recommends ETag because its opaque value avoids date-formatting errors, while also allowing both ETag and Last-Modified; this is Google-specific operational advice, not a change to HTTP validator semantics. Scope: HTTP cache validation Confidence: high · Verified: Crawling December: HTTP caching

Anda yang menentukan perubahan apa yang layak membatalkan cache. Saran Google adalah menyimpan invalidasi untuk perubahan substantif: “Our recommendation is that you require a cache refresh on significant changes to your content; if you only updated the copyright date at the bottom of your page, that’s probably not significant.” (terjemahan) “Kami menyarankan refresh cache diwajibkan untuk perubahan signifikan pada konten; jika hanya tanggal hak cipta di bagian bawah halaman yang diperbarui, kemungkinan itu tidak signifikan.”

Perilaku Googlebot dan Bingbot

Tidak setiap permintaan crawler bersyarat. Dokumentasi crawler Google mencatat bahwa dukungan caching berbeda antara crawler dan fetcher sesuai produk yang dilayani—Googlebot mendukung caching ketika melakukan crawl ulang URL untuk Search, sedangkan sebagian fetcher Google hanya mendukungnya dalam kondisi tertentu. Jadi, meski header dikonfigurasi benar, jangan mengharapkan 100% permintaan membawa If-None-Match/If-Modified-Since. Untuk Bing, permintaan bersyarat bukan fitur khusus Google. Crawler Bing telah mendukung GET bersyarat (mengirim If-Modified-Since dan, jika tersedia, If-None-Match serta menerima 304 ketika konten tidak berubah) setidaknya sejak tulisan blog Live Search tahun 2008, meski Bing belum menerbitkan tulisan modern yang setara dengan artikel Google 2024. Perlakukan mekanismenya sebagai perilaku HTTP generik yang berlaku bagi kedua mesin.

Cara menerapkan dukungan 304

  1. Kirim validator pada 200. Konfigurasikan server, CDN, atau aplikasi agar menambahkan header ETag (disarankan) dan/atau Last-Modified yang diformat benar pada respons 200 biasa. Banyak server dan framework membuat ETag otomatis untuk file statis; respons dinamis biasanya memerlukan opt-in.
  2. Hormati header bersyarat saat diterima. Ketika permintaan datang dengan If-None-Match/If-Modified-Since, bandingkan dengan validator saat ini dan kembalikan 304 (tanpa body) jika masih cocok, atau 200 baru jika tidak. Server file statis sering menangani ini otomatis; route aplikasi dan edge worker sering memerlukan konfigurasi tambahan.
  3. Tentukan arti “berubah” dan pertahankan ETag stabil untuk konten yang benar-benar tidak berubah—jangan biarkan kompresi ulang atau variasi antarserver mengubahnya tanpa alasan.
  4. Waspadai salah konfigurasi umum:
    • Selalu-200—tidak pernah mengirim validator, sehingga tidak ada permintaan yang menjadi bersyarat dan manfaat efisiensi hilang.
    • ETag tidak stabil—nilai berubah walau konten tidak (load balancer atau kompresi ulang), memaksa pengambilan ulang terus-menerus.
    • 304 basi—yang paling berbahaya: server terus mengembalikan 304 (atau ETag tidak berubah) setelah konten benar-benar berubah, sehingga crawler dan cache tidak pernah mengambil pembaruan. Ini bug yang harus ditemukan lewat analisis log, bukan kelemahan bawaan 304.

304 dibandingkan kode status lain

304 dibandingkan dengan 301 / 302 / 307 / 308

Kode-kode itulah redirect yang sebenarnya. 301/308 (permanen) atau 302/307 (sementara) membawa header Location dan memindahkan klien ke URL berbeda301/308 juga meneruskan sinyal kanonik. 304 tidak memiliki Location, tidak memindahkan siapa pun, dan tidak meneruskan sinyal peringkat. Kelas 3xx-nya sama menurut angka, tetapi tugasnya sepenuhnya berbeda. Detail setiap kode redirect ada di artikel masing-masing (lihat artikel 301 redirect dan hub redirect).

304 dibandingkan dengan 204 No Content

Keduanya tanpa body, tetapi alasannya sepenuhnya berbeda. 204 No Content adalah keberhasilan 2xx dengan body sengaja kosong karena server memang tidak memiliki apa pun untuk dikirim—misalnya DELETE/PUT API yang berhasil atau beacon analitik. 304 juga tidak mengirim body, tetapi bukan karena tidak ada yang dikirim; alasannya adalah “salinan itu sudah Anda miliki dan masih valid”. Jangan campuradukkan: 204 pada URL halaman dapat dianggap soft 404 karena tidak ada konten yang bisa diindeks, sedangkan 304 mengonfirmasi validitas konten yang sudah dimiliki Google. Artikel 204 No Content membahas kode itu secara lengkap.

Mitos umum tentang 304

  1. “304 adalah redirect.” Tidak ada header Location dan tidak ada yang berpindah. Klien memakai salinan cache miliknya. Frasa RFC 9110 “redirecting the client to make use of that stored representation” (terjemahan) “mengarahkan klien untuk memakai representasi tersimpan” berarti kembali ke cache, bukan ke URL lain.
  2. “304 adalah error yang harus diperbaiki.” Ini hasil yang benar dari konfigurasi permintaan bersyarat yang berfungsi. Melihat 304 dalam crawl atau DevTools menandakan caching bekerja—salah satu miskonsepsi paling umum di SERP.
  3. “304 membantu peringkat.” Tidak ada efek peringkat langsung, dan efek pengindeksannya juga terbatas—Search dapat menghitung ulang sinyal URL, tetapi 304 tidak mengubah indexing. Manfaatnya adalah penghematan sumber daya yang menurut Google dapat secara tidak langsung meningkatkan efisiensi crawl pada situs sangat besar; ini bukan sinyal peringkat atau jaminan pengalihan usaha ke URL lain.
  4. “If my server returns 304, Google will use stale content forever.” (terjemahan) “Jika server saya mengembalikan 304, Google akan selamanya memakai konten basi.” 304 hanya muncul selama validator masih cocok. Begitu konten benar-benar berubah, server yang benar mengembalikan 200 baru dengan validator baru. Risikonya adalah server salah konfigurasi yang tetap mengembalikan 304 setelah perubahan—itu bug, bukan sifat 304. Evidence for this claim RFC 9111 defines validation as checking whether a stored response remains current, typically with a conditional request that can receive 304 Not Modified. Scope: HTTP cache validation; it does not create a Search ranking benefit. Confidence: high · Verified: IETF: RFC 9111 §4.3 — Validation
  5. “ETag dan Last-Modified dapat dipertukarkan.” Keduanya validator, tetapi Last-Modified sensitif terhadap format tanggal dan ketelitiannya hanya sebesar timestamp, sedangkan ETag buram dan presisi (meski dapat berbeda antarserver atau setelah kompresi ulang jika diterapkan ceroboh). Google merekomendasikan ETag sebagai utama; gunakan keduanya bila bisa.

FAQ

Apakah HTTP 304 merupakan error? Tidak—ini sinyal keberhasilan bahwa caching bekerja. Artinya salinan yang tersimpan di klien masih valid.

Apakah 304 Not Modified adalah redirect? Tidak. Secara penomoran ia berada di kelas 3xx, tetapi tidak memiliki header Location dan tidak memindahkan klien ke URL baru.

Apakah 304 membantu SEO atau peringkat? Tidak ada efek peringkat langsung dan tidak ada efek indexing selain kemungkinan Google menghitung ulang sinyal URL. Respons ini menghemat bandwidth dan komputasi dengan membiarkan crawler melewati halaman yang tidak berubah; Google menyebutnya dapat secara tidak langsung meningkatkan efisiensi crawl pada situs besar.

Apa perbedaan ETag dan Last-Modified? ETag adalah sidik jari versi buram yang dicocokkan melalui If-None-Match; Last-Modified adalah timestamp yang dicocokkan melalui If-Modified-Since. Google merekomendasikan ETag karena lebih kecil kemungkinan salah.

Apa perbedaan ETag lemah dan kuat? ETag kuat menyatakan konten identik byte demi byte; ETag lemah (diawali W/) menyatakan kesetaraan semantik dan menoleransi perbedaan kecil seperti kompresi atau tanggal footer.

Mengapa saya melihat respons Not Modified di log atau laporan crawl? Karena klien mengirim permintaan bersyarat dan server dengan benar mengonfirmasi bahwa konten belum berubah. Itu wajar dan baik.

Bagaimana membuat server mengembalikan 304 dengan benar? Kirim ETag/Last-Modified pada 200, lalu hormati If-None-Match/If-Modified-Since pada permintaan berikutnya dengan mengembalikan 304 tanpa body ketika validator masih cocok.

Apa perbedaan 304 dan 204? Keduanya tanpa body; 204 karena memang tidak ada yang dikirim, sedangkan 304 karena klien sudah memiliki salinan yang masih valid.

Apakah Googlebot mengirim header bersyarat pada setiap permintaan? Tidak—dukungan caching berbeda menurut crawler, sehingga tidak setiap permintaan bersyarat meskipun header sudah dikonfigurasi.

Bolehkah respons 304 memiliki body? Tidak. RFC 9110 menyatakan “it cannot contain content or trailers.” (terjemahan) “respons ini tidak boleh memuat konten atau trailer.” 304 yang memiliki body melanggar spesifikasi.

Evidence for this claim A 304 response terminates after the header section and cannot contain content or trailers. Scope: conditional GET and HEAD Confidence: high · Verified: RFC 9110 §15.4.5: 304 Not Modified

Try it live

This is a real endpoint on this site — not a simulation. Hit it from the button, open it in a new tab, or curl -i it from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.