Tıkladığınız bağlantı ile karşınıza çıkan sayfa çoğu zaman aynı değildir. Arada bir HTTPS yükseltmesi, bir ana makine (host) değişikliği, bir izleme servisi, bir link kısaltma servisi ve sondaki eğik çizgiyi (trailing slash, URL'nin sonundaki /) ekleyen bir CMS kuralı olabilir. Bunların her biri, tarayıcınızın size haber vermeden yaptığı ayrı bir istektir.
Bu rehberde söz konusu adımları TrueURL, curl ve tarayıcı DevTools ile nasıl görebileceğinizi, bir yönlendirme zincirinin her bölümünün ne anlama geldiğini ve en yaygın sorunları nasıl düzelteceğinizi anlatıyoruz.
Yönlendirme zinciri nedir?
Yönlendirme (redirect), sunucu bir isteğe 3xx HTTP durum kodu ve başka bir URL'yi gösteren bir Location başlığıyla yanıt verdiğinde gerçekleşir. İstemci, yani bir tarayıcı ya da tarama botu, ardından bu URL'yi ister ve yönlendirme olmayan bir yanıt gelene kadar aynı işlemi tekrarlar.
Her istek ve ona verilen yanıt birlikte bir adım (hop) oluşturur. İlk URL'den son yanıta kadar uzanan dizinin tamamına yönlendirme zinciri denir:
# URL Status Location
1 http://example.com/Shoes 301 https://example.com/Shoes
2 https://example.com/Shoes 301 https://www.example.com/Shoes
3 https://www.example.com/Shoes 302 /shoes/
4 https://www.example.com/shoes/ 200Tek bir sayfaya ulaşmak için üç yönlendirme ve dört istek gerekiyor. 3. adımdaki Location değeri görelidir: RFC 9110 uyarınca istemciler bu değeri az önce istedikleri URL'ye göre çözümler, yani değer https://www.example.com/shoes/ anlamına gelir. İdeal durumda bu adreslerin her biri nihai URL'ye tek adımda ulaşmalıdır.
Bir sayfa 200 OK yanıtı verdikten sonra da bir <meta http-equiv="refresh"> etiketiyle ya da JavaScript ile yönlendirme yapabilir. Bu istemci taraflı yönlendirmeler de zincire dahildir, ancak curl gibi yalnızca HTTP başlıklarını okuyan araçlar o sayfada durur.
Yönlendirmeleri kontrol etmek neden önemli?
SEO: kanonik sinyaller ve tarama bütçesi
Arama motorları bir yönlendirmeyi, hangi URL'nin dizine eklenmesi gerektiğine dair bir beyan olarak okur. Google kalıcı yönlendirmeleri (301 ve 308), hedefin kanonik URL olması gerektiğine dair güçlü bir sinyal olarak, geçici yönlendirmeleri (302, 303 ve 307) ise zayıf bir sinyal olarak değerlendirir. Bu yüzden kalıcı olarak taşınmış ama 302 ile yönlendirilen bir sayfa, arama sonuçlarında eski URL'siyle görünmeye devam edebilir.
Zincirin uzunluğu da önemlidir. Googlebot en fazla 10 yönlendirme adımını takip eder; o noktaya kadar içeriğe ulaşamazsa Search Console bir yönlendirme hatası bildirir. Google'ın tarama bütçesi rehberi de uzun yönlendirme zincirlerinden kaçınmayı önerir ve bu zincirlerin taramayı olumsuz etkilediğini belirtir.
Sayfa hızı
Son yönlendirme yanıtlanmadan nihai sayfa yüklenmeye başlayamaz. Her adım bir ağ gidiş-dönüşüne mal olur; yeni bir ana makineye giden adım ayrıca bir DNS sorgusu, yeni bir bağlantı ve HTTPS için bir TLS el sıkışması gerektirir. Mobil bağlantılarda üç dört yönlendirme, asıl sayfanın ilk baytı gelmeden önce birkaç yüz milisaniye ekleyebilir. Yönlendirme gecikmesi kontrolü aracı her adımın ne kadar süre kattığını gösterir.
Kısa linklerin ve bilinmeyen bağlantıların güvenliği
Kısa linkler ve e-postalardaki birçok izleme bağlantısı, nereye gittiklerini gizler. Oltalama (phishing) kampanyaları da tanınmış alan adlarındaki açık yönlendirmeleri (open redirect) kötüye kullanır; bu yüzden güvenilir bir sitede başlayan bir bağlantı bambaşka bir yerde sona erebilir. Kısa link açma aracı, siz tıklamadan önce yol üzerindeki tüm alan adlarını ve herhangi bir adımın HTTPS'den düz HTTP'ye düşüp düşmediğini gösterir.
Satış ortaklığı (affiliate) ve izleme bağlantıları
Pazarlama bağlantıları açılış sayfasına ulaşmadan önce çoğu zaman birkaç servisten geçer. Bu servislerin her biri sorgu dizesini (query string) aktarmalıdır; aksi hâlde UTM parametreleri, tıklama kimlikleri ve satış ortaklığı etiketleri sessizce kaybolur. Nihai URL, bunların yolda kaybolup kaybolmadığını ve bağlantının hâlâ hedeflenen sayfaya ulaşıp ulaşmadığını gösterir.
Site taşıma, HTTPS ve kanonik ana makine
Yeniden tasarımdan, alan adı değişikliğinden ya da HTTPS'ye geçişten sonra her eski URL, yeni karşılığına tek bir kalıcı yönlendirmeyle ulaşmalıdır. Bir sitenin dört temel sürümü (http:// ve https://, www ile ve www olmadan) tek bir kanonik adreste buluşmalıdır. Bu kurallar sessizce bozulur: yeni bir CDN kuralı, bir eklenti güncellemesi ya da sunucu taşıması, kimse fark etmeden zincire bir adım ya da döngü ekleyebilir.
TrueURL ile yönlendirme nasıl kontrol edilir?
TrueURL her kontrolü Cloudflare uç ağında (edge, kullanıcıya en yakın sunucular) çalıştırır; böylece güvenmediğiniz bağlantıları tarayıcınızda açmadan inceleyebilirsiniz. Ana sayfadaki URL yönlendirme kontrolü aracı (redirect checker) tek bir URL'yi kontrol eder; Yönlendirme zinciri kontrolü ve diğer özel araçlar da aynı motoru kullanır.
1. adım: URL'yi girin
URL'yi yapıştırın ve kontrolü başlatın. Şema (protokol) belirtmezseniz https:// varsayılır; düz HTTP'yi test etmek için http:// yazın.
2. adım: gerekirse Gelişmiş ayarları değiştirin
Kontrol aracı varsayılan olarak güncel bir masaüstü Chrome User-Agent (kullanıcı aracısı) değeriyle, çerez olmadan ve en fazla 20 yönlendirme sınırıyla bir GET isteği gönderir. Gelişmiş ayarlar bölümünden bunları değiştirebilirsiniz:
- HTTP metodu: GET, HEAD veya POST. HEAD daha hafiftir, ancak bazı sunucular ona farklı yanıt verir ve gövde olmadığı için istemci taraflı yönlendirmeler tespit edilemez. POST, form işleyicileri ve API'ler için girdiğiniz istek gövdesini gönderir. Sonraki adımlar tarayıcı kurallarına uyar: POST'tan sonra gelen 301 veya 302'de istek GET olarak devam eder, 303'te her zaman GET'e geçilir, 307 ve 308 ise metodu ve gövdeyi korur.
- Maksimum adım sayısı: takip edilecek yönlendirme sayısı, 1 ile 50 arasında. Varsayılan 20 değeri hem Fetch Standard belgesindeki hem de Chrome ve Firefox'taki sınırdır. Bir zincirin Googlebot'un sınırına sığıp sığmadığını görmek için değeri 10 yapın.
- Özel User-Agent: boş bırakılırsa masaüstü Chrome kullanılır. Hazır ayarlar arasında iPhone'da Safari, Android'de Chrome, Googlebot (akıllı telefon ve masaüstü), Bingbot, Facebook ve X'in bağlantı önizleme botları ve curl bulunur.
- Özel istek başlıkları: her adımda gönderilen ek başlıklar; örneğin bir dil yönlendirmesini tetiklemek için
Accept-Language: fr-FR. - Çerezler: oturum açılmış bir durumu, çerez onayını ya da bölge seçimini yeniden oluşturmak için
name=value; other=valuebiçiminde girin. Zincir boyunca ayarlanan çerezler, tarayıcıda olduğu gibi sonraki adımlar için saklanır. - İstemci taraflı yönlendirmeler: meta refresh etiketlerini ve basit JavaScript yönlendirmelerini takip etmeyi ya da yalnızca raporlamayı seçin.
- SSL hatalarını yok say: Cloudflare uç ağı sertifikaları her zaman doğrular, bu nedenle bu seçenek bozuk bir sertifikayı atlayamaz. TLS hatası, oluştuğu adımda raporlanır.
3. adım: sonucu okuyun
Sonuç, nihai URL ve onun durum koduyla başlar. Altındaki zincirde her adım için bir satır bulunur ve her satırda şunlar yer alır:
- istenen URL ve kullanılan HTTP metodu;
- durum kodu ve neden ifadesi (reason phrase; her birini HTTP durum kodları rehberimiz açıklıyor);
- isteğin gönderilmesinden başlıkların gelmesine kadar geçen, varsa DNS sorgusu ve bağlantı kurulumu dahil yanıt süresi;
- adımın yönlendirdiği
Locationdeğeri; - yanıt başlıkları ve adımın ayarladığı çerezlerin adları.
Her yönlendirme, nasıl gerçekleştiğini gösteren bir etiket taşır: HTTP durum kodu, meta refresh (saniye cinsinden gecikmesiyle) veya JavaScript. Bulunan ama takip edilmeyen istemci taraflı yönlendirmeler de raporlanır. Kontrolün nasıl sona erdiği de en az bunlar kadar önemlidir:
| Sonuç | Anlamı |
|---|---|
| Nihai yanıt | Zincir, yönlendirme olmayan bir yanıta ulaştı; örneğin 200 OK veya 404 Not Found. |
| Yönlendirme döngüsü | Bir sonraki istek, önceki bir isteğin aynısı olacaktı: aynı URL, metot ve çerezler. Sonuç, döngüyü hangi adımın kapattığını gösterir. |
| Maksimum adım sayısına ulaşıldı | Zincir, sınıra gelindiğinde hâlâ yönlendirme yapıyordu. Bir sonraki hedef gösterilir ama ona istek gönderilmez. |
| Hata | Bir adım başarısız oldu (DNS, bağlantı, TLS veya zaman aşımı hatası) ya da yönlendirme hedefi geçerli veya izin verilen bir URL değildi. |
Uyarılar şu durumlara dikkat çeker: zincirde geçici bir yönlendirme, HTTPS'den HTTP'ye düşüş, üçten fazla yönlendirme, başka bir alan adında biten nihai URL, istemci taraflı yönlendirmeler ve sayfa gövdesini okuyamayan HEAD istekleri.
Bu uyarılardan birine özellikle dikkat edin. Bazı siteler otomatik trafiğe veya veri merkezlerinden gelen trafiğe, Cloudflare'in “Just a moment...” sayfası gibi bir bot doğrulama sayfası (ör. CAPTCHA) gösterir. TrueURL bu tür sayfalara benzeyen yanıtları işaretler, çünkü bu durumda kontrol hedefe değil, sitenin koruma katmanına ulaşmıştır. Gerçek bir ziyaretçi başka bir yere gidebilir.
Komut satırından yönlendirmeler nasıl kontrol edilir?
macOS, Windows 10 ve 11 ile çoğu Linux dağıtımında curl önceden yüklü gelir ve tarayıcı önbelleği devreye girmeden sunucunun tam olarak ne gönderdiğini gösterir. Örneklerde bir Unix kabuğu kullanılmıştır. Windows PowerShell 5.1'de curl.exe yazın, çünkü orada curl, Invoke-WebRequest için bir takma addır; ayrıca /dev/null yerine NUL yazın.
Tek bir adıma bakın
curl -I https://example.com/old-page-I bir HEAD isteği gönderir ve durum satırı ile varsa Location dahil yanıt başlıklarını yazdırır. curl, siz istemedikçe yönlendirmeleri takip etmez. Bazı sunucular HEAD isteklerine farklı davrandığından, sonuç tuhaf görünürse kontrolü GET ile tekrarlayın; -o /dev/null gövdeyi atar, -D - ise başlıkları yazdırır:
curl -sS -o /dev/null -D - https://example.com/old-pageZincirin tamamını takip edin
-L yönlendirmeleri takip eder; -I veya -D - ile birlikte kullanıldığında curl her adımın başlıklarını yazdırır. Bir grep filtresiyle de derli toplu bir görünüm elde edersiniz:
curl -sIL http://example.com/Shoes | grep -iE '^(HTTP/|location:)'HTTP/1.1 301 Moved Permanently
Location: https://example.com/Shoes
HTTP/2 301
location: https://www.example.com/Shoes
HTTP/2 302
location: /shoes/
HTTP/2 200curl varsayılan olarak en fazla 50 yönlendirmeyi takip eder; --max-redirs 10 ise Googlebot'un sınırını uygular.
Yalnızca nihai URL'yi yazdırın
-w (write-out) seçeneği aktarım bittikten sonra ayrıntıları yazdırır ve curl'ü pratik bir kısa link açma aracına dönüştürür:
curl -sSL -o /dev/null -w '%{http_code} %{num_redirects} %{url_effective}\n' https://example.com/go%{url_effective} alınan son URL'yi, %{num_redirects} takip edilen yönlendirme sayısını, %{http_code} ise son durum kodunu verir. %{time_redirect}, son istekten önce yönlendirmelerde geçen süreyi saniye cinsinden bildirir. -L olmadan kullanıldığında %{redirect_url}, ilk yönlendirmenin nereye gideceğini gösterir.
POST isteklerini test edin
-d bir gövde gönderir ve isteği POST'a çevirir. Bu durumda curl, yönlendirmeleri takip ederken bir tarayıcı gibi davranır: 301, 302 veya 303'ten sonra GET'e geçer; 307 veya 308'den sonra ise POST'u gövdesiyle birlikte yeniden gönderir.
curl -sSL -o /dev/null -D - -d 'email=test%40example.com' https://example.com/subscribe-X POST ve -L seçeneklerini birlikte kullanmaktan kaçının. -X metodu her isteğe zorla uygular; bu yüzden curl, bir tarayıcının GET'e geçeceği 301, 302 veya 303'ten sonra da POST göndermeye devam eder ve hiçbir gerçek istemcinin üretmeyeceği bir zinciri test etmiş olursunuz.
User-Agent'ı, başlıkları ve çerezleri değiştirin
# Akıllı telefon User-Agent'ı
curl -sIL -A 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1' https://example.com/
# Ek istek başlığı
curl -sIL -H 'Accept-Language: de-DE,de;q=0.9' https://example.com/
# Bir çerez gönderin ve zincir boyunca ayarlanan çerezleri saklayın
curl -sSL -o /dev/null -D - -b 'consent=yes' -c cookies.txt https://example.com/-A User-Agent'ı ayarlar, -H bir başlık ekler, -b ise çerez gönderir. -c alınan çerezleri bir dosyaya kaydeder ve curl'ün çerez motorunu etkinleştirir; böylece bir adımda ayarlanan çerez bir sonraki adımda gönderilir.
curl JavaScript çalıştırmaz ve meta refresh etiketlerine göre hareket etmez. curl'ün aldığı son yanıt 200 OK dönen bir HTML sayfasıysa ama tarayıcınız başka bir yere gidiyorsa, yönlendirme istemci tarafında gerçekleşiyordur.
Tarayıcı DevTools ile yönlendirmeler nasıl kontrol edilir?
DevTools, zinciri kendi tarayıcınızın gördüğü şekilde, yani çerezleriniz, eklentileriniz ve konumunuzla birlikte gösterir:
- DevTools'u açın (F12 veya Mac'te Cmd+Option+I) ve Network (Ağ) sekmesini seçin.
- Chrome ve Edge'de Preserve log seçeneğini, Firefox'ta ise ağ ayarları menüsündeki Persist Logs seçeneğini açın. Aksi hâlde liste her sayfa yüklemesinde temizlenir ve istemci taraflı yönlendirmeler gözden kaybolur.
- Disable cache seçeneğini açın; böylece önbelleğe alınmış bir yönlendirme, sunucunun bugün ne gönderdiğini gizlemez.
- URL'yi adres çubuğuna girin.
Her adım, 3xx durum koduyla birlikte ayrı bir satırda görünür; location yanıt başlığını görmek için satırı seçip Headers sekmesini açın. Chrome'da Size sütununda “(disk cache)” veya “(memory cache)” yazması, yönlendirmenin sunucudan değil önbellekten geldiği anlamına gelir.
Chrome bazen http:// adresinden https:// adresine bir 307 Internal Redirect listeler. Bunu sunucu hiç göndermemiştir: isteği tarayıcının kendisi yükseltmiştir ve bunun nedeni genellikle site için kayıtlı bir HSTS politikasıdır. Sunucunun düz HTTP isteğine ne yaptığını görmek için curl veya TrueURL kullanın.
Sık görülen yönlendirme sorunları ve çözümleri
Birden fazla adımdan oluşan zincirler
Zincirler katman katman büyür: eski bir taşımadan kalan bir kural, sonraki bir taşımada yeniden yönlendirilmiş bir URL'yi gösterir. Her kuralı doğrudan son hedefe yönlendirin; kendi sitenizin hiçbir zaman yönlendirme tetiklememesi için iç bağlantıları, canonical etiketlerini, hreflang işaretlemelerini ve site haritalarını güncelleyin. Toplu yönlendirme kontrolü aracı, hangi eski URL'lerin hâlâ birden fazla adım gerektirdiğini gösterir.
Yönlendirme döngüleri
Chrome bir döngüyü “sizi çok fazla yönlendirdi” (ERR_TOO_MANY_REDIRECTS) hatasıyla bildirir; Firefox ise “Sayfa doğru şekilde yönlendirilmiyor” der. Yaygın nedenler:
- Proxy veya CDN arkasında HTTPS. Kaynak sunucu (origin) HTTP'yi HTTPS'ye yönlendirir, ancak proxy kaynak sunucuya düz HTTP ile bağlanır. Kaynak sunucu hiçbir zaman HTTPS görmediği için durmadan yönlendirir. Cloudflare'de bu, Flexible SSL/TLS modunun klasik sonucudur; Full (strict) modunu kullanın ya da kaynak sunucunun
X-Forwarded-Protobaşlığını kontrol etmesini sağlayın. - Birbiriyle çelişen iki katman: örneğin sunucu
wwweklerken onu kaldıran bir CDN kuralı ya da CDN'in sildiği sondaki eğik çizgiyi ekleyen bir framework. - Çereze bağlı yönlendirmeler. Bir giriş veya çerez onayı sayfası ziyaretçileri asıl URL'ye geri gönderir; çerez kaydedilmediği için bu URL de onları yeniden giriş sayfasına yönlendirir.
Yönlendirme döngüsü kontrolü aracı, döngüyü hangi adımın kapattığını gösterir. Ardından her kuraldan yalnızca tek bir katmanı sorumlu tutun.
Aynı zincirde 301 ve 302 karışımı
Önce 301, ardından 302 ve son olarak 200 dönen bir zincir, ortasında geçici bir adım bulunan kalıcı bir taşımadır. Bu durum çoğu zaman bir varsayılan ayardan kaynaklanır: Express'in res.redirect() fonksiyonu da PHP'nin header('Location: ...') çağrısı da aksi belirtilmedikçe 302 gönderir. Her adımda kalıcı bir kod kullanın ve bunu 301 yönlendirme kontrolü aracıyla doğrulayın. HTTP yönlendirme durum kodları rehberimiz, hangi kodun ne zaman uygun olduğunu açıklıyor.
HTTP'den HTTPS'ye ve www'ye çift adım
Çok yaygın bir zincir şudur: http://example.com → https://example.com → https://www.example.com. Tek adımın yeteceği yerde iki adım atılır. Kanonik olmayan her sürümü doğrudan nihai HTTPS URL'sine yönlendirin, ardından dört sürümün hepsini HTTPS yönlendirme kontrolü aracıyla test edin.
Bunun bilinçli bir istisnası var. Kanonik ana makineniz www ise ve alan adını HSTS preload listesine ekliyorsanız, hstspreload.org http://example.com adresinin önce https://example.com adresine yönlendirilmesini şart koşar; böylece tarayıcılar HSTS politikasını www'siz alan adı için kaydeder.
Sondaki eğik çizgi tutarsızlıkları
/pricing ve /pricing/ farklı URL'lerdir. İkisi de 200 OK döndürüyorsa kopya içerik (duplicate içerik) sorununuz var demektir; iki katman bunları birbirine yönlendiriyorsa bir döngü oluşur. Bir biçimi seçin, diğerini tek bir 301 ile ona yönlendirin ve bağlantılarınızda tutarlı olun. Sondaki eğik çizgi kontrolü aracı iki biçimi aynı anda test eder.
Yalnızca mobilde görülen yönlendirmeler
Ayrı mobil siteler, uygulama yükleme istemleri ve cihaz algılama bazen telefonları başka bir yere, çoğu zaman eşdeğer sayfa yerine mobil ana sayfaya gönderir. Google mobil öncelikli dizine ekleme kapsamında ağırlıklı olarak akıllı telefon tarama botuyla tarama yapar; bu yüzden dizine ekleme açısından en çok mobil zincir önemlidir. İkisini Mobil ve masaüstü yönlendirme karşılaştırması aracıyla karşılaştırın.
Site haritalarındaki yönlendirmeler
Bir site haritası (sitemap), arama sonuçlarında görmek istediğiniz kanonik URL'leri listelemelidir; bu URL'ler de 200 OK döndürür. Yönlendirme yapan girdiler tarama isteklerini boşa harcar ve çelişkili kanonik sinyaller gönderir. Her taşımadan sonra Site haritası yönlendirme kontrolü aracını çalıştırın ve yönlendirme yapan her girdiyi nihai URL'siyle değiştirin.
JavaScript ve meta refresh yönlendirmeleri
Google anında çalışan bir meta refresh'i kalıcı yönlendirme olarak, gecikmeli olanı ise geçici yönlendirme olarak değerlendirir. JavaScript yönlendirmelerini ancak sayfayı oluşturduktan (rendering) sonra görür; bu adım taramadan sonra gelir ve başarısız olabilir. Diğer birçok tarama botu, bağlantı önizleme botu ve komut satırı aracı JavaScript'i hiç çalıştırmaz, bazıları meta refresh'i de yok sayar. Sunucuyu kontrol ettiğiniz her yerde sunucu taraflı yönlendirmeler kullanın; istemci taraflı olanları da Meta refresh kontrolü aracıyla bulun.
Yönlendirme kontrol listesi
Bir taşımadan ya da CDN değişikliğinden sonra veya bir kampanyayı yayına almadan önce bu listeyi gözden geçirin:
- Her eski URL, son hedefine tek adımda ulaşıyor.
- Kalıcı taşımalar her adımda 301 veya 308 kullanıyor.
- Protokol ve ana makine açısından dört sürümün hepsi kanonik HTTPS URL'sinde sona eriyor.
- Hiçbir adım HTTPS'den HTTP'ye geçmiyor.
- UTM parametreleri ve satış ortaklığı kimlikleri dahil sorgu dizeleri zincir boyunca korunuyor.
- Her URL'nin tek bir sondaki eğik çizgi biçimi var ve diğer biçim ona yönlendiriliyor.
- Masaüstü, akıllı telefon ve Googlebot istekleri eşdeğer sayfalarda sona eriyor.
- Mümkün olan her yerde meta refresh ve JavaScript yerine sunucu taraflı yönlendirmeler kullanılıyor.
- İç bağlantılar, canonical etiketleri, hreflang ve site haritaları nihai URL'leri gösteriyor.
- Yerine yenisi konmayan kaldırılmış sayfalar, ana sayfaya yönlendirilmek yerine 404 veya 410 döndürüyor.
- Site taşımasından kalan yönlendirmeler yerinde duruyor; Google bunların en az bir yıl korunmasını öneriyor.