- 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-US
gibi. - Sadece dil (
en
) genel sürüm;en-GB
/en-US
bö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;
noindex
sayfalara 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-default
yapı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-Language
eklemeyin. - 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 -I
ileLink:
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-default
landing 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_TR
yerinetr-TR
;en_UK
yerineen-GB
. noindex
sayfaya hreflang →noindex
sayfaları 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-default
eksik → 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.