- 1) Hreflang ne zaman gerekir?
 - 2) URL stratejisi: alt dizin mi, alt alan mı?
 - 3) Dil/bölge kodları ve eşleştirme
 - 4) Yöntem #1: HTML
 - 5) Yöntem #2: HTTP Link Header
 - 6) Yöntem #3: XML site haritası
 - 7) x-default ve kanonik
 - 8) CMS / platform notları
 - 9) QA ve doğrulama
 - 10) Sık hatalar ve çözümleri
 - 11) Mini SSS
 - 12) İlgili içerik ve sonraki adım
 
Özet: Çok dilli sitelerde hangi sayfanın hangi dile/bölgeye ait olduğu arama motorlarına hreflang ile bildirilir. Bu rehber, HTML <head>, HTTP Link Header ve XML site haritası yöntemlerini; x-default ve kanonik etiketinin birlikte nasıl çalıştığını; QA kontrol listesini ve sık hataları örnek kodlarla anlatır.
Bağlam: Yerelleştirme Hizmetleri
1) Hreflang ne zaman gerekir?
- Aynı içeriğin farklı dil ve/veya bölge sürümlerini (ör. 
tr-TR,en-GB) yayımlıyorsanız. - Kullanıcıların yanlış dilde sayfaya düşmesini azaltmak istiyorsanız.
 - Coğrafi hedefleme değil, dil/bölgeye uygun sonuç göstermek istiyorsanız.
 - Tek dilli sitelerde genellikle gerekmez. Hreflang otomatik yönlendirme yapmaz.
 
2) URL stratejisi: alt dizin mi, alt alan mı?
2.1) Alt dizin
- Örnek: 
https://example.com/tr/,https://example.com/en/ - Artı: Otorite ana alanla paylaşılır; bakım ve analitik kolaydır.
 - Eksi: Merkezi içerik disiplini ve sürümleme gerekir.
 
2.2) Alt alan
- Örnek: 
https://tr.example.com/,https://en.example.com/ - Artı: Operasyonel esneklik; ülke ekipleri bağımsız çalışabilir.
 - Eksi: Otorite dağılımı ve devri ek çalışma isteyebilir.
 
Parametre (?lang=tr) ve hash (#) temelli çözümler SEO için uygun değildir. Hangi modeli seçerseniz seçin, her dil sayfasında self-canonical kullanın; farklı diller birbirine canonical edilmez.
3) Dil/bölge kodları ve eşleştirme
- Dil (ISO 639-1) + isteğe bağlı bölge (ISO 3166-1 alpha-2): 
tr-TR,en-USgibi. - Sadece dil (
en) genel sürüm;en-GB/en-USbölgeye özgüdür. - Yaygın hatalar: 
tr_TR,en_UK, geçersiz bölge kodları. - Hreflang referansları karşılıklı olmalıdır (A↔B).
 
4) Yöntem #1: HTML <head>
Her sayfanın <head> bölümüne link rel="alternate" etiketleri ekleyin:
<link rel="alternate" hreflang="x-default" href="https://example.com/" /><link rel="alternate" hreflang="tr-TR" href="https://example.com/tr/" /><link rel="alternate" hreflang="en" href="https://example.com/en/" /><link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/" />
- Artı: Basit ve CMS’lerde pratik.
 - Dikkat: Büyük sitelerde çok satır üretir; sorun değildir. Karşılıklılık şarttır; 
noindexsayfalara hreflang verilmez. 
5) Yöntem #2: HTTP Link Header
HTML’e erişilemiyorsa sunucu yanıt başlıklarına ekleyin (satırları ayrı ayrı yazın):
Link: <https://example.com/>; rel="alternate"; hreflang="x-default"Link: <https://example.com/tr/>; rel="alternate"; hreflang="tr-TR"Link: <https://example.com/en/>; rel="alternate"; hreflang="en"
- Ne zaman: Headless mimari, CDN/edge templating, dinamik çıktılar.
 - Dikkat: Cache/purge ve header’ın CDN’den son kullanıcıya taşındığını test edin.
 
