Technical SEO menengah
Redirect 301 vs 302 (dan 307, 308)
Untuk Google, pertanyaan pentingnya bukan "301 atau 302" melainkan "permanen atau sementara", karena itulah yang menentukan URL mana yang jadi canonical. Tabel di bawah menjawab kasus-kasus yang sebenarnya dihadapi orang.
| Kode | Arti | Dianggap Google | Method HTTP | Pakai untuk |
|---|---|---|---|---|
| 301 | Moved Permanently | Permanen | Boleh berubah ke GET | Halaman pindah, ganti domain, ganti struktur URL, HTTP ke HTTPS, www ke non-www |
| 302 | Found | Sementara | Boleh berubah ke GET | Pengalihan sementara: promo, pengalihan geo, A/B test |
| 307 | Temporary Redirect | Sementara | Dipertahankan | Sama dengan 302 tapi method dijaga; relevan untuk form POST |
| 308 | Permanent Redirect | Permanen | Dipertahankan | Sama dengan 301 tapi method dijaga |
Apa arti "permanen" dan "sementara" bagi Google
Dokumentasi Google menjelaskan redirect dalam istilah kanonikalisasi, bukan "link juice". Redirect permanen adalah sinyal kuat bahwa target redirect harus jadi canonical, sehingga hasil pencarian menampilkan URL baru. Redirect sementara adalah sinyal bahwa sumber redirect tetap canonical, sehingga hasil pencarian tetap menampilkan URL lama. Semua sinyal (link, isi) digabungkan ke URL canonical yang dipilih.
Dua konsekuensi praktis:
- Memakai 302 untuk pindah permanen tidak "membuang" sinyal, tapi URL lama bisa bertahan lebih lama di hasil pencarian, dan Google perlu waktu lebih lama untuk yakin bahwa pindahnya permanen. Google pernah menyatakan bahwa 302 yang bertahan lama akhirnya diperlakukan seperti 301, tapi tidak ada jaminan berapa lama.
- Memakai 301 untuk pengalihan sementara berisiko: Google mengganti canonical ke target, dan ketika redirect dicabut, URL lama harus "direbut kembali".
Cara redirect yang dikenali Google, dari yang paling andal
| Cara | Keandalan | Catatan |
|---|---|---|
| Redirect sisi server (HTTP 3xx) | Paling andal | Diproses saat crawl, sebelum render. Dikonfigurasi di .htaccess, Nginx, atau aplikasi. |
<meta http-equiv="refresh" content="0;url=..."> | Diterima | Delay 0 dianggap permanen; delay > 0 dianggap sementara. Butuh HTML dimuat dulu. |
JavaScript location.href = ... | Paling lemah | Hanya terbaca setelah render. Kalau render gagal atau tertunda, redirect tidak terlihat. Pakai hanya bila server tidak bisa diatur. |
| "Crypto redirect": halaman berisi link "konten pindah ke sini" | Bukan redirect | Google menyebutnya pilihan terakhir. Tidak memindahkan canonical. |
Aturan main saat membuat redirect
- Satu ke satu, ke halaman yang setara. Redirect semua URL lama ke beranda diperlakukan Google sebagai soft 404: sinyalnya tidak diteruskan, dan laporan Search Console mencatatnya sebagai halaman hilang.
- Hindari chain. A → B → C sebaiknya jadi A → C dan B → C. Dokumentasi Google menyatakan crawler-nya mengikuti sampai 10 hop, tapi tiap hop menambah waktu dan risiko, dan setelah batas itu Search Console melaporkan "Redirect error". Browser dan crawler lain lebih pelit.
- Hindari loop. A → B → A membuat kedua URL dilaporkan "Redirect error" dan tidak diindeks.
- Pertahankan redirect lama saat migrasi berikutnya. Kalau situs sudah pernah pindah dari X ke Y, lalu pindah lagi ke Z, perbarui aturan supaya X → Z langsung.
- Jangan hapus redirect terlalu cepat. Google menyarankan mempertahankannya minimal satu tahun; link dari situs lain ke URL lama akan terus ada bertahun-tahun.
- Redirect harus mengembalikan status yang benar. Halaman "Anda akan dialihkan..." dengan status 200 bukan redirect.
Contoh konfigurasi
# Apache (.htaccess), mod_rewrite aktif
RewriteEngine On
# Satu URL ke URL lain
Redirect 301 /blog/canonical-tag-lengkap/ https://www.example.com/technical-seo/canonical/
# Seluruh direktori lama ke direktori baru, mempertahankan sisa path
RewriteRule ^artikel/(.*)$ https://www.example.com/blog/$1 [R=301,L]
# non-www ke www (absolut, supaya aman di belakang proxy/CDN)
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]# Nginx, di dalam blok server
location = /blog/canonical-tag-lengkap/ {
return 301 https://www.example.com/technical-seo/canonical/;
}
location ~ ^/artikel/(.*)$ {
return 301 https://www.example.com/blog/$1;
}Kalau punya daftar puluhan atau ratusan pasangan URL, generator redirect di situs ini mengubahnya jadi aturan Apache atau Nginx sekaligus memeriksa duplikat, loop, dan chain.
Cara mengecek redirect
curl -sIL https://www.example.com/halaman-lama/ | grep -iE "^(HTTP|location)"
HTTP/1.1 301 Moved Permanently
location: https://www.example.com/halaman-baru/
HTTP/1.1 200 OKYang dicari: tepat satu baris 3xx diikuti satu baris 200. Dua atau lebih baris 3xx berarti chain. Kode 200 tanpa 3xx padahal halaman berpindah berarti redirect dilakukan lewat JavaScript atau tidak ada. Di Search Console, URL yang redirect muncul di Page indexing dengan alasan "Page with redirect"; itu normal dan bukan error. Yang perlu diperiksa adalah "Redirect error".
Skenario yang sering salah
| Skenario | Yang sering dilakukan | Yang sebaiknya |
|---|---|---|
| Produk habis permanen | 301 ke beranda | 301 ke kategori atau produk pengganti; kalau tidak ada, biarkan 404/410 |
| Halaman promo berakhir | 301 ke beranda | 302 ke halaman induk selama promo tidak aktif, atau kembalikan konten evergreen di URL yang sama |
| Ganti domain | Redirect beranda saja | Redirect per URL, lalu pakai Change of Address di Search Console |
| HTTP ke HTTPS | 302 dari CDN | 301 (atau 308) permanen; pastikan tidak ada chain HTTP → HTTPS non-www → HTTPS www |
| Halaman digabung ke halaman lain | Canonical dari halaman lama | 301 setelah isinya benar-benar dipindahkan |
Rujukan
- Redirects and Google Search Google Search Central
- Site moves with URL changes Google Search Central
- RFC 9110, section 15.4: Redirection 3xx IETF