Strateji
Uluslararası SEO: Gerçekten Çalışan hreflang Mimarisi
Çok dilli bir web sitesini her pazar kendi dilinde sıralanacak şekilde yapılandırma: URL mimarisi, hreflang kuralları ve sistemi bozan hatalar.
Çok dilli web sitelerinin çoğu çeviri kalitesi yüzünden değil, mimari hatalar yüzünden başarısız olur — ve bu başarısızlık şirket içinden bakıldığında görünmezdir; çünkü her çalışan siteyi kendi tarayıcısında sorunsuz görür.
İşte en sık karşılaşılan temel hata:
Sitenin tek bir URL üzerinde JavaScript ile metin değiştirerek 6 dili "desteklemesi".
Tek bir sayfa vardır. Tek bir URL vardır. Google onu bir kez ve tek bir dilde indeksler. Almanca içerik yalnızca tarayıcıda, bir script çalıştıktan sonra var olur. Google tarafından hiç indekslenmemiştir; çünkü indekslenecek bir Almanca URL yoktur. Almanca arama yapan bir Alman alıcı sitenizi asla bulamaz.
Dil değiştiriciniz URL'i değiştirmeden sadece sayfadaki metni değiştiriyorsa, çok dilli bir siteniz yoktur. İstemci taraflı çeviri eklentisi olan tek dilli bir siteniz vardır.
Geçerli üç temel mimari
Google dil ve bölge hedefleme için tam olarak üç yapıyı destekler. Birini seçin ve tutarlı olun:
| Mimari | Örnek | En uygun senaryo |
|---|---|---|
| Alt Dizin (Subdirectory) | example.com/de/ | Neredeyse tüm işletmeler |
| Alt Alan Adı (Subdomain) | de.example.com | Her pazar için ayrı altyapı varsa |
| Ülke Kodlu Alan Adı (ccTLD) | example.de | Güçlü yerel marka, büyük bütçe |
Alt dizinler (subdirectories) çoğu işletme için en mantıklı tercihtir. Ana alan adının mevcut otoritesini miras alırlar, ek maliyet çıkarmazlar ve barındırması kolaydır. Yeni bir ccTLD sıfır otoriteyle başlar ve ayrı bir site gibi büyütülmesi gerekir — bu, ancak yerel güven gerçekten yerel bir uzantı gerektirdiğinde haklı çıkan yıllar sürecek bir yatırımdır.
URL parametreleri (example.com/?lang=de) bu listede yoktur. Google bunları dil hedefleme için açıkça önermez. Tutarsız işlenirler, kopya içerik oluşturmaya çok müsaittirler ve hreflang ağını kırılgan hale getirirler.
URL uzantılarını da (slugs) yerelleştirin
Her dil için ayrı URL yapısına geçtiyseniz işi tam yapın:
/en/services/web-design/
/de/leistungen/webdesign/
/tr/hizmetler/web-tasarim/
/fr/services/conception-web/
Şöyle olmamalı:
/en/services/web-design/
/de/services/web-design/
/tr/services/web-design/
İkinci yöntem de çalışır ancak URL avantajını boşa harcar — URL, bir arama motorunun sayfayı çizmeden önce okuduğu az sayıdaki sayfa içi sinyalden biridir. Arama sonuçlarına bakan bir Alman kullanıcı Almanca bir URL ve Almanca bir başlık görür. İkisi de tıklama oranı için kritiktir.
Buna gelen itiraz hep bakım zorluğudur. O itiraz yalnızca dosyaları elle yazıyorsanız geçerlidir. URL'leriniz bir içerik modelinden geliyorsa — dil başına bir slug alanı — maliyeti dil başına sayfa başına tek bir satırdır.
hreflang: Siteleri bozan dört temel kural
hreflang mantıken çok basittir ama pratikte affetmez. Dört kural gerçek dünyadaki neredeyse tüm hataları kapsar:
1. Karşılıklı (resiprocal) olmak zorundadır
İngilizce sayfa Almanca sayfayı işaret ediyorsa, Almanca sayfa da İngilizce sayfayı geri işaret etmelidir. Eğer etmiyorsa, Google hreflang etiketini tamamen yok sayar — kısmen değil, tamamen.
Bu durum en çok bir sayfa bazı dillerde varken bazılarında olmadığında ve üretim mantığı simetrik kurulmadığında bozulur.
2. Her sayfa kendine de referans vermelidir
Her sayfanın hreflang kümesi, kendi URL'sini gösteren bir satır içermek zorundadır. Alternatiflerini listeleyen ama kendi URL'sini dışarıda bırakan bir sayfanın kümesi geçersizdir.
3. Mutlak (absolute) URL kullanılmalıdır
<!-- doğru -->
<link rel="alternate" hreflang="de" href="https://example.com/de/leistungen/" />
<!-- bozuk -->
<link rel="alternate" hreflang="de" href="/de/leistungen/" />
Göreceli (relative) URL'ler desteklenmez. Bu hata sessizce başarısız olur ve fark edilmez.
4. Dil kodları geçerli ISO standartlarında olmalıdır
- Sadece dil:
de,tr,fr— o dili konuşan herkesi hedefler - Dil + Bölge:
de-AT,en-GB,pt-BR— ISO 639-1 dil, ISO 3166-1 Alpha-2 bölge - Tek başına bölge geçersizdir.
hreflang="at"Avusturya anlamına gelmez; çünküatbir dil kodu değildir. - Gerektiğinde alfabe varyasyonları:
zh-Hans,zh-Hant
Ve bir özel değer: x-default, hedeflemediğiniz dillerdeki kullanıcılara gösterilecek sayfa içindir. Ana dilinize veya bir dil seçim sayfasına yönlendirin.
İşte her üç sayfada da bulunması gereken doğru bir hreflang kümesi:
<link rel="alternate" hreflang="en" href="https://example.com/en/services/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/leistungen/" />
<link rel="alternate" hreflang="tr" href="https://example.com/tr/hizmetler/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/services/" />
Canonical tuzağı
Bu hata çok dilli siteleri sessizce mahveder ve açıkça vurgulamakta fayda var:
Her dil versiyonu kendi URL'sini canonical olarak göstermelidir.
<!-- /de/leistungen/ üzerinde — doğru -->
<link rel="canonical" href="https://example.com/de/leistungen/" />
<!-- /de/leistungen/ üzerinde — Almanca siteyi tamamen siler -->
<link rel="canonical" href="https://example.com/en/services/" />
İkinci versiyon Google'a Almanca sayfanın İngilizce sayfanın bir kopyası olduğunu ve ayrıca indekslenmemesi gerektiğini söyler. Bunun tam tersini söyleyen hreflang etiketleriyle birleştiğinde Google'a çelişkili talimatlar vermiş olursunuz — ve her zaman canonical kazanır.
Bu hatanın arkasındaki mantık anlaşılabilir: Sayfalar birbirinin çevirisidir, bu yüzden kopya gibi hissettirir. Değildirler. Çeviriler, farklı kullanıcı kitlelerine hizmet eden bağımsız sayfalardır.
Yarım kalan çevirilerin yönetimi
Gerçek projelerde her şey aynı anda çevrilmez. Üç dille başlarsınız, sonraki iki çeyrekte beş dil daha eklersiniz ve blog yazıları geriden gelir.
Bu geçiş sürecini yönetmenin doğru bir yolu vardır:
Henüz çevrilmemiş sayfaları İngilizce metinle /de/ URL'si altında doldurup indekse açmayın. Girmeye çalıştığınız bir pazarda kalitesiz ve kopya içerik üretmiş olursunuz ve aynı arama sorgusu için kendi İngilizce sayfanızla rekabet edersiniz.
Doğru yaklaşım: Sayfa başına çeviri tamamlanma oranını takip edin ve:
- Hiçbir link kırılmasın diye sayfayı İngilizce yedekle (fallback) sunun
- Kalite eşiğinizin altındayken sayfaya
<meta name="robots" content="noindex, follow">ekleyin - O dilin site haritasından (sitemap) çıkarın
- Diğer dillerdeki hreflang kümelerinden o dili geçici olarak çıkarın
- Çeviri tamamlandığı anda bu dört kısıtlamayı otomatik olarak kaldırın
Bu siteyi tam olarak bu mantıkla çalıştırıyoruz: %85 çeviri oranının altındaki her sayfa oluşturulur, linklenir ve erişilebilir durumdadır; ancak eşiği geçene kadar açıkça noindex işaretlenir ve site haritasına dahil edilmez.
Böylece yarım kalmış bir dil arama motorlarında asla zarar vermez ve çeviri bittiğinde manuel hiçbir SEO işlemine gerek kalmaz.
Dil bazlı site haritaları (Sitemaps)
Birkaç yüz URL'i geçtiğinizde tek bir site haritası hantallaşır. Dillerine göre bölün ve bir site haritası dizini (sitemap index) kullanın:
<!-- /sitemap.xml -->
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>https://example.com/sitemaps/sitemap-en.xml</loc></sitemap>
<sitemap><loc>https://example.com/sitemaps/sitemap-de.xml</loc></sitemap>
</sitemapindex>
hreflang etiketlerini HTML <head> yerine site haritası içinde xhtml:link olarak da tanımlayabilirsiniz. İkisi de geçerlidir; ancak ikisini birden aynı anda yapmayın, aksi takdirde zamanla birbiriyle çelişirler.
Bölmenin pratik faydası teşhistir: Search Console indekslemeyi site haritası bazında raporlar; böylece Almancanın %90 indekslendiğini, Fransızcanın %40'ta kaldığını bir bakışta görebilir ve doğru sorunu araştırabilirsiniz.
Ziyaretçileri doğru dile yönlendirme
İki yaklaşım vardır ve biri ciddi sorunlar yaratır:
Accept-Language başlığına göre ana dizinde (/) yönlendirme yapın. Sitenin ana adresine gelen bir kullanıcı, tarayıcısı Almanca bildiriyorsa 302 ile /de/ adresine yönlendirilir. Arama motoru botları Accept-Language başlığı göndermez, bu yüzden varsayılan dilinize düşerler. Bu Google onaylıdır ve çok iyi çalışır.
İki şart: 301 değil, mutlaka 302 yönlendirmesi kullanın — çünkü yönlendirme isteğe bağlıdır, kalıcı değildir. Ve kullanıcıya her zaman manuel olarak dil değiştirme imkanı sunun; çünkü birçok insan tarayıcı dilinden farklı bir dilde okumayı tercih eder.
Asla sadece IP konumuna (geolocation) göre zorunlu yönlendirme yapmayın. Japonya'da seyahat eden bir Alman kullanıcı sitenizi Japonca görmek istemez. ABD'deki bir arama motoru botu yalnızca İngilizce siteyi görür; bu da diğer dillerinizin Google tarafından asla keşfedilmemesine yol açar. IP bazlı yönlendirme, "Google diğer dillerimizi indekslemiyor" şikayetinin bir numaralı sebebidir.
Mevcut sitenizi denetleme
Çok dilli bir siteyi devraldıysanız ve sorun olduğundan şüpheleniyorsanız sırasıyla şu 6 noktayı kontrol edin:
- Her dilin kendine ait ayrı bir URL'i var mı? Yoksa durun — tüm sorun budur.
curl -s https://example.com/de/ | grep "Almanca bir cümle"dolu dönüyor mu? Boşsa içeriğiniz yalnızca istemci taraflıdır (SPA/JS).- Canonical etiketleri kendilerini mi gösteriyor? Her dilden 3 sayfayı kontrol edin.
- hreflang karşılıklı mı? Search Console Uluslararası Hedefleme raporunda "dönüş etiketi yok" hatalarına bakın.
- Açık olması gereken bir sayfa kazara
noindexkalmış mı? Test ortamından yayına sızan etiketler çok yaygındır. - Tüm diller Search Console'a eklendi mi? Dil bazlı site haritalarının indeks sayılarını karşılaştırın.
Ücretsiz SEO Denetim Aracımız herhangi bir sayfadaki hreflang, canonical ve indeksleme etiketlerini raporlar; bu da 3'ten 5'e kadar olan adımları kapsar.
Özet
Uluslararası SEO büyük ölçüde bir mimari işidir; mimari kararları ise lansmandan önce çok ucuz, lansmandan sonra çok pahalıdır. Her dile gerçek bir URL verin, slug'ları yerelleştirin, hreflang etiketlerini karşılıklı ve kendine referanslı tutun, her dilin kendi canonical etiketi olsun ve henüz çevrilmemiş sayfaları yabancı bir URL'de İngilizce yayınlamak yerine noindex yapın.
Bu beş kuralı doğru uyguladığınızda, başarınızı belirleyen şey çeviri kalitesi haline gelir — ki asıl olması gereken yer de burasıdır.
Aracı aç hreflang Kontrolü hreflang'i hakkıyla doğrulayın — her alternatif URL'yi çeker ve size geri işaret ettiğini doğrularız.