Mekanik taahhüt işi yapan, aynı zamanda yetkili ürün satışı olan bir firma. İki ayrı konumlanma: bir yanda proje taahhüdü (ısı merkezi, havalandırma, otomasyon), diğer yanda Siemens ürün grupları.
İki konumlanma × dokuz hizmet × altı ürün grubu × üç dil. Sayfa sayısı doksanı buluyordu.
İki yol vardı
Birincisi: bir CMS kur, içerikleri panele gir. Mantıklı gelir. Ama bu sitenin içeriği ayda bir değil, yılda bir değişiyor. CMS demek bakım, güncelleme, eklenti ve güvenlik yüzeyi demek; karşılığında kimsenin kullanmayacağı bir panel alıyorsun.
İkincisi: içerikleri veri olarak yaz, sayfaları üret. Bunu seçtim.
src/content/services.mjs ← hizmet metinleri, üç dilde
src/content/siemens.mjs ← ürün grupları
src/content/site.mjs ← firma bilgisi, iletişim, künye
src/i18n.mjs ← arayüz metinleri
src/routes.mjs ← hangi dil hangi yolda
src/layout.mjs ← tek başlık, tek altbilgi
build.mjs
↓
dist/ 90 sayfa + sitemap + robots + llms.txt
“Tek kaynak” ne demek
Telefon numarası bir yerde yazılı. Doksan sayfanın altbilgisinde, iletişim sayfasında, yapısal veride ve mesajlaşma bağlantısında aynı değişkenden geliyor.
Numara değişirse tek satır değişiyor ve doksan sayfa doğru oluyor.
Elle yazılmış bir sitede bu böyle olmuyor: numara altbilgide güncelleniyor, iletişim sayfasında unutuluyor, şemada eski kalıyor. Altı ay sonra arama motoru firmaya ait olmayan bir numara gösteriyor ve kimse sebebini bilmiyor.
Adres, telefon ve ünvan. Bunlar arama motorlarında varlık sinyali olarak kullanılıyor; farklı yerlerde farklı yazılırsa firma bir değil iki işletme gibi görünüyor ve ikisi de zayıflıyor.
Tek kaynak meselesi bir düzen takıntısı değil, doğrudan görünürlük meselesi.
Üç dilin en çok bozulan parçası
Çok dilli sitelerde en sık gördüğüm hata hreflang. Genelde şöyle yazılıyor: Türkçe sayfa İngilizcesini gösteriyor, İngilizce sayfa Türkçesini, Almanca kimseyi.
Doğrusu: her sayfa, kendisi dahil tüm kardeşlerini göstermeli. Üç dil varsa her sayfada dört satır olur.
<link rel="alternate" hreflang="tr" href="…/hizmetler/isitma-sistemleri/">
<link rel="alternate" hreflang="en" href="…/en/services/heating-systems/">
<link rel="alternate" hreflang="de" href="…/de/leistungen/heizungsanlagen/">
<link rel="alternate" hreflang="x-default" href="…/hizmetler/isitma-sistemleri/">
Dikkat: yollar çevrilmiş. Almanca sayfa /de/leistungen/heizungsanlagen/ adresinde. Bu hem kullanıcı için okunabilirlik hem arama motoru için dil sinyali.
Doksan sayfada bunu elle yazmak imkânsız. Üretici için önemsiz — yönlendirme tablosundan türetiyor.
Üretilen klasör sürüm kontrolüne girer
Bir tercih daha: üretilen dist/ klasörü git’te duruyor.
Çoğu proje üretilmiş dosyaları versiyonlamaz, haklı olarak. Ama burada sunucuya giden şey tam olarak o klasör. Git’te tutmanın üç faydası var: yayına ne gittiğini tam olarak görüyorsun; sunucuda Node çalışmıyor, rsync bir klasör kopyalıyor; ve bir şey bozulursa bir önceki commit’i basmak yeterli.
Bir de içerik tarafı
Teknik altyapı doksan sayfayı üretir ama dolduramaz. Asıl iş orada.
Bir hizmet sayfasının işe yaraması için “kaliteli hizmet sunuyoruz” demesi yetmiyor. Hangi ekipman, hangi kapasite aralığı, hangi standart, hangi sektör — hem müşterinin aradığı hem arama motorunun anladığı şeyler bunlar. Ve üç dilde de aynı somutlukta olması gerekiyor; İngilizcesi Türkçesinin kısaltılmışı olamaz.
Ne öğrendim
“Üretilmiş site” fikri ilk anda fazla teknik geliyor. Oysa asıl basitleşen şey bakım.
Bir yıl sonra bu siteye hizmet eklemek isteyen kişi bir panele girip on beş alan doldurmayacak. Bir dosyaya bir nesne ekleyip üreticiyi çalıştıracak. Sayfa, menüdeki yeri, üç dildeki karşılığı, sitemap kaydı ve şeması kendiliğinden oluşacak.
Doksan sayfalık bir siteyi yönetilebilir kılan şey panel değil, tekrarın kaldırılması.