301 Moved Permanently
Penggunaan
Ketika status code 301 Moved Permanently diterima, klien diharapkan memperbarui tautan yang tersimpan ke URI yang baru. URI baru tersebut ditentukan oleh header Location dan digunakan oleh klien untuk melakukan redirect otomatis.
Response ini umum terjadi ketika server bermigrasi ke domain baru atau menata ulang struktur file internalnya tanpa rencana untuk kembali ke URI yang lama.
Perubahan metode
User agent diizinkan mengubah POST menjadi GET pada redirect 301 karena alasan historis. Sebagian besar browser melakukan persis hal itu, sehingga perubahan metode ini menjadi perilaku standar de facto. Status code 308 dibuat khusus untuk menjamin metode tetap dipertahankan tanpa ambiguitas. Untuk API dan aplikasi modern, gunakan 308 untuk redirect permanen apabila metode asli harus dipertahankan.
Pertahankan redirect 301 tetap aktif setidaknya selama satu tahun, idealnya selamanya. Google mengenali 301 dengan cepat, tetapi transfer sinyal secara penuh membutuhkan waktu berminggu-minggu. Browser melakukan caching response 301 secara agresif berdasarkan direktif Cache-Control. Tanpa header cache yang eksplisit, redirect tersebut bertahan di cache browser tanpa batas waktu. Menghapus 301 di sisi server tidak menghapus redirect yang sudah tersimpan di cache browser.
Catatan
Gunakan 301 ketika URL lama harus berhenti menyajikan konten secara permanen. Gunakan rel=“canonical” ketika kedua URL tetap menyajikan konten, tetapi salah satunya lebih disukai untuk pengindeksan. 301 memaksa seluruh trafik menuju URL baru, sedangkan canonical hanya berupa petunjuk yang diikuti mesin pencari tetapi tidak dipaksakan.
Dampak SEO
Google menganggap 301 sebagai sinyal kuat bahwa target redirect adalah URL yang dipilih. Sinyal peringkat berpindah dari URL lama ke URL baru. Gunakan 301 untuk perubahan URL permanen, migrasi domain, dan peningkatan ke HTTPS. Google mengikuti redirect hingga 10 lompatan. Konten dari URL redirect perantara diabaikan. Mengarahkan URL yang sudah dihapus ke halaman beranda atau halaman kategori umum dengan 301 akan dideteksi Google sebagai soft 404.
Contoh
Klien meminta sebuah sumber daya HTML. Server merespons dengan 301 Moved Permanently dan menyertakan URI baru pada header Location. Body pesan menyarankan pembaruan bookmark, meskipun browser modern langsung melakukan redirect.
Permintaan
GET /news.html HTTP/1.1
Host: example.com
Response
HTTP/1.1 301 Moved Permanently
Location: http://example.com/feeds/news.html
Content-Type: text/html; charset=UTF-8
Content-Length: 150
<h1>The Newsfeed has moved</h1>
<body>
The newsfeed has moved permanently to
<a href=/feeds/news.html>here</a>.
Please update your bookmarks.
</body>
Referensi kode
.NET
HttpStatusCode.MovedPermanently
Rust
http::StatusCode::MOVED_PERMANENTLY
Rails
:moved_permanently
Go
http.StatusMovedPermanently
Symfony
Response::HTTP_MOVED_PERMANENTLY
Python3.5+
http.HTTPStatus.MOVED_PERMANENTLY
Java
java.net.HttpURLConnection.HTTP_MOVED_PERM
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_MOVED_PERMANENTLY
Angular
@angular/common/http/HttpStatusCode.MovedPermanently