301 yönlendirme, bir adresin kalıcı olarak yeni bir yere taşındığını; 302 ise taşınmanın geçici olduğunu söyler. Ziyaretçi iki durumda da yeni sayfaya gider. Fark arama motorlarında ve tarayıcı önbelleğinde ortaya çıkar: kalıcı yönlendirmede Google yeni adresi dizine alır ve sinyalleri ona taşır, geçicide eski adresi korumaya eğilimlidir. 307 ve 308 ise aynı ikilinin, istek yöntemini (örneğin POST) değiştirmeyen sürümleridir.
Bir adresin gerçekte hangi kodla ve kaç adımda yönlendiğini görmek için yönlendirme kontrolü aracını kullanabilirsiniz. Yeni adresleri planlarken slug oluşturucu Türkçe karakterli başlıkları temiz ve kalıcı yollara çevirir. Eski adreslerdeki %C3%BC gibi dizileri okunur hâle getirmek için URL kodlayıcı / çözücü, eski ve yeni yönlendirme listelerini yayından önce satır satır karşılaştırmak için metin fark kontrolü işinizi görür.
Yönlendirme kodları tek tabloda
HTTP durum kodlarının anlamı bugün RFC 9110'da (HTTP Semantics, 2022) tanımlıdır. 3xx ailesindeki beş kod günlük işin neredeyse tamamını karşılar:
| Kod | Adı | Kalıcı mı | Yöntem korunur mu | Tipik kullanım |
| 301 | Moved Permanently | Evet | Garanti yok; POST, GET'e dönebilir | Alan adı ya da URL yapısı değişikliği |
| 302 | Found | Hayır | Garanti yok | Kısa kampanya, bakım sayfası |
| 303 | See Other | Hayır | Her zaman GET'e döner | Form gönderiminden sonra sonuç sayfası |
| 307 | Temporary Redirect | Hayır | Evet | Bir süreliğine taşınan API uç noktası |
| 308 | Permanent Redirect | Evet | Evet | Kalıcı taşınan API ve form adresleri |
Yöntem sütunu tarihî bir kazadan gelir. HTTP/1.0 döneminde tarayıcıların çoğu 301 ve 302 aldığında POST isteğini GET olarak tekrarlıyordu; standart bu davranışı sonradan kabullendi. 307 HTTP/1.1 ile, 308 ise RFC 7538 ile yöntemin ve gövdenin değişmemesini garanti etmek için eklendi. Sıradan sayfa ziyaretlerinde (GET istekleri) 301 ile 308 arasında pratik bir fark yoktur.
301 yönlendirme ne zaman doğru seçim
Eski adres bir daha kullanılmayacaksa cevap neredeyse her zaman kalıcı yönlendirmedir. Tipik durumlar şunlardır:
- Alan adı değişikliği: eski alan adındaki her sayfa, yeni alan adındaki karşılığına gider.
- HTTP'den HTTPS'e geçiş ve www'li ile www'siz sürümden birinin seçilmesi.
- URL yapısı değişikliği:
/urun.php?id=42 yerine /urunler/celik-termos gibi okunur adreslere geçiş.
- İçerik birleştirme: aynı konuyu anlatan iki zayıf yazının tek ve güçlü bir yazıda toplanması.
Önemli olan, her eski adresin en yakın karşılığına gitmesidir. Silinen yüzlerce sayfayı topluca ana sayfaya yönlendirmek kolay görünür, ama Google bu tür yönlendirmeleri "soft 404" olarak değerlendirebilir; yani sayfayı yok sayar ve hiçbir sinyal taşınmaz. Karşılığı olmayan bir sayfa için dürüst bir 404 ya da 410 yanıtı daha doğrudur.
302 ve 307'nin yeri
Geçici yönlendirme, eski adresin geri döneceği durumlar içindir: birkaç günlük bakım çalışması, stokta olmayan bir ürünün geçici olarak kategorisine yönlenmesi ya da bir A/B testinde ziyaretçinin bir varyanta gönderilmesi. Kullanıcının diline veya konumuna göre farklı sürüme gönderen giriş sayfaları da genellikle 302 kullanır, çünkü hedef kişiden kişiye değişir.
Yaygın hata, kalıcı bir taşınmayı 302 ile yapmaktır. Pek çok CMS eklentisi ve çatı (framework) varsayılan olarak 302 üretir. Google uzun süre değişmeyen bir 302'yi zamanla kalıcı gibi yorumlayabilir, ama bu sizin kontrolünüzde olmayan, belirsiz bir süreçtir. Niyetiniz kalıcıysa kodu da kalıcı seçin.
308 ve POST istekleri
Bir API uç noktasını ya da form adresini kalıcı olarak taşıyorsanız 308 kullanın. 301 ile taşınan bir POST isteği bazı istemcilerde GET'e dönüşür, gövde kaybolur ve sunucu boş bir istek alır. Bu hata günlüklerde "veri gelmiyor" diye görünür ve kaynağını bulmak saatler alır. Geçici bir API taşınmasında aynı mantıkla 302 yerine 307 tercih edilir.
301 yönlendirme ve SEO: sinyaller nereye gider
Google'ın yönlendirmelerle ilgili belgelerine göre kalıcı yönlendirmeler (301 ve 308), hedef adresin kanonik sürüm olması gerektiğine dair güçlü bir sinyaldir; geçici olanlar (302 ve 307) ise zayıf bir sinyal. Kalıcı yönlendirmeden sonra arama sonuçlarında zamanla yeni adres görünür; geçici olanda eski adres kalmaya devam edebilir. Google temsilcileri yıllardır 3xx yönlendirmelerinin sayfa değerinden (PageRank) kayıp yaratmadığını söylüyor. Asıl kayıp, alakasız hedefe yönlendirmede ve uzun zincirlerde yaşanır.
Bir site taşımasında işe yarayan sıra şöyledir:
- Eski ve yeni adresleri bire bir eşleyen bir liste hazırlayın; her satırda bir eski, bir yeni adres olsun.
- Yönlendirmeleri sunucu seviyesinde, doğrudan son hedefe giden tek adım olarak kurun.
- Site içi bağlantıları, site haritasını ve kanonik etiketlerini yeni adreslere güncelleyin; yönlendirmeye güvenip eski bağlantıları bırakmayın.
- Yönlendirmeleri en az bir yıl yerinde tutun. Google'ın site taşıma rehberi de bu süreyi önerir; dış sitelerden bağlantı alan adresler için daha uzun tutmak zarar vermez.
- Taşımadan sonraki haftalarda Search Console'daki dizine ekleme ve tarama raporlarını izleyin.
Yönlendirme zinciri ve döngü
Zincir, bir adresin son hedefe birden fazla adımda ulaşmasıdır. En sık görülen örnek, yıllar içinde farklı kişilerin üst üste eklediği kurallardan oluşur:
| Adım | İstek | Yanıt |
| 1 | HTTP, magaza.example/kampanya | 301, HTTPS sürümüne |
| 2 | HTTPS, magaza.example/kampanya | 301, www.magaza.example/kampanya adresine |
| 3 | HTTPS, www.magaza.example/kampanya | 302, sonuna eğik çizgi eklenmiş sürüme |
| 4 | HTTPS, www.magaza.example/kampanya/ | 200 OK |
Her adım ayrı bir istek ve yanıt demektir; alan adı değişiyorsa yeni bir DNS sorgusu ve TLS el sıkışması da eklenir. Yavaş bir mobil bağlantıda her adım, sayfa daha yüklenmeye başlamadan onlarca ya da yüzlerce milisaniye ekleyebilir. Google'ın belgelerine göre Googlebot en fazla 10 yönlendirme adımını izler; daha uzun zincirlerde sayfa hiç taranmayabilir. Tablodaki 3. adıma da dikkat edin: kalıcı bir zincirin ortasındaki tek bir 302, bütün yolun sinyalini bulanıklaştırır.
Döngü: ERR_TOO_MANY_REDIRECTS
Döngüde zincir hiç bitmez: A adresi B'ye, B de yeniden A'ya gönderir. Chrome bunu ERR_TOO_MANY_REDIRECTS hatasıyla durdurur, Firefox da sayfanın düzgün yönlendirilmediğini bildiren bir uyarı gösterir. En sık nedenler şunlardır:
- CDN ya da ters vekil sunucu kaynağa düz HTTP ile bağlanırken uygulamanın her HTTP isteğini HTTPS'e göndermesi. Kaynak sunucu isteği hep HTTP olarak gördüğü için kural sonsuza dek tekrarlanır.
- Sunucu yapılandırmasında www'yi kaldıran, CMS ayarlarında ise www'yi geri ekleyen iki ayrı kural.
- Dil ya da çerez onayına bakarak yönlendiren ve çerezi bir türlü yazamayan bir giriş sayfası.
Zinciri tek adıma indirmek
- Başlangıç adresini araçla kontrol edin ve her adımın kodunu ve hedefini not alın.
- Sonunda 200 yanıtı veren adresi bulun; gerçek hedef odur.
- Kuralları, ilk istek doğrudan bu hedefe gidecek şekilde birleştirin. Örneğin HTTPS ve www kurallarını tek bir kural olarak yazın.
- Site içi bağlantılarda ara adımları değil, son adresi kullanın.
- Yayından sonra aynı adresi yeniden kontrol edin ve tarayıcıda gizli pencereyle de deneyin; kendi tarayıcınızın önbelleğindeki eski bir 301 sizi yanıltmasın.
Yönlendirme zinciri nasıl kontrol edilir
Tarayıcı yönlendirmeleri sessizce izler ve size yalnızca vardığı son adresi gösterir. Yolu görmek için isteği adım adım yürüyen bir araç gerekir. Sonucu doğru okumanız için yönlendirme kontrolü aracının nasıl çalıştığını bilmek işe yarar:
- Adresi sizin tarayıcınız değil, sitenin sunucusu ziyaret eder ve her adımın durum kodunu ve hedefini sırayla listeler.
- En fazla 10 yönlendirme izlenir; daha uzun bir zincirde araç sonuç yerine hata verir.
- Yalnızca herkese açık http ve https adresleri kabul edilir. 80, 443, 8080 ve 8443 dışındaki portlar, özel ağ adresleri, localhost ve bulut metadata adresleri güvenlik nedeniyle engellenir.
- Sayfa gövdesi indirilmez. Bu yüzden HTML içindeki meta refresh etiketleri ve JavaScript yönlendirmeleri görünmez; yalnızca sunucunun 3xx yanıtı olarak gönderdiği yönlendirmeler listelenir.
- Kötüye kullanımı önlemek için dakikada 15 kontrol sınırı vardır.
Sonucu yorumlarken şunu akılda tutun: istek sunucunun bulunduğu yerden, sizin çerezleriniz ve oturumunuz olmadan gelir. Ülkeye, dile ya da giriş durumuna göre yönlendiren siteler, kendi tarayıcınızda gördüğünüzden farklı bir zincir gösterebilir. Bu iki taraftan birinin hatası değildir; site iki ziyaretçiye farklı davranmaktadır.
Komut satırı ve tarayıcı ile kontrol
Terminal kullanıyorsanız curl -sIL magaza.example komutu her adımın başlıklarını sırayla yazar; -I yalnızca başlıkları ister, -L yönlendirmeleri izler. Bazı sunucular yalnızca başlık isteyen isteklere farklı cevap verir; sonuç tuhaf görünürse normal bir istekle karşılaştırın. Tarayıcıda geliştirici araçlarının Ağ sekmesinde Preserve log (günlüğü koru) seçeneğini açıp sayfayı yenilemek her adımı gösterir. Orada 307 Internal Redirect yazan bir satır görürseniz şaşırmayın: bu, HSTS kaydı olan bir sitede tarayıcının HTTPS'e kendi içinde geçtiğini gösterir; sunucu öyle bir yanıt göndermemiştir.
Sunucuda yönlendirme yazmak
Apache'de tek bir sayfa için Redirect 301 /eski-termos /urunler/celik-termos satırı yeterlidir. Nginx'te aynı iş location = /eski-termos { return 301 /urunler/celik-termos; } ile yapılır. Location başlığında göreli bir yol kullanmak standarda uygundur; değer mevcut adrese göre tamamlanır. Yeni adresleri kısa, küçük harfli ve Türkçe karaktersiz seçmek, gelecek yıl bir yönlendirme daha yazmak zorunda kalmamanın en ucuz yoludur.
Sık sorulan sorular
301 yönlendirme ne kadar süre yerinde kalmalı?
Google'ın site taşıma önerisi en az bir yıldır. Eski adrese dış sitelerden bağlantı geliyorsa kuralı daha uzun, mümkünse süresiz tutmak en güvenli yoldur; bir yönlendirme kuralının sunucuya maliyeti yok denecek kadar azdır, kaldırmak ise o bağlantıların değerini çöpe atmak demektir.
Kalıcı bir taşımayı yanlışlıkla 302 ile yaptım, ne olur?
Arama motoru eski adresi bir süre daha dizinde tutabilir ve yeni adres geç görünür. Kodu 301'e çevirmeniz yeterlidir; geri alınması gereken başka bir şey yoktur. Değişiklikten sonra zinciri yeniden kontrol edin.
Tarayıcı kaldırdığım bir yönlendirmeyi neden hâlâ izliyor?
Kalıcı yönlendirmeler önbelleğe alınabilir ve tarayıcılar bunu oldukça agresif yapar. Yanlış bir 301 yayınlayıp düzelttiyseniz kendi tarayıcınız eski davranışı sürdürebilir. Test için gizli pencere kullanın ya da önbelleği temizleyin.
Meta refresh ya da JavaScript yönlendirmesi 301 yerine geçer mi?
Google ikisini de izleyebilir, ama sunucu tarafı yönlendirme her zaman daha açık ve güvenilir bir sinyaldir. Sayfa gövdesinde durdukları için başlıklara bakan denetim araçlarında da görünmezler.
Büyük bir taşımada eski ve yeni adres listesi çoğu zaman bir tabloda tutulur; bu listeyi dışa aktarırken karşılaşılan tırnak ve ayraç tuzakları için CSV ve JSON farkı yazısına bakabilirsiniz. Sayfa açılmadan önce zaman kaybettiren diğer kalemler için kod küçültme ve SEO için görsel optimizasyonu yazıları işinize yarar.