6) Yöntem #3: XML site haritası
Her <url> düğümüne aşağıdaki satırları ekleyin:
<loc>https://example.com/</loc><xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/" /><xhtml:link rel="alternate" hreflang="tr-TR" href="https://example.com/tr/" /><xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/" />
- Artı: Merkezi yönetim; büyük/çok dilli sitelerde düzen sağlar.
 - Dikkat: Tek yöntem seçip tutarlı uygulayın. HTML/HTTP/XML yöntemlerinde dil seti aynı olmalıdır.
 
7) x-default ve kanonik
x-default, genel ya da dil/bölge seçici landing’i işaret eder.- Her dil sayfası kendi canonical’ına işaret eder (self-canonical); farklı diller birbirine canonical edilmez.
 - Konum/dil otomatik yönlendirme varsa, yönlendirme öncesinde dil/ülke seçimi sunan bir landing’i 
x-defaultyapın. 
8) CMS / platform notları
- WordPress: Şablonda 
<link rel="alternate">üreten çözüm kullanın; karşılıklılığı kontrol edin. - Headless/Shopify: Şablonda dil döngüsü kurun veya HTTP Link Header kullanın. Edge cache key’e 
Accept-Languageeklemeyin. - CDN: Bölgesel varyant için teknik yönlendirme yerine hreflang sinyalini temel alın; sitemap ve header kalıcılığını test edin.
 
9) QA ve doğrulama
- Site haritası: Dil seti tüm sayfalarda tutarlı mı? Boş/yanlış URL yok mu?
 - Karşılıklılık: A sayfası B’yi, B sayfası A’yı işaretliyor mu?
 - Self-canonical: Her dil sayfası kendi canonical’ına mı işaret ediyor?
 - Header taraması: 
curl -IileLink:başlıklarını kontrol edin. - Arayüz QA: Dil seçici, menüler ve içerik doğru dilde mi? Kırık bağlantı var mı? Ayrıntılı adımlar için L10n QA Kontrol Listesi makalesine bakın.
 
9.1) Hızlı kontrol listesi
- Her sayfanın tüm dil varyantları listelendi.
 - Varyantlar karşılıklı işaretli (A↔B).
 - Her dil sayfası self-canonical.
 x-defaultlanding tanımlı (gerekiyorsa).- HTML / HTTP / XML yöntemlerinden yalnızca biri etkin (karma yok).
 - ISO kodları doğru (ör. 
tr-TR,en-GB). 
10) Sık hatalar ve çözümleri
- Tek yönlü işaretleme → Karşılıklılığı sağlayın.
 - Yanlış ISO kodu → 
tr_TRyerinetr-TR;en_UKyerineen-GB. noindexsayfaya hreflang →noindexsayfaları eşlemeden çıkarın.- Çapraz canonical → Her dilde self-canonical kullanın.
 - Tutarsız yöntem seti → HTML’de 3 dil, XML’de 2 dil gibi çelişkileri kaldırın; yöntemi tek ve tutarlı kullanın.
 x-defaulteksik → Dil/bölge seçici landing varsa ekleyin.
11) Mini SSS
x-default zorunlu mu?
Her zaman zorunlu değildir; dil/ülke seçici bir landing varsa önerilir.
Bölge kodu şart mı?
Hayır. Sadece dil (ör. en) de geçerlidir; bölgeye özgü içerikte en-GB veya en-US tercih edilir.
Otomatik yönlendirme ile birlikte kullanabilir miyim?
Evet; ancak yönlendirme öncesinde dil/ülke seçimi sunan bir landing’i x-default olarak konumlandırın.
12) İlgili içerik ve sonraki adım
- Yazılım ve Uygulama Yerelleştirme Rehberi
 - L10n QA Kontrol Listesi
 - Sürekli Yerelleştirme (CI/CD) — Blog
 
Projeniz için doğru hreflang kurulumunu birlikte tasarlayalım: İletişim.


