Prestashop üzerine kurulu çok dilli bir mağazada hreflang etiketleri doğru göründüğü halde Google yanlış dil sürümünü göstermeye devam ediyorsa, sorun genellikle etikette değil URL yapısında saklıdır. Prestashop'un dil yönetimi mantığı, hreflang'ın varsaydığı "her dile ayrı ve kalıcı bir URL" kuralıyla varsayılan kurulumda tam örtüşmez.
Bu çakışma özellikle Fransız kökenli bu platformun az bilinen bir davranışından kaynaklanır: dil değişimi, çoğu zaman URL yerine oturum veya çerez üzerinden yönetilir. Sonuç, teknik olarak "çalışan" ama SEO açısından kırık bir çok dillilik olur. Mağaza sahibi sayfayı elle açıp kontrol ettiğinde her şey normal görünür, çünkü tarayıcı zaten doğru dili hatırlamıştır; Googlebot ise her URL'i sıfırdan, hafızasız bir ziyaretçi gibi tarar.
Aşağıda bu çakışmanın nereden çıktığı, hangi belirtilerle kendini gösterdiği, hangi kök nedenlere ayrıldığı ve hangi ayar değişiklikleriyle düzeltilebileceği sırayla ele alınıyor.
Prestashop varsayılan çok dilli URL yapısını nasıl kurar?
Prestashop, çok dilli bir mağazada dil seçimini üç farklı yöntemden biriyle yönetebilir: URL öneki (/tr/, /en/), id_lang parametresi veya alan adı/alt alan adı ayrımı. Hangi yöntemin aktif olduğu Tercihler > SEO ve URL'ler panelindeki "Etkin ülke veya dil sistemi" ve dostane URL ayarına bağlıdır. Bu üç yöntem birbirini dışlamaz; birçok kurulumda ikisi aynı anda çalışır durumda kalır, çünkü eski parametreli adresler devre dışı bırakılmadan yeni önekli yapıya geçilmiştir.
Dostane URL kapalıyken sistem doğrudan index.php?id_lang=2&id_product=14 gibi parametreli adresler üretir. Bu adresler teknik olarak her dil için ayrıdır, ama arama motoru için "kalıcı ve temiz" bir URL sayılmaz; parametre sıralaması değiştiğinde, oturum kimliği eklendiğinde veya filtre parametreleri araya girdiğinde aynı sayfa farklı bir adres gibi taranabilir. Bu durum yalnızca hreflang'ı değil, genel indeksleme verimliliğini de zayıflatır.
Dostane URL açıkken durum daha iyi görünür, ama varsayılan dilin URL öneki almaması yaygın bir seçimdir; bu asimetri çok dilli URL yapısı kararının tam ortasına düşer. Yani tr varsayılan dilse mağaza site.com/urun-adi şeklinde önek taşımadan, site.com/en/product-name şeklinde önekli çalışır. Bu asimetri kurulumu yapan kişi için doğal görünür, çünkü varsayılan dilin "kısa" kalması pratik bir tercihtir. Ama hreflang etiketlerinin kendine referans verme (self-referencing) kuralı bu asimetriyi doğrudan etkiler; her sayfa kendi dilini işaret eden bir etiket taşımak zorundadır ve bu etiketin adresi, sayfanın gerçekte hangi URL'den servis edildiğiyle birebir örtüşmelidir.
Çok mağazalı (multistore) kurulumlar bu tabloya bir katman daha ekler. Her mağaza bağımsız bir tema, bağımsız bir URL kök dizini ve bazen bağımsız bir alan adı ile çalışabilir. Bu durumda "çok dilli yapı" aslında birden fazla bağımsız site gibi davranır ve hreflang bağlantısının mağazalar arasında kurulması, dil önekleri arasında kurulmasından tamamen farklı bir mühendislik gerektirir.
Bu yapı hreflang'ın gerektirdiği URL mantığıyla nerede çakışır?
Hreflang'ın çalışması için üç şart aynı anda sağlanmalı: her dil sürümünün kendine ait sabit bir URL'i olmalı, o URL kendi hreflang etiketinde kendine referans vermeli, ve karşılıklı diğer diller birbirine dönüş (return tag) vermeli. Prestashop'un varsayılan davranışı bu üç şarttan en az birini kırma eğilimindedir, çoğu zaman ikisini birden.
Oturum tabanlı dil seçiminde (çerez veya id_lang parametresi) aynı URL, farklı ziyaretçiler için farklı dil içeriği döndürebilir. Googlebot bu URL'i tek bir tarama isteğiyle ziyaret eder ve gördüğü dili "o URL'in gerçek içeriği" sanır; diğer dil sürümlerini keşfetmesi için ayrı, tutarlı bir adrese ihtiyacı vardır. Bir URL birden fazla dile "aynı anda" hizmet edebiliyorsa, arama motorunun gözünde o URL zaten tek bir dile ait değildir ve hreflang etiketleri bu URL için anlamsızlaşır.
Varsayılan dilin önek almaması ise farklı bir çakışma türü yaratır. Hreflang etiketi hreflang="tr" href="https://site.com/urun-adi" yazıyorsa ve site aynı zamanda id_lang parametresiyle de aynı içeriğe ulaşılmasına izin veriyorsa, canonical ile hreflang hedefi arasında sessiz bir tutarsızlık oluşur. Google bu durumu genellikle "alternate sayfa canonical'a eşit değil" uyarısıyla işaretler ve o dil sürümünü hreflang ağının dışına iter.
Multistore kurulumlarında çakışma bir kademe daha büyür. Her mağaza (shop context) belirli bir dile bağlı çalışacak şekilde ayarlanmışsa, mağazalar arası hreflang bağlantısı Prestashop çekirdeği tarafından otomatik kurulmaz; bu bağlantı ya temada manuel eklenir ya da hiç var olmaz. Sonuç, aynı ürünün iki farklı mağaza altında iki bağımsız sayfa gibi var olması, ama birbirinden habersiz kalmasıdır.
Bir de daha az fark edilen bir çakışma noktası var: filtre ve sıralama parametreleri. Kategori sayfalarında fiyat filtresi veya sıralama seçeneği uygulandığında oluşan URL'ler, dil önekini korusa da hreflang üretim mantığı bu parametreli varyantları hesaba katmaz. Filtrelenmiş bir sayfa kendi dilinde doğru göründüğü halde, diğer dillerdeki karşılığına dönüş vermeyen "yarım" bir hreflang ağı bu şekilde oluşur.
Çakışmanın belirtileri: Google hangi dili gösteriyor, hangisini atlıyor?
İlk belirti genellikle Search Console'un Kapsam raporunda "Alternatif sayfa, uygun canonical etiketine sahip" satırının ürün ve kategori sayfalarında birikmesidir. Bu durum tek başına bir indeksleme hatası değildir, ama dil sürümlerinin birbirini geçersiz kıldığının açık işaretidir. Bu satırdaki URL sayısı zamanla artıyorsa, sorun tek bir sayfa hatası değil, yapısal bir çakışmadır.
İkinci belirti, site: operatörüyle dil bazlı hızlı sayım yapıldığında ortaya çıkar. site:site.com/en/ sonuç sayısı beklenenden çok düşükse veya Türkçe sonuçlar İngilizce sorgularda çıkıyorsa, hreflang'ın Google tarafından güvenilir bulunmadığı anlaşılır. Bu sayım, kaç ürün veya kategori sayfası olduğunu bilen bir mağaza sahibi için hızlı ve ücretsiz bir teşhis aracıdır.
Üçüncü ve en somut belirti, aynı ürünün farklı ülke sorgularında hep aynı dilde görünmesidir. Örneğin Almanya'dan yapılan bir aramada Türkçe URL'in görünmesi, hreflang'ın o pazar için hiç işlemediğini gösterir; bu genellikle karşılıklı return tag eksikliğinden kaynaklanır. Bir dilin hreflang etiketi diğerine işaret etse de, karşı taraf geri dönüş vermiyorsa Google çifti geçersiz sayar ve varsayılan olarak kendi algoritmik tercihine göre bir sürüm seçer.
Dördüncü belirti daha teknik bir seviyede yaşanır: Search Console'daki Uluslararası Hedefleme raporu (mevcutsa) veya URL İnceleme aracı, belirli bir sayfa için "Google'ın seçtiği canonical" ile "kullanıcı tanımlı canonical"ın farklı olduğunu gösterebilir. Bu fark, hreflang'ın canonical ile aynı hedefe işaret etmediği durumlarda ortaya çıkar ve genellikle URL yapısındaki tutarsızlığın doğrudan kanıtıdır.
Sayfa kaynağında hreflang bloğunu incelemek teşhisi netleştirir. Etiketler doğru sözdizimiyle yazılmış olsa bile, href değerlerinden biri parametreli bir adrese (?id_lang=) işaret ediyorsa veya sitemap'teki adresle sayfadaki etiket birbirinden farklıysa, çakışma orada tespit edilir. Bu karşılaştırmayı yaparken sitemap'in kendisinin de güncel olduğundan, eski bir URL yapısından kalan adresler barındırmadığından emin olunmalıdır.
Kök neden ayrımı: dil öneki, canonical ayarı, otomatik yönlendirme
Üç ayrı kök neden birbirine benzer belirtiler üretir, bu yüzden ayırt edilmeleri gerekir. Aynı hata mesajı, kaynağına bağlı olarak tamamen farklı bir düzeltme gerektirebilir.
- Dil öneki eksikliği: Varsayılan dil URL'de önek taşımıyor ama hreflang etiketi o dile ayrı bir href veriyor. Kontrol: varsayılan dilin sayfa kaynağındaki
hrefdeğeri, tarayıcıda görülen gerçek adresle birebir aynı mı? Aynı değilse, sayfanın kendi kendine referans vermesi bozulmuştur. - Canonical ayarı: SEO ayarlarında "Canonical URL yönlendirmesi" aktifse ve bu ayar dil segmentini URL'den düşürecek şekilde çalışıyorsa, canonical tüm dilleri tek bir adrese indirger; hreflang'ın işaret ettiği alternatifler canonical ile çakışır. Kontrol: canonical etiketindeki adres, hreflang self-reference adresiyle aynı mı?
- Otomatik yönlendirme: Tarayıcı
Accept-Languagebaşlığına göre ziyaretçiyi otomatik olarak bir dile yönlendiren bir modül veya tema kodu varsa, Googlebot'un İngilizce ayarlı bir tarayıcı gibi davranması, diğer dil URL'lerine hiç ulaşmamasına yol açabilir. Kontrol: farklı dil başlıklarıyla yapılan istekler her zaman aynı içerik URL'ine mi düşüyor, yoksa yönlendirme mi tetikleniyor?
Bu üç neden aynı mağazada eş zamanlı görülebilir, hatta sıklıkla birbirini besler. Örneğin otomatik yönlendirme açıkken canonical ayarı da dil segmentini düşürüyorsa, Google hem alternatif URL'lere erişmekte zorlanır hem de eriştiği sayfalarda tutarsız bir canonical sinyali görür. Doğru sıralama, önce otomatik yönlendirmeyi kapatmak (Googlebot'un her URL'e serbestçe erişebilmesi için), sonra canonical ayarını kontrol etmek, son olarak dil öneki tutarlılığını düzeltmektir. Bu sıra tersine çevrilirse, örneğin önce dil önekleri düzeltilip yönlendirme açık bırakılırsa, düzeltmenin etkisi Googlebot'a hiç ulaşmadan kaybolur.
Düzeltme: URL yapısını ve canonical/hreflang üretimini hizalamak
Düzeltmenin ilk adımı dostane URL'i etkinleştirmek ve tüm dillere, varsayılan dahil, tutarlı bir önek atamaktır. Yerelleştirme > Yerelleştirme altında her dilin URL önekini elle tanımlamak, varsayılan dilin de kendi öneğine sahip olmasını sağlar; bu tek adım self-referencing sorununun büyük kısmını çözer. Bu değişiklik yapıldıktan sonra eski önek taşımayan adreslerin yeni öneğe 301 ile yönlendirilmesi, mevcut sıralama ve backlink değerinin korunması için gereklidir.
İkinci adım, Tercihler > SEO ve URL'ler altındaki yönlendirme ayarlarında dil bazlı otomatik yönlendirmeyi kapatmaktır. Ziyaretçi tarayıcı dilinden bağımsız olarak istediği URL'e erişebilmeli; dil seçimi bir tercih olarak sunulmalı, zorunlu yönlendirme olmamalıdır. Kullanıcı deneyimi kaygısıyla bu yönlendirme genellikle iyi niyetle eklenir, ama arama motoru tarafında keşfedilebilirliği doğrudan sınırlar.
Üçüncü adım, tema veya modül düzeyinde hreflang bloğunun her sayfada, o sayfanın gerçek dil varyantı sayısına göre üretildiğini doğrulamaktır. Prestashop çekirdeği native hreflang üretimi sunmaz; bu genellikle temaya eklenen bir kod parçası veya üçüncü parti modülle sağlanır. Bu modülün URL'leri id_lang parametresiyle değil, dostane URL formatıyla ürettiğinden emin olunmalı; bazı eski modüller güncellenmemiş varsayılan ayarlarla parametreli adres üretmeye devam edebilir.
Dördüncü adım, canonical mantığının hreflang ile aynı URL kümesini hedeflediğini teyit etmektir. Bazı Prestashop kurulumlarında SEO modülleri, dil segmentini "gereksiz" sayıp canonical'dan düşürecek şekilde yapılandırılmış olabilir; bu durumda modülün canonical davranışı, dil önekini koruyacak şekilde yeniden ayarlanmalıdır.
Multistore kurulumlarında beşinci bir adım gerekir: mağazalar arası hreflang bağlantısını manuel kurmak. Her mağazanın robots.txt ve sitemap yapılandırması ayrı olduğundan, bu bağlantı genellikle şablon seviyesinde sabit bir eşleme tablosuyla (ürün/kategori ID'lerinin diğer mağazadaki karşılığı) elle tanımlanır. Bu eşleme tablosu, ürün kataloğu her güncellendiğinde senkron tutulmalıdır; aksi halde zamanla eşleşmeyen veya kırık bağlantılar birikir.
Doğrulama: düzeltme sonrası kontrol adımları
Değişiklikler yayınlandıktan sonra ilk kontrol, birkaç kritik sayfanın kaynağını açıp hreflang href değerlerinin dostane URL formatında ve gerçek adresle örtüştüğünü teyit etmektir. Parametreli bir adres kaldıysa düzeltme eksik kalmıştır. Bu kontrolü yalnızca ana sayfa ve bir ürün sayfasıyla sınırlamamak, en az bir kategori sayfası ve bir arama/filtre sonucu sayfasını da kapsaması önemlidir.
İkinci kontrol Search Console'daki Kapsam raporunun aynı hata kategorisini bir sonraki tarama döngüsünde tekrar üretip üretmediğini izlemektir. Bu genellikle birkaç gün sürer; hatanın hemen kaybolmaması normaldir, önemli olan azalma eğiliminin başlamasıdır. Eğer birkaç hafta sonra hata sayısı aynı seviyede kalıyorsa, düzeltmenin bir kısmı canlıya yansımamış veya cache tarafında eski sürüm servis ediliyor olabilir.
Üçüncü kontrol, farklı ülke IP'leri veya arama motoru bölge ayarları simüle edilerek hedef dilin doğru görünüp görünmediğini test etmektir. Bu adım, hreflang'ın "doğru yazılmış" olmasıyla "fiilen çalışıyor" olması arasındaki farkı ortaya koyar; birçok kurulumda etiket sözdizimi kusursuzdur ama fiili sonuç hâlâ yanlış dile düşer.
Dördüncü kontrol, URL İnceleme aracıyla her dil sürümü için ayrı ayrı "Google'ın seçtiği canonical" değerini sorgulamaktır. Bu değer kullanıcı tanımlı canonical ile örtüşüyorsa, düzeltme büyük ölçüde tutmuştur; örtüşmüyorsa, canonical ayarında hâlâ çözülmemiş bir tutarsızlık vardır.
Son olarak, önceki kök neden analizinde tespit edilen üç noktanın (dil öneki, canonical, otomatik yönlendirme) her biri için ayrı ayrı not tutmak, gelecekte tema güncellemesi veya modül değişikliğiyle aynı çakışmanın tekrar ortaya çıkmasını önler. Prestashop güncellemeleri bazen SEO ayarlarını varsayılana sıfırlayabildiğinden, bu kontrol listesi bir kerelik değil, her büyük güncelleme sonrası tekrarlanan bir rutin olmalıdır.
Prestashop'ta çakışma platforma özgü görünür; kök neden kategorileri (oturumla dil, öneksiz varsayılan, canonical'ın dil segmentini düşürmesi) başka e-ticaret kurulumlarında da aynı sırayla çıkar. Etiket sözdizimi temiz, SERP hâlâ yanlış dile düşüyorsa teşhis yine bu üç noktaya iner: dostane URL gerçek adresle örtüşüyor mu, canonical self mi, otomatik yönlendirme Googlebot'u tek dile kilitliyor mu. Prestashop güncellemesi SEO ayarlarını varsayılana çekebildiği için bu üçlü, her büyük sürüm sonrası yeniden not edilir.