Search Console açık, hreflang etiketleri kaynak kodda yerli yerinde, hata raporu boş; ama Almanya'daki kullanıcılar Türkçe sayfaya düşüyor, Fransız ziyaretçiler İngilizce versiyonu görüyor. Bu tablo yeterince tanıdık: kurulum tamamlanmış ama sonuç hâlâ yanlış.
Sorun şu ki hreflang kurulumu ile hreflang'ın doğru çalışması aynı şey değildir. Google'ın etiketleri okuması ve bu etiketlere dayanarak doğru locale'i sunması arasında birkaç katman daha var. Her katmanda, göründüğünden çok daha sessiz biçimde kırılabilen bir şeyler bulunur.
Kurulum tamam, Google hâlâ yanlış locale'i gösteriyor: debug bu şikâyete özgüdür. Adımlar sıralı; bir kademede sorun çıkmazsa bir sonrakine geçilir.
Google'ın hangi sayfayı sunduğunu önce doğru ölçmek gerekir
Debug sürecinin en sık atlanan adımı budur: "yanlış locale gösteriliyor" tespitini doğrulamak. Kullanıcı şikâyeti veya kendi gözleminiz gerçek bir ölçümün yerini tutmaz.
Google Search Console'da URL Inspection aracını açın. Sorunlu sayfanın URL'sini girin. "Google Tarafından Dizine Eklendi" durumu ve "Kapsam" bölümündeki "Google'ın gördüğü URL" alanına bakın. Bu, Googlebot'un son taramasında kaydettiği canonical URL'dir. Kullanıcıya servis edilen URL ile bu kayıtlı canonical eşleşiyor mu? Eşleşmiyorsa sorun burada başlıyor demektir.
Gerçek kullanıcı deneyimini simüle etmek için farklı bir yol izleyin. Hedef pazarın IP'sini taklit eden bir VPN açın, tarayıcıyı gizli modda başlatın ve sitenizin ana giriş noktasını ziyaret edin. Hangi dil versiyonu açıldı? Bir de site:siteniz.com/de/ gibi bir arama operatörü ile Google'ın dizinine almış olduğu sayfaları kontrol edin. GSC hata raporu boş olabilir; ama dizindeki sayfa sayısı veya indekslenmiş URL'ler beklenenden farklıysa görünmez bir sorun var demektir.
"GSC'de hata yok" cümlesi yalnızca Google'ın hreflang etiketlerini okuyabildiğini söyler. Google'ın bu etiketlere uyacağını garanti etmez. Bu ayrım bütün debug sürecinin zeminini oluşturur.
Karşılıklı referans yoksa hreflang tek yönlü kalır
Hreflang'ın çalışabilmesi için her dil versiyonunun birbirine karşılıklı işaret etmesi gerekir. Türkçe sayfa Almancayı gösteriyorsa, Almanca sayfanın da Türkçeye işaret etmesi zorunludur. Google bu kuralı tek yönlü hreflang'ı sessizce geçersiz sayarak uygular; hata raporu üretmez, doğrulama mesajı vermez. Etiket kaynak kodda var gibi görünür, ama Google onu dikkate almıyor olabilir.
Küçük bir katalog için kontrol yöntemi basittir: Türkçe sayfanın kaynak kodunu açın, oradaki hreflang etiketleriyle listelenen her URL'yi tek tek ziyaret edin ve o sayfalarda kendi URL'nizi arayan bir hreflang etiketi var mı diye bakın. Bir tanesi bile eksikse karşılıklı referans bozulmuş demektir.
Büyük kataloglarda bu kontrolü elle yapmak mümkün değildir. Bir tarama aracı ile tüm hreflang kümelerini çekin; her çiftin karşılıklı olup olmadığını doğrulayan bir filtre uygulayın. Pek çok CMS'in otomatik hreflang üretimi, yeni sayfa eklendikten sonra güncellemeyi geciktirir ya da bazı sayfa türlerini kümeden dışarıda bırakır. Bu durum karşılıklı referansın kırılmasına yol açar. Hreflang testi nasıl yapılır konusunda daha fazla ayrıntı bulabilirsiniz.
Canonical, hreflang kararını sessizce geçersiz kılıyor olabilir
Google, canonical sinyalini hreflang'dan önce değerlendirir. Bir sayfanın canonical etiketi başka bir URL'ye işaret ediyorsa, Google o sayfayı bağımsız bir varlık olarak değil tercih edilen sayfanın kopyası olarak görür. Hreflang'ın o sayfayı bir dil kümesinin üyesi olarak tanımlaması artık etkisiz kalır.
Sorun genellikle şu senaryolarda ortaya çıkar: CMS, tüm dil versiyonları için otomatik olarak ana dil sayfasına canonical üretiyor. Bir geliştirici yanlışlıkla cross-canonical kurmuş. Ya da sayfalama, filtre veya etiket sayfalarında canonical kararı tutarsız uygulanmış. Bu durumların hiçbirinde GSC hata üretmez; Google sadece canonical'ı tercih eder ve hreflang'ı görmezden gelir.
Kontrol yöntemi: Sorunlu dil versiyonunun URL'sini alın, kaynak kodunu açın ve <link rel="canonical"> etiketini bulun. Bu etiketteki href kendi URL'siyle aynı mı (self-canonical), yoksa başka bir URL'yi mi gösteriyor? Bir de, ana dil sayfasında bu dil versiyonuna canonical işaret ediyor mu diye bakın. Her iki sayfanın canonical'ı çelişiyor veya başka bir URL'ye yönleniyorsa, hreflang bu sayfalar için çalışmayacaktır. Çok dilli sitelerde canonical etiket yönetimi konusundaki yazıda bu ilişki daha kapsamlı ele alınmıştır.
Tarama ve indeksleme gecikmesi: bekleme mi, sorun mu?
Hreflang yapısında değişiklik yaptıysanız veya yeni dil versiyonları eklediyseniz, Google'ın bu değişikliği görmesi zaman alır. Googlebot'un sayfayı yeniden taraması, yeni hreflang kümesini işlemesi ve arama sonuçlarına yansıtması bazen birkaç hafta sürebilir. Bu normal bir süreçtir.
Gecikmeden kaynaklanan bir sorunla gerçek bir konfigürasyon hatasını birbirinden ayırt etmek için şu soruyu sorun: Yalnızca bir locale mi etkilenmiş, yoksa birden fazlası mı? Tüm dil versiyonları eşit biçimde yanlış davranıyorsa, muhtemelen yapısal bir hata var. Yalnızca bir locale sorunluysa gecikme ihtimali daha yüksektir.
GSC'de Coverage raporunu açın. "Dizine Eklendi, Sitemap'te Yok" ve "Tarandı - Şu Anda Dizine Eklenmedi" durumlarına özellikle bakın. İkinci durum, Google'ın sayfayı gördüğünü ama indekslemek için seçmediğini gösterir. Bu, içerik kalitesi değerlendirmesi, duplicate içerik şüphesi veya canonical çatışması nedeniyle olabilir. Hata ayıklama sürecinde bu iki durumu birbirinden ayırt etmek, bir sonraki adımın yönünü belirler.
x-default yanlış konumlanmışsa yanlış locale kazanır
x-default değeri, hiçbir dil veya bölge kuralının kullanıcıyla eşleşmediği durumlar için tanımlanır. Tanım bu kadar basit görünse de pratikte ince bir tuzak barındırır.
Türkçe siteler için en sık görülen senaryo şudur: Ana sayfa (Türkçe versiyon) x-default olarak tanımlanmış, ama site artık birden fazla dili destekliyor. Japonya, Brezilya veya başka hiçbir dil versiyonunun bulunmadığı bir ülkeden gelen kullanıcı, x-default aracılığıyla Türkçe sayfaya yönlendiriliyor. Bu doğru bir davranış gibi görünse de sorun şurada başlıyor: Almanca veya Fransızca hreflang etiketleri yanlış yazılmış ya da Google tarafından yok sayılıyorsa, bu kullanıcılar da x-default sayfasına düşüyor. Hangi kullanıcıların neden Türkçeye geldiğini anlayamıyorsunuz çünkü herkes aynı yere geliyor.
Daha sağlıklı bir yaklaşım: x-default'u dil seçim sayfasına ya da en yüksek trafikli pazarın versiyonuna yönlendirin. Böylece hangi locale'in düzgün çalışıp çalışmadığını çok daha temiz bir şekilde izleyebilirsiniz. x-default değerinin doğru yapılandırılması bu kararı ayrıntılı biçimde ele alıyor.
Google hreflang yerine kullanıcı sinyallerini önceliklendiriyor olabilir
Yukarıdaki tüm adımları geçtiniz: karşılıklı referans tamam, canonical doğru, x-default yerinde, gecikme süresi de geçmiş. Ama yine de yanlış locale gösteriliyor. Google'ın hreflang'a neden uymadığını anlamak için farklı bir katmana bakmak gerekir.
Hreflang Google için bir öneridir, emir değildir. Google bağlantı profili, kullanıcı geri dönüş sinyalleri ve içerik kalitesini değerlendirerek bu öneriyi geçersiz kılabilir. İki dil versiyonu arasında içerik derinliği ciddi biçimde farklıysa, Türkçe versiyon kapsamlı, Almanca versiyon yüzeysel, Google daha güçlü sinyaller üreten Türkçe sayfayı Alman kullanıcılara gösterebilir. Bu bir hata değil, Google'ın kasıtlı bir kalite kararıdır.
Bağlantı profili de bu kararı etkiler. Almanca versiyona gelen backlink sayısı çok düşükse ve Türkçe versiyona güçlü backlink'ler varsa, Google otorite dağılımını hreflang'dan daha ağır bir sinyal olarak okuyabilir. GSC uluslararası hedefleme raporu üzerindeki verilerle bu durumu kısmen izleyebilirsiniz. Çözüm ise teknik değil editoryal: yetersiz dil versiyonlarının içerik kalitesini artırmak gerekir.
Debug protokolü: sıralı kontrol listesi
Yukarıdaki katmanları bir sıraya oturtmak, gereksiz tekrarı önler ve sorunu daha hızlı lokalize eder.
- Ölçüm: "Yanlış locale" iddiasını VPN + gizli mod + Search Console URL Inspection ile doğrulayın. Varsayımla devam etmeyin.
- Kaynak kod kontrolü: Hreflang etiketlerinin sayfada fiziksel olarak mevcut olduğunu doğrulayın. JavaScript ile render edilen etiketler Googlebot tarafından gecikmeyle okunur; kaynak kodda değil, render edilmiş DOM'da aranmalıdır.
- Karşılıklı referans: Her dil versiyonunun, kendisine hreflang üzerinden işaret eden sayfalardan karşılıklı referans aldığını kontrol edin.
- Canonical: Sorunlu sayfanın canonical'ının self-canonical olduğunu ve çakışan bir yönlendirme barındırmadığını doğrulayın.
- x-default: x-default URL'sinin kasıtlı olarak belirlendiğini ve yanlış bir locale'e işaret etmediğini kontrol edin.
- İçerik kalitesi: Sorunlu dil versiyonunun içerik derinliğini ana dil versiyonuyla karşılaştırın. Ciddi bir fark varsa Google bu tercihi yapıyor olabilir.
Bir adımda sorun bulduğunuzda düzeltmeyi yapın ve Google'ın yeniden taramasını bekleyin. GSC'de URL Inspection üzerinden "Dizine Eklenmeyi İste" seçeneğiyle süreci hızlandırabilirsiniz; ancak bu yalnızca tek sayfa için çalışır. Büyük katalog değişikliklerinde sitemap'i yeniden göndermek daha etkilidir.
Düzeltme sonrasında Google'ın durumu yansıtması için genellikle 2-6 hafta hesaplamak gerekir. Bu süre, sitenizin tarama frekansına ve değiştirilen sayfa sayısına göre değişir. Hreflang'ı baştan kuruyorsanız ya da mevcut kurulumu test ediyorsanız, hataları sistematik tarayan bir kontrol listesi (karşılıklı referans, dil kodu, self-referencing) kümenin yayına çıkmadan önce nerede açık bıraktığını gösterir. Küme satırlarını şablondan üretmek sözdizimini düzeltir; karşılıklı referansı yine kaynak kodda tek tek doğrulamak gerekir, üretim aracı bu adımın yerini tutmaz.
Hreflang çalışmıyor şikâyetinin büyük çoğunluğu bu altı adımın birinde sonuçlanır. Hiçbirinde sorun bulamıyorsanız, sorun teknik katmanda değil içerik katmanındadır. Bu Google'a bir mesaj anlamına gelir: gösterdiğin versiyon yeterince güçlü değil.
Çok dilli SEO'nun teknik katmanı editoryal katmanla birleşir. Kod doğru olabilir; ama Google'ın kararı kod okumakla bitmiyor.