301 yönlendirme nedir, nasıl yapılır? (.htaccess, Nginx).
301 yönlendirme, bir adresin kalıcı olarak başka bir adrese taşındığını sunucu yanıtıyla bildiren yöntemdir; tarayıcı ziyaretçiyi yeni adrese götürür, Google da yeni adresi asıl adres olarak öğrenir. Apache’de .htaccess dosyasına bir satır, Nginx’te bir return satırı, Cloudflare’de bir _redirects satırı ya da yönlendirme kuralıyla kurulur.
301 yönlendirme, bir site yenilenirken ya da bir sayfanın adresi değişirken eski adresin değerini kaybetmemenin temel aracıdır. Bu rehber «nasıl» sorusunu cevaplıyor: hangi sunucuda hangi satır yazılır, en sık hangi hatalar yapılır ve bir yönlendirmenin gerçekten çalıştığı nasıl anlaşılır. Kalıcı ve geçici yönlendirme arasındaki seçim 301 mi, 302 mi karşılaştırmasında; bunun bir site geçişindeki yeri ise geçiş kontrol listesinde. Bir sitenin bütün adreslerini taşıyacaksanız işin bu kısmı site yenileme ve taşıma hizmetinin çekirdeğidir.
301 yönlendirme ne işe yarar?
Sunucu eski adrese gelen isteğe sayfa yerine kısa bir cevap verir: durum kodu 301 ve yeni adres. Tarayıcı bu cevabı görünce yeni adresi ister; ziyaretçi çoğu zaman aradaki adımı fark etmez. Google tarafında ise 301, hedef adresin asıl (kanonik) adres olduğuna dair güçlü bir sinyaldir. Google’ın belgesi 301 ve 308’i kalıcı, 302, 303 ve 307’yi geçici yönlendirme olarak ayırıyor; geçici olanlar hedefin asıl adres olduğuna yalnız zayıf bir sinyal veriyor.
Yönlendirme sunucuda yapılmalıdır. Sayfanın içine konan anında yenileme (meta refresh, 0 saniye) ve JavaScript ile adres değiştirme de Google tarafından kalıcı yönlendirme olarak yorumlanabiliyor, ama ikisi de sayfanın önce yüklenmesini gerektirir ve JavaScript’li olanı sayfanın işlenmesine bağlıdır. Seçeneğiniz varsa sunucu yönlendirmesi her zaman önce gelir.
Apache’de .htaccess ile 301 yönlendirme nasıl yapılır?
Siteniz Apache sunucusunda çalışıyorsa — paylaşımlı barındırmada sık karşılaşılan durum — yönlendirme sitenin kök dizinindeki .htaccess dosyasına yazılır. İki yol var. Redirect yönergesi basit eşleşmeler içindir: soldaki yolla başlayan istekleri sağdaki adrese gönderir. RewriteRule ise düzenli ifade ile kalıp yakalar; adres yapısı toptan değiştiğinde kullanılır.
- # Tek sayfa: eski adres → yeni adres
- Redirect 301 /hakkimizda.html https://www.example.com/kurumsal/
- # Klasör: /blog/ altındaki her adres, kalan yoluyla birlikte /yazilar/ altına
- Redirect 301 /blog/ https://www.example.com/yazilar/
- # Kalıp: /urun/ADI → /urunler/ADI/
- RewriteEngine On
- RewriteRule ^urun/([a-z0-9-]+)/?$ https://www.example.com/urunler/$1/ [R=301,L]
Üç ayrıntı sık atlanıyor. Birincisi: Redirect satırına kod yazmazsanız Apache 302, yani geçici yönlendirme gönderir; 301 ya da permanent sözcüğü açıkça yazılmalı. RewriteRule’daki R bayrağı da kodsuz yazılırsa 302 üretir. İkincisi: Redirect bir önek eşleşmesidir; /blog/ satırı /blog/ ile başlayan her adresi yakalar ve yolun geri kalanını hedefe ekler. İstediğiniz buysa kısa yoldur, değilse beklemediğiniz adresleri de taşır. Üçüncüsü: .htaccess içinde RewriteRule deseni baştaki eğik çizgiyi görmez; Apache’nin belgesine göre ^/ ile başlayan bir desen bu bağlamda hiç eşleşmez. Bu yüzden desen ^urun/ diye başlar.
Nginx’te 301 yönlendirme nasıl yazılır?
Nginx .htaccess okumaz; yönlendirme sunucu yapılandırmasındaki server ya da location bloğuna yazılır ve yapılandırma yeniden yüklenince devreye girer. Tek adres için location ve return, kalıp için rewrite kullanılır.
- # Tek sayfa
- location = /hakkimizda.html { return 301 https://www.example.com/kurumsal/; }
- # Kalıp: /urun/ADI → /urunler/ADI/
- rewrite ^/urun/([a-z0-9-]+)/?$ https://www.example.com/urunler/$1/ permanent;
Nginx’te de varsayılan geçicidir: return satırına yalnız adres yazılırsa 302 gider, rewrite satırında permanent yerine redirect yazılırsa yine 302. Kalıcı yönlendirme için kodu ya da permanent bayrağını açıkça yazın.
Cloudflare’de 301 yönlendirme nasıl kurulur?
Cloudflare’de üç yol var. Site Cloudflare Pages ya da Workers üzerinde statik dosya olarak yayınlanıyorsa kökteki _redirects dosyasına her satıra bir kural yazılır: kaynak, hedef, kod. Sitenin önünde yalnız Cloudflare’in ağı duruyorsa panelindeki yönlendirme kuralları kullanılır. Üçüncü yol, bir Worker’ın kendi kodunda yönlendirme yanıtı üretmesidir; bu sitenin yaptığı budur.
- # _redirects — kaynak · hedef · kod
- /hakkimizda.html /kurumsal/ 301
- /urun/* /urunler/:splat 301
Cloudflare’in belgesine göre _redirects dosyasında kod yazılmazsa varsayılan 302’dir; burada da 301 açıkça yazılmalı. Bir ayrıntı daha: bu dosyadaki kurallar yalnız statik dosya yanıtlarına uygulanır, bir Worker’ın kendi kodunun ürettiği yanıtlara uygulanmaz. Sitenizde hem Worker hem _redirects varsa hangi isteğin hangisine düştüğünü bilmeden kural yazmayın.
301 yönlendirmede en sık yapılan hatalar nelerdir?
- Kodu yazmamak. Üç ortamda da kodsuz yönlendirmenin varsayılanı 302; kalıcı taşıma geçici görünür.
- Her şeyi ana sayfaya göndermek. Eşdeğeri olmayan adresleri ana sayfaya yönlendirmek, Google tarafından hata sayfası gibi okunur; doğru cevap 404 ya da 410’dur (404 hatası rehberi).
- Zincir kurmak. Eski adres → ara adres → yeni adres. Google’ın tarayıcısı en çok 10 adım izliyor, ama site taşıma belgesi zinciri en fazla üç adımda tutmayı öneriyor. Ayrıntısı yönlendirme zinciri maddesinde.
- Döngü kurmak. İki kural birbirine yönlendirirse sayfa hiç açılmaz; Search Console bunu yönlendirme hatası olarak raporlar.
- Site içi bağları eski adreste bırakmak. Yönlendirme çalışır, ama kendi sitenizin her tıklaması gereksiz bir adımdan geçer.
- Yönlendirmeyi erken kaldırmak. Google en az bir yıl yerinde tutmayı öneriyor.
Bir yönlendirmenin çalıştığı nasıl anlaşılır?
Tarayıcıda eski adresi açıp yeni sayfayı görmek yeterli değildir: tarayıcı zinciri sessizce izler, kodu göstermez ve kalıcı yönlendirmeleri kendi önbelleğinde tutabilir. Doğru sınama üç soruyu birden sorar: ilk yanıtın kodu 301 mi, zincirin sonunda varılan adres haritadaki adres mi, o adres 200 dönüyor mu? Bu, haritadaki her satır için ayrı ayrı sorulur.
Bu sitede 301 nasıl kullanılıyor?
Bu sitenin yönlendirmeleri sunucu tarafında, Cloudflare üzerinde çalışan Worker’ın kodunda. İki iş yapıyor. Birincisi, www’siz alan adına gelen her isteği yolu ve sorgusu değişmeden www’li adrese 301 ile gönderiyor. İkincisi, küçük bir takma ad tablosu eski adresleri yenilerine bağlıyor.
O tablodaki en öğretici satır, Eylül 2026’da ikiye bölünen bir hizmet sayfasından geldi. Eski adres, iki ayrı arama niyetini tek sayfada taşıyordu ve dizindeydi. Yönlendirmeyi hizmetler listesine değil, eski sayfanın gövdesini birebir taşıyan yeni sayfaya kurduk: Google eski adres için en yakın eşdeğeri bekler, bir liste sayfası o eşdeğer değildir.
Ölçme tarafında iki kez yanıldık ve ikisi de ürün değil ölçüm hatasıydı. İlk yazımda doğrulama aracı yönlendirmeleri izleyip ardındaki 200’ü raporladı; çalışan yönlendirme kırık göründü. Aracı ilk adımı okuyacak biçimde değiştirince bu kez yakaladığı adım bizim yönlendirmemiz değil, www’siz adresten www’li adrese giden ilk adımdı. Doğru ölçünün zincirin sonu olduğu böyle anlaşıldı: eski adres okuru doğru sayfaya bırakıyor mu? O günden beri araç varış adresini ve varışın istenen adresten gerçekten farklı olduğunu sınıyor — yönlendirme hiç kurulmasa varış istenen adresle aynı olur ve sessizce geçerdi.
Yönlendirmenin kanıtı durum kodu değil, varılan adrestir.
Aynı alan adında http ile www’siz biçimleri toplamak ayrı bir iş; o HTTPS ve www yönlendirmesi rehberinde anlatılıyor.