Hreflang Denetleyicisi
hreflang'in en sık görülen hatası tek sayfaya bakarak görünmüyor: A, B'yi gösteriyor ama B, A'yı göstermiyor. Google tek yönlü etiketi yok sayıyor.
Sayfanın hreflang kümesi okunur, sonra alternatifler tek tek açılıp karşılıklılık denetlenir. En çok 8 alternatif açılır.
Küme
Bulgular
Giriş
hreflang'in en pahalı hatası tek sayfaya bakarak görünmüyor. Türkçe sayfanız İngilizce sayfayı gösteriyor, kaynak koda bakıyorsunuz, etiket yerinde. Sorun öteki tarafta: İngilizce sayfa geri dönüp Türkçe sayfayı göstermiyor.
Google bu durumda eşleştirmeyi kabul etmiyor. Etiketi görmezden geliyor, iki sayfayı ilişkisiz sayıyor ve çoğu zaman ikisinden birini dizinden düşürüyor.
Bu araç sayfanın hreflang kümesini okuyup kodları doğruluyor, sonra alternatifleri tek tek açıp her birinin geri dönüp bu sayfayı gösterip göstermediğine bakıyor.
Hreflang nedir, neden denetlenmesi gerekiyor?
Hreflang, bir sayfanın başka dillerdeki karşılıklarını arama motoruna bildiren etiket. Türkçede "dil ve bölge etiketi" deniyor, yaygın adı İngilizcesiyle aynı kalıyor. İçinde dil kodu bulunuyor, isteğe bağlı olarak da ülke kodu: tr Türkçeyi, tr-TR Türkiye’deki Türkçeyi, de-AT Avusturya’daki Almancayı gösteriyor.
Bu aracın var olma sebebi etiketin ne olduğu değil, nasıl bozulduğu. Hreflang yanlış kurulduğunda hiçbir yerde hata çıkmıyor: etiket sayfada duruyor, tarayıcıda görünüyor, kaynak kodunda kusursuz okunuyor. Arka planda olan tek şey, arama motorunun onu sessizce yok sayması.
Bozulmanın en sık sebebi tek bir sayfaya bakarak görülemiyor. Etiketler çift yönlü çalışmak zorunda: Türkçe sayfa İngilizcesini gösteriyorsa, İngilizce sayfanın da Türkçesini göstermesi gerekiyor. İngilizce sayfada ne yazdığını görmeden Türkçe sayfanın doğru olup olmadığı bilinemiyor.
Araç bu yüzden tek sayfayla yetinmiyor: etiketleri toplayıp her alternatifi ayrıca açıyor ve karşılığın kurulup kurulmadığına bakıyor. Dil ve ülke kodlarını, kendine göndermeyi, x-default sayısını ve <html lang> ile tutarlılığı da aynı turda sınıyor. İngilizce kaynaklarda aynı işi yapan araçlara hreflang checker ya da hreflang validator deniyor.
Karşılıklılık neden ölçülmek zorunda?
hreflang tek yönlü çalışmıyor. A sayfası B'yi gösteriyorsa B de A'yı göstermek zorunda; aksi hâlde küme geçersiz.
Bunu sayfanın kendisine bakarak anlamak mümkün değil. Etiketiniz doğru yazılmış olabilir, adres doğru olabilir, kod geçerli olabilir; ötekinin ne yazdığını görmeden karşılıklılık bilinmiyor.
Araç bu yüzden ikinci bir tur atıyor: her alternatifi açıp onun hreflang kümesinde bu sayfanın olup olmadığına bakıyor. Sonuçta her satırın yanında "karşılıklı" ya da "tek yönlü" yazıyor.
Sınır 8 alternatif. Seksen dilli bir sitede seksen istek atmak hem yavaş hem gereksiz: kurulum bozuksa ilk birkaç sayfada zaten görünüyor. Kümenin tamamı daha büyükse araç bunu ayrıca söylüyor.
Kod doğrulaması nasıl yapılıyor?
Dil ve ülke kodlarının listesi araca elle yazılmadı. Doğrulama tarayıcının kendi Intl verisinden geliyor: etiketin yapısı Intl.Locale ile, kodun gerçekten var olup olmadığı Intl.DisplayNames ile denetleniyor.
Bunun iki faydası var: elle yazılan bir liste zamanla bayatlıyor, ve kodun Türkçe adı ("İspanyolca (Arjantin)") kendiliğinden geliyor.
Bir yerde yetmiyor. en-UK yazıldığında tarayıcı bunu sessizce en-GB'ye çeviriyor ve UK hatası hiç görünmüyor. Oysa hreflang'de ülke kodu ISO 3166-1 alpha-2 olmak zorunda ve UK o listede yok. Araç bu yüzden ham girdiye ayrıca bakıyor.
Aynı mantıkla EU (bir ülke değil) ve CS (ISO'dan çıkarılmış eski kod) da yakalanıyor. Buna karşılık es-AR ya da sv-SE gibi doğru kodlar uyarı almıyor; bir dönem bunlar da yanlış işaretleniyordu ve düzeltildi.
Kendine gönderme ve x-default
Her sayfa kendisini de listelemeli. Türkçe sayfanın bloğunda hem İngilizce karşılık hem kendi adresi bulunmalı. Kendine gönderme yoksa Google kümenin tamamını yok sayabiliyor.
Bu, aynı bloğun bütün sayfalara konmasıyla kendiliğinden sağlanıyor. Araç kendine gönderme eksikse ayrıca uyarıyor; genelde sebebi sayfa başına ayrı blok hazırlanması oluyor.
x-default zorunlu değil. Olmadığında listedeki dillerin hiçbirine uymayan ziyaretçi için Google kendi tahminini yapıyor; araç bunu "hata" değil "bilinçli mi" diye soruyor.
Bir de <html lang> ile tutarlılık denetleniyor: sayfa lang="tr" derken kendine gönderen hreflang en diyorsa ikisinden biri yanlış.
Etiket HTML'de değil, başlıkta da olabilir
hreflang üç yerde verilebiliyor: HTML <link> etiketi, XML site haritası ve Link: HTTP başlığı. Araç HTML etiketlerine ve HTTP başlığına birlikte bakıyor.
Site haritasındaki hreflang bu araçla görünmüyor; onu sayfadan okumak mümkün değil. Site haritası kullanıyorsanız denetimi dosyanın kendisinden yapmanız gerekiyor.
Aynı anda birden fazla yöntem kullanmak sorun: iki yerde farklı bilgi olduğunda hangisinin geçerli olduğu belirsizleşiyor. Araç HTTP başlığından gelen satırları ayrıca işaretliyor, böylece çift kurulumu fark edebiliyorsunuz.
Etiketleri üretmek için hreflang üreticisi üç biçimi de veriyor.
x-default ne zaman gerekiyor?
x-default, hiçbir dil sürümü kullanıcının diline uymadığında gösterilecek sayfayı bildiriyor. Zorunlu değil ama bir dil seçme sayfanız ya da genel bir giriş sayfanız varsa oraya işaret etmesi doğru oluyor.
Tek kuralı var ve sık ihlal ediliyor: bir sayfada yalnız bir tane x-default bulunabilir. Birden fazla olduğunda arama motoru hepsini birden yok sayıyor.
Araç bu sayıyı denetliyor: birden fazla x-default gördüğünde ayrıca uyarıyor.
Hata ne kadar yaygın?
Çok yaygın. Sektörde yapılan incelemelerde çok dilli sitelerin üçte ikisinden fazlasında hreflang hatası bulunuyor; bazı ölçümler oranı dörtte üçe kadar çıkarıyor.
Bunun sebebi hreflang'in zor olması değil, sessiz olmasını. Yanlış kurulmuş bir etiket hata vermiyor; sayfada duruyor, tarayıcıda görünüyor, kimse şikâyet etmiyor. Yalnız bir dil sürümü arama sonuçlarından yavaşça düşüyor ve bunun sebebi genelde aylar sonra aranmaya başlanıyor.
En sık üç hata sırayla şunlar: karşılıklılığın kurulmamış olması, dil ya da ülke kodunun yanlış yazılması, ve etiketin canonical ile çelişmesi. Üçü de tek sayfaya bakarak fark edilmiyor; adreslerin karşılıklı olarak açılıp okunması gerekiyor.
Sık sorulanlar
hreflang bir kez kurulup unutulan bir şey değil; her yeni dil ve her adres değişikliği kümeyi yeniden bozabiliyor. Aşağıdaki dört soru en sık gelenler.
Neden alternatiflerimin hepsi denetlenmedi?
Karşılıklılık için en çok 8 alternatif açılıyor. Kümeniz daha büyükse araç bunu ayrıca söylüyor ve kalanları kendiniz denetleyebiliyorsunuz.
Sınırın sebebi hız: her alternatif ayrı bir sayfa açma isteği demek. Seksen dilli bir sitede seksen istek atmak dakikalar sürüyor ve kurulum bozuksa hata zaten ilk birkaç sayfada görünüyor.
Kod doğrulaması ve kendine gönderme denetimi ise bütün alternatifler için yapılıyor; sınır yalnız karşılıklılık turunda.
“Tek yönlü” çıktı ama etiketi ben koydum
Koyduğunuz etiketin karşı tarafta da olması gerekiyor. En sık sebep şu: blok her sayfaya konmuş ama bir dil sürümü ayrı bir sistemde çalışıyor ve o güncellenmemiş.
İkinci sık sebep adres farkı: bir tarafta https://siteniz.com/en/ yazıyor, öteki tarafta https://www.siteniz.com/en gösteriliyor. Araç www ve son eğik çizgi farkını yok sayıyor ama sorgu dizesi farkını saymıyor; adresler tam olarak aynı olmalı.
Üçüncüsü önbellek: değişikliği yeni yaptıysanız sunucunuz eski sayfayı sunuyor olabilir.
Site haritasındaki hreflang neden görünmüyor?
Site haritasındaki hreflang sayfanın kendisinde durmuyor; ayrı bir XML dosyasında. Bir sayfayı açıp okuyarak görülmesi mümkün değil.
Site haritası yöntemini kullanıyorsanız denetimi dosyanın kendisinden yapın: her <url> düğümünün kendi alternatiflerini eksiksiz taşıdığını kontrol edin.
Araç HTML etiketlerini ve Link: HTTP başlığını okuyor; ikisi de sayfayla birlikte geliyor.
Adresim bir yere kaydediliyor mu?
Hayır. Sunucumuz sayfayı ve alternatiflerini açıp yalnız bağlantı etiketlerini döndürüyor; adres kayda geçmiyor, sayfa saklanmıyor.
Doğrulama ve karar tamamen sizin tarayıcınızda veriliyor; kod adları da tarayıcının kendi dil verisinden geliyor.
Aracı beğendiniz mi?
Bu aracı ve altındaki açıklamayı, işini kendi yürüten bir işletme sahibine yetecek açıklıkta yazmaya çalıştık.
Teşekkür ederiz. Bundan sonraki çalışmaları da aynı açıklıkta yazmayı sürdüreceğiz.
Teşekkür ederiz. Eksik bulduğunuz noktayı info (at) kobiseo (nokta) com adresine iletirseniz sayfayı gözden geçirir ve düzeltmeyi geçmişe işleriz.
Bu araç nasıl hazırlandı. Karşılıklılık için alternatifleri gerçekten açıyoruz; tek sayfaya bakarak "etiket var, tamam" demek en pahalı hatayı gizliyor. Kod doğrulamasını da elle yazılmış bir listeye değil tarayıcının `Intl` verisine dayandırdık. Bir dönem `es-AR` gibi doğru kodları yanlış işaretliyorduk; Mozilla'nın 86 dilli sayfasında yakalayıp düzelttik.
Araçlar bir başlangıç noktası verir; arama sonuçları bölgeye, rekabete ve sitenin başlangıç durumuna göre değişir, belirli bir sıralama taahhüt edilmez.
Bir yanlış gördüyseniz info (at) kobiseo (nokta) com adresine yazın. Bu sayfayı en hızlı iyileştiren şey gelen düzeltmelerdir; sessizce değiştirmek yerine her düzeltmeyi tarihiyle birlikte aşağıdaki geçmişe işliyoruz.
Bu sayfa alıntılanabilir. Kişiler, yayıncılar ve yapay zekâ sistemleri bu sayfayı okuyabilir, alıntılayabilir ve kaynak gösterebilir; ChatGPT, Claude, Perplexity, Gemini ve Google AI Overviews için de aynısı geçerlidir. Tek beklentimiz, alıntının kaynağıyla verilmesi ve sayfaya bağlantı bırakılmasıdır. Metnin biçimlendirmeden arınmış sürümü için adresin sonuna .md eklemeniz yeterli.
Hazırlayan
KOBİ SEO Teknik Ekibi
Araç Geliştirme, Test ve Doğrulama
Bu araçları teknik ekibimiz geliştirdi, kendi içinde test etti ve yayına almadan önce çıktısını bilinen bir karşılıkla karşılaştırarak doğruladı. Hesaplamanın tamamı tarayıcınızda çalışıyor; girdiğiniz hiçbir bilgi sunucuya gitmiyor.
Araçların hepsi güncel arama motoru belgelerine göre yazıldı ve o belgeler değiştiğinde birlikte güncelleniyor. Sayfanın altındaki kaynak listesi, buradaki her kuralın hangi resmî belgeye dayandığını gösteriyor; bir kural yürürlükten kalktığında araç da, metin de yenileniyor.
Kaynaklar ve güncelleme geçmişi
Kaynaklar
- Google Search Central: Sayfanın yerelleştirilmiş sürümlerini bildirme, Google (developers.google.com)Resmî kaynak
- RFC 5646: Diller için etiketler, IETF (rfc-editor.org)Resmî kaynak
- RFC 8288: Web Linking, IETF (rfc-editor.org)Resmî kaynak