İçeriğe atla
esoltecesoltec
E-ihracat ve çok ülke

Hreflang Etiketi Oluşturucu ve Doğrulayıcı

Hreflang etiketi nasıl yazılır? Hreflang, aynı sayfanın farklı dil ve ülke sürümlerini arama motoruna tanıtan bir link etiketidir; her sürüm için rel="alternate", hreflang ve href içeren bir satır yazılır. Kodun ilk parçası ISO 639-1 dil kodu, isteğe bağlı ikinci parçası ISO 3166-1 ülke kodudur: "tr-TR" geçerli, tek başına "TR" geçersizdir. En kritik kural karşılıklılıktır: kümedeki her sayfa kendisi dahil tüm sürümleri listeler.

Hreflang etiketi nasıl oluşturulur?

Hreflang, aynı sayfanın farklı dil ve ülke sürümlerini arama motoruna tanıtan bir link etiketidir. Google doğru sürümü doğru kullanıcıya gösterir ve çevirileri kopya içerik saymaz. Her sürüm için bir satır yazılır:

<link rel="alternate" hreflang="dil-ÜLKE" href="https://…" />

Kodun ilk parçası ISO 639-1 dil kodudur (tr, en, de), isteğe bağlı ikinci parçası ISO 3166-1 alpha-2 ülke kodudur (TR, DE, GB). Ülke tek başına yazılamaz: "TR" geçersiz, "tr-TR" geçerlidir. Google'ın kendi örneklerinde hem "en-ie" hem "en-GB" yazımı geçer; alışılmış biçim dil küçük, ülke büyük harftir. Araç kodu her zaman bu biçimde ("en-GB") üretir, listede olmayan bir kodu seçmenize izin vermez.

En kritik kural karşılıklılıktır: kümedeki her sayfa, kendi sürümü dahil tüm sürümleri listeler. Türkçe sayfa Almanca sayfayı gösterip Almanca sayfa Türkçeyi göstermezse Google iki etiketi de yok sayar. Bu yüzden araç tek bir blok üretir; aynı bloğu her sürüme yapıştırırsınız. Adresler mutlak olmalıdır: "/de/" ya da "//magaza.com/de/" değil, "https://magaza.com/de/".

Örnek hesaplama

  1. Türkçe ana sürüm: dil tr, ülke yok, adres https://magaza.com/
  2. İngilizce sürüm: dil en, ülke yok, adres https://magaza.com/en/
  3. Almanca sürüm: dil de, ülke yok, adres https://magaza.com/de/
  4. Avusturya için ayrı fiyatlı Almanca sürüm: dil de, ülke AT, adres https://magaza.com/de-at/
  5. x-default: İngilizce sayfa (uluslararası ziyaretçi için en güvenli seçim)

Araç dört sürüm + x-default için şu beş satırı üretir; bu blok dört sayfanın hepsine aynen eklenir (x-default ayrı bir sayfa değil, İngilizce sayfayı gösterir):

<link rel="alternate" hreflang="tr" href="https://magaza.com/" />

<link rel="alternate" hreflang="en" href="https://magaza.com/en/" />

<link rel="alternate" hreflang="de" href="https://magaza.com/de/" />

<link rel="alternate" hreflang="de-AT" href="https://magaza.com/de-at/" />

<link rel="alternate" hreflang="x-default" href="https://magaza.com/en/" />

Sitemap sekmesinde aynı küme dört url bloğu olarak çıkar; her blokta beş xhtml:link satırı bulunur (4 × 5 = 20 satır). Next.js sekmesi ise beş kodu alternates.languagesnesnesine yazar. Bölgesiz "de" yerine "de-DE" girilseydi araç uyarırdı: de-AT satırı Avusturya'yı karşılar, ama İsviçre, Belçika ya da Lüksemburg'daki Almanca kullanıcılar hiçbir sürümle eşleşmez ve x-default'a, yani İngilizce sayfaya düşerdi.

tr-TR mi, tr mi? x-default ne işe yarar?

Ülke kodu hedefi daraltır. Yalnız Türkiye'ye satıyorsanız "tr" ile "tr-TR" arasında pratikte fark yoktur; ama Almanya'daki Türkçe konuşan müşteriye de aynı sayfayı göstermek istiyorsanız bölgesiz "tr" doğru seçimdir. Ülke kodu, aynı dilde farklısayfalarınız olduğunda anlam kazanır: de-DE ve de-AT ayrı fiyat, kargo ve KDV oranı gösteren iki sayfa ise ikisini de yazın, üstüne bölgesiz "de" ekleyin.

hreflang değerlerine göre hedeflenen kullanıcılar
hreflangKimi hedefler
trÜlke fark etmeksizin tüm Türkçe konuşan kullanıcılar
tr-TRYalnız Türkiye'deki Türkçe konuşan kullanıcılar
deAlmanya, Avusturya, İsviçre… tüm Almanca konuşanlar
de-ATYalnız Avusturya'daki Almanca konuşanlar (ayrı fiyat/kargo sayfası için)
en-GBBirleşik Krallık'taki İngilizce konuşanlar
zh-HansBasitleştirilmiş Çince okuyanlar (yazı sistemi kodu, ülke değil)
x-defaultHiçbir dil/bölgeyle eşleşmeyen herkes

x-default, tarayıcı dili listenizdeki hiçbir sürümle eşleşmeyen kullanıcının göreceği sayfadır; genellikle İngilizce sürüm ya da bir dil seçim sayfası olur. Zorunlu değildir ama Google önerir; araç eksikse uyarır. Dil seçim sayfası kullanıyorsanız o sayfaya da aynı bloğu ekleyin.

Tipik hatalar

  • Karşılıklı etiket eksik.Yalnız ana dildeki sayfaya etiket koymak. Küme her sayfada tam listelenmeli; SEO tarama araçlarındaki "dönüş etiketi yok" (no return tags) hatasının nedeni budur.
  • Göreli adres."/en/" yazmak. Google mutlak adres ister; araç göreli adresi hata olarak işaretler.
  • Yanlış kod biçimi."en-UK" (Birleşik Krallık GB'dir; Google UK, EU ve UN kodlarına karşı ayrıca uyarır), "tr-TR" yerine tek başına "TR", "en_GB" alt çizgi, "es-419" gibi bölge numaraları (Google desteklemez). Araç yalnız ISO listesindeki kodları sunar; elle yazılmış etiketlerinizi denetlerken bu hatalara bakın.
  • Aynı kodu iki kez yazmak.Bir sayfada "de" iki farklı adrese gidemez; hangisinin geçerli olduğu belirsiz kalır.
  • Yönlendirilen ya da 404 veren adres. Etiket son adrese (200 dönen, canonical sayfaya) işaret etmeli; kampanya parametreli ya da # parçalı adres kullanmayın.
  • Canonical ile çelişki.Almanca sayfanın canonical'ı Türkçe sayfayı gösteriyorsa hreflang işe yaramaz; her sürümün canonical'ı kendisi olmalıdır.
  • Çevrilmemiş sayfaya etiket.Aynı Türkçe içeriği "de" olarak işaretlemek yanıltıcıdır; hreflang ancak gerçekten yerelleştirilmiş sürümler için kullanılır.

ESOLTEC'te çok bölgeli mağazada hreflang

Bu aracı, kendi kodladığınız ya da hreflang desteği olmayan bir altyapıda kullandığınız site için hazırladık. ESOLTEC mağazasında ise her bölge kendi dili, para birimi ve alan adıyla açılır (örneğin Türkiye için magaza.com, Almanya için de.magaza.com); ürün, kategori ve blog sayfaları bölgeler arasında eşleşir ve hreflang etiketleri ile sitemap'teki xhtml:link satırları mağaza tarafından otomatik üretilir. x-default varsayılan bölgeyi gösterir, tek dilli mağazada etiket hiç basılmaz. Çok bölgeli satışa geçtiğinizde bu bloğu elle bakımlı tutmanız gerekmez.

Sık sorulan sorular

Hreflang etiketi nedir, ne işe yarar?

Hreflang, aynı sayfanın farklı dil ve ülke sürümlerini arama motoruna tanıtan link etiketidir. Google, Almanya'daki kullanıcıya Almanca, Türkiye'dekine Türkçe sürümü gösterir ve çevirileri kopya içerik saymaz. Etiket sayfanın head bölümüne, HTTP başlığına ya da sitemap'e eklenebilir; bu araç head ve sitemap biçimlerini üretir.

Hreflang kodu nasıl yazılır: tr mi, tr-TR mi?

Kodun ilk parçası ISO 639-1 dil kodu (tr, en, de), isteğe bağlı ikinci parçası ISO 3166-1 alpha-2 ülke kodudur (TR, DE, GB). Ülke tek başına yazılamaz: TR geçersiz, tr-TR geçerlidir. Ülke kodu hedefi daraltır; yalnız Türkiye'ye satıyorsanız tr ile tr-TR arasında pratik fark yoktur, ama Almanya'daki Türkçe konuşan müşteriye de aynı sayfayı göstermek istiyorsanız bölgesiz tr doğru seçimdir.

x-default nedir, zorunlu mu?

x-default, tarayıcı dili listenizdeki hiçbir sürümle eşleşmeyen kullanıcının göreceği sayfadır; çoğunlukla İngilizce sürüm ya da dil seçim sayfası olur. Zorunlu değildir ama Google önerir; araç eksikse uyarı verir. Dil seçim sayfası kullanıyorsanız o sayfaya da aynı hreflang bloğunu eklemelisiniz.

Etiketleri her sayfaya mı eklemem gerekiyor?

Evet. Kümedeki her sayfa, kendi sürümü dahil tüm sürümleri listelemelidir; buna karşılıklılık denir. Türkçe sayfa Almancayı gösterip Almanca sayfa Türkçeyi göstermezse Google bu etiketleri yok sayar; SEO tarama araçları bu durumu 'dönüş etiketi yok' (no return tags) hatası olarak raporlar. Bu yüzden araç tek bir blok üretir ve aynı bloğu 4 sürümlü bir sitede 4 sayfaya da yapıştırırsınız.

Hreflang adresleri göreli olabilir mi?

Hayır. Google tam adres ister: https://magaza.com/de/ geçerlidir, /de/ ya da //magaza.com/de/ geçersizdir. Adres yönlendirme yapmamalı, 200 dönmeli ve canonical adres olmalıdır; kampanya parametreli ya da # parçalı adres kullanmayın. Araç göreli adresi hata, # parçasını ve http:// başlangıcını uyarı olarak işaretler.

Sitemap ile head arasındaki fark nedir, hangisini kullanmalıyım?

İkisi de aynı bilgiyi taşır; birini kullanmak yeterlidir, ikisini birden kullanırsanız birebir aynı olmalıdır. Sitemap yöntemi büyük sitelerde sayfa kodunu şişirmez ve tek dosyadan yönetilir; head yöntemi küçük sitelerde daha kolaydır. Sitemap'te urlset etiketine xmlns:xhtml="http://www.w3.org/1999/xhtml" bildirimi eklenmeli ve her url girdisi kümenin tamamını xhtml:link satırlarıyla listelemelidir.

Next.js'te hreflang nasıl eklenir?

App Router'da metadata nesnesinin alternates.languages alanına kod → adres eşlemesi verilir; Next.js bunları head içinde link rel="alternate" hreflang etiketlerine çevirir. Araç bu nesneyi hazır üretir. Aynı languages nesnesi kümedeki her sayfada kullanılmalı, canonical ise her sayfada kendi adresi olmalıdır; metadataBase tanımlıysa göreli yollar da çalışır ama mutlak adres daha güvenlidir.

de-DE ve de-AT için ayrı sayfam varsa bölgesiz de de eklemeli miyim?

Evet, önerilir. Yalnız de-DE ve de-AT tanımlarsanız İsviçre ya da Belçika'daki Almanca konuşan kullanıcı hiçbir sürümle eşleşmez ve x-default'a düşer. Bölgesiz de satırı (genellikle Almanya sayfasıyla aynı adres) bu boşluğu kapatır; araç bölgesiz karşılığı olmayan dilleri uyarı olarak listeler. Aynı adresin birden çok kodla kullanılması geçerlidir.

Etiketleri ekledim, Google ne zaman dikkate alır?

Sayfalar yeniden tarandığında; süre sitenizin ne sıklıkla tarandığına bağlıdır. Search Console'daki Uluslararası Hedefleme raporu Google tarafından kaldırıldığı için hreflang hataları artık panelde toplu listelenmez; etiketleri sayfa kaynağından ya da bir SEO tarama aracıyla kontrol edin. Sitemap yöntemini kullandıysanız sitemap'i Search Console'a yeniden gönderin.

Kaynaklar