Sorun dil düğmesinden daha büyük
Bir sayfanın sağ üstüne TR ve EN düğmeleri eklemek iki dilde okunabilir bir arayüz sağlar. Fakat bağlantıyı başka birine gönderdiğinizde hangi dilin açılacağı, tarayıcı JavaScript çalıştırmadan ne okuyacağı ve İngilizce proje sayfasından hangi iletişim sayfasına gidileceği ayrı kararlardır. Kişisel portföyde bu ayrıntılar küçüktür; bir araya geldiklerinde sitenin adres modelini oluştururlar.
kaahn.com derlemesinde ana sayfa, profil, iletişim ve projeler dil başına ayrı yollarla tanımlanır. Türkçe profil /hakkimda/ adresinde, İngilizce karşılığı /en/about/ adresindedir. Sayfa üreticisi bu eşleşmeleri merkezi bir tablodan okur. Böylece bir İngilizce sayfanın dil düğmesi, her durumda ana sayfaya dönmek yerine aynı içeriğin Türkçe karşılığına gidebilir.
İçeriği yayın anında hazırla
Bu sitenin kaynak tasarımı tek sayfalı bir önizleme olarak da çalışabilir. Üretim derlemesi ise ortak başlık ve altbilgiyi alır, seçilen sayfanın gövdesini çıkarır, çevirileri uygular ve her adrese bir HTML dosyası yazar. Başlık ve açıklama gibi metadata da aynı dilin içerik kaydından gelir. Tarayıcı daha sonra etkileşimi geliştirebilir; temel metnin görünmesi için dil değiştiren kodun çalışması gerekmez.
Google’ın JavaScript belgesi tarama, işleme ve indekslemeyi ayrı aşamalar olarak anlatır. Buradaki mühendislik tercihi, az değişen metni önceden hazırlayarak yayınlanan dosyanın doğrudan incelenebilmesidir. Bu tercih tek başına sıralama artışı ölçümü veya bütün istemci uygulamalarına karşı bir performans iddiası değildir.
Bir adres tablosundan birden fazla çıktı
Basitleştirilmiş örnekte iki URL, bir içerik kimliğine aittir. Aynı kayıt navigasyonu, dil düğmesini ve site haritasını besleyebilir. Yeni sayfa ekleyen kişi her yerde bağımsız bağlantı yazarsa bir yerde eski yolun kalması kolaylaşır. Merkezi eşleşme bu hatanın oluşabileceği yerleri azaltır; eksik çeviriyi ise yayın öncesi hata olarak ele almak gerekir.
pages = {
"about": {"tr": "/hakkimda/", "en": "/en/about/"},
"projects": {"tr": "/projeler/", "en": "/en/projects/"},
}
for page, languages in pages.items():
assert set(languages) == {"tr", "en"}
for language, path in languages.items():
assert path.startswith("/") and path.endswith("/")Canonical ve dil eşleşmesini karıştırma
Her çevrilmiş sayfanın kendi adresini tercih edilen URL olarak belirtmesi ile iki çevirinin birbirini alternatif olarak göstermesi farklı işlerdir. Bu sitede aynı sayfa kaydı hem kendi canonical adresini hem Türkçe, İngilizce ve varsayılan dil bağlantılarını üretir. İngilizce metni Türkçe sayfanın kopyası kabul ederek tüm canonical değerlerini Türkçeye yönlendirmek, iki dil için ayrı URL tasarımıyla çelişir.
Google’ın dil sürümleri rehberi karşılıklı eşleşmeleri ister. Bu yüzden yalnız Türkçe sayfaya İngilizce alternatif eklemek yeterli bir kontrol değildir. Üretilen iki dosyayı birlikte açmak ve karşılıklı yolları karşılaştırmak gerekir. Sayfa gövdesinin gerçekten ilgili dilde olması da metadata doğrulamasının yerine geçemeyeceği ayrı bir içerik kontrolüdür.
Yayın öncesi kabul tablosu
Aşağıdaki tablo bir arama sıralaması tahmini değil, tekrar edilebilir yayın kontrolüdür. Başarılı derleme ile Google’ın sayfayı seçmesi aynı olay değildir. Canlı sunucunun dosyayı doğru durum koduyla sunması ve içeriğin gerçekten erişilebilir olması da ayrıca kontrol edilmelidir.
| Kontrol | Beklenen sonuç | Yakaladığı hata |
|---|---|---|
| JavaScript kapalı sayfa | Başlık, gövde ve bağlantılar okunur | İçeriğin yalnız tarayıcı durumunda kalması |
| Dil çifti | İki sayfa birbirini gösterir | Eksik veya yanlış alternatif |
| İç bağlantı | Doğru dildeki son URL’ye gider | Dil kaybı ve gereksiz yönlendirme |
| Site haritası | Yayınlanmış sayfa adreslerini içerir | Taslak veya eski yol sızıntısı |
Ne zaman bu düzen yetersiz kalır?
Birçok editör aynı anda içerik giriyorsa, kullanıcıya göre farklı sayfalar gerekiyorsa veya değişikliklerin saniyeler içinde görünmesi şartsa içerik yönetimi ve çalışma zamanı için yeni kararlar gerekir. Küçük bir portföyde ise bir kaynak kaydı, iki dil ve denetlenebilir statik çıktı anlaşılır bir başlangıçtır. Yeni bir framework eklemeden önce çözülmesi gereken şey, sayfanın kimliği ile dilinin nerede tutulduğudur.