301 vs 302 vs 307 vs 308: Redirect Mana yang Harus Dipakai
Memilih redirect yang salah bisa membuat URL lama tetap ada di Google selama berbulan-bulan, atau mengubah pengiriman form menjadi request GET yang kehilangan datanya. Berikut arti setiap kode status, mana yang harus dipakai, dan cara memastikan redirect kamu berjalan dengan benar.
Empat redirect sekilas
| Status | Permanen? | Mempertahankan method dan body? | Dipakai untuk |
|---|---|---|---|
301 Moved Permanently | Ya | Tidak dijamin (POST bisa berubah jadi GET) | Halaman yang pindah, HTTP → HTTPS, perubahan domain |
302 Found | Tidak | Tidak dijamin | Pindah sementara, A/B test, maintenance |
307 Temporary Redirect | Tidak | Ya | Pindah sementara untuk endpoint API dan form |
308 Permanent Redirect | Ya | Ya | Pindah permanen untuk endpoint API yang menerima POST |
Untuk SEO, Google memperlakukan 301 dan 308 sebagai sinyal kuat bahwa URL baru harus menggantikan URL lama, dan meneruskan sinyal peringkat ke URL tersebut. 302 dan 307 memberi tahu Google untuk tetap mengindeks URL lama. Penjelasan lengkap untuk setiap kode ada di referensi HTTP Status Codes.
Mana yang harus dipilih
- Halaman pindah permanen (slug baru, artikel digabung, domain baru) → 301.
- HTTP ke HTTPS, www ke non-www → 301 (atau 308).
- Sementara (halaman promo, maintenance, routing berdasarkan lokasi atau bahasa) → 302.
- Endpoint API atau handler form dipindah → 308 (permanen) atau 307 (sementara), supaya data POST tidak hilang.
Hindari chain dan loop
Chain adalah /a → /b → /c: setiap lompatan menambah satu round trip, dan crawler bisa berhenti mengikuti setelah beberapa lompatan. Loop (/a → /b → /a) membuat halaman tidak bisa diakses sama sekali. Setelah migrasi, arahkan setiap URL lama langsung ke tujuan akhirnya. Periksa jalur lengkap URL apa pun, termasuk setiap lompatan, status, dan waktunya, dengan Redirect Checker, dan pastikan versi http, https, www, dan non-www semuanya berakhir di tempat yang sama.
Aturan siap pakai
Apache (.htaccess):
Redirect 301 /old-page /new-page
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Nginx:
location = /old-page { return 301 /new-page; }
server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
Vercel (vercel.json): "permanent": true mengirim 308, yang oleh Google diperlakukan seperti 301.
{ "redirects": [ { "source": "/old-page", "destination": "/new-page", "permanent": true } ] }
Ubah spreadsheet berisi daftar URL lama → baru menjadi aturan untuk server apa pun dengan Redirect Generator, atau buat konfigurasi Apache lengkap dengan .htaccess Generator.
Checklist migrasi
- Petakan setiap URL lama ke URL baru yang paling relevan, jangan semuanya ke halaman utama, karena Google memperlakukannya sebagai soft 404.
- Gunakan 301 (atau 308) untuk perpindahan permanen dan pertahankan minimal selama satu tahun.
- Perbarui link internal dan sitemap ke URL baru, sehingga redirect hanya menjadi jaring pengaman.
- Uji sampel URL lama, lalu pantau laporan Pages di Search Console untuk melihat 404.