İçeriğe atla
Kulular Teknoloji, Kulular Bilişim Teknolojileri Limited Şirketi

← Yazılar

Kurumsal web sitesi nasıl kurulur: kendi sitemizden notlar

18 Eylül 2026Güncelleme 1 Ekim 20263 dakikaSürüm 1.1

Kısa tanım

Statik üretim, bir web sitesinin sayfalarının ziyaretçi geldiğinde değil, derleme sırasında bir kez üretilmesidir. Sunucu her istekte sayfayı yeniden hesaplamaz, hazır HTML'i verir. Bu yaklaşım hızı artırır, sunucu yükünü azaltır ve sayfanın önbellekte tutulmasını mümkün kılar. Bedeli, içerik değiştiğinde sayfanın yeniden üretilmesi ve önbelleğin temizlenmesi gerekmesidir.

Yazar

Tarık İsmet ALKAN →

Kurum

Kulular Bilişim Teknolojileri Limited Şirketi

Bir yazılım şirketinin sitesi, şirketin yazdığı ilk yazılımdır. Ziyaretçi onu açtığında kodu görmez ama sonucunu görür. Sayfa geç açılıyorsa, bir dilde Türkçe cümle kalmışsa, iletişim formu sessizce çalışmıyorsa, bunu şirketin işine yorar.

Bu yüzden siteyi bir broşür gibi değil, küçük bir ürün gibi kurduk. Aşağıda hangi kararı neden verdiğimizi ve nerede yanıldığımızı yazıyorum.

Statik üretim

Site Next.js ile yazıldı. İlk sürümde sayfalar her istekte sunucuda yeniden üretiliyordu. Bunun sebebi masum bir satırdı: kök düzen, dili bulmak için istek başlığını okuyordu. Next bunu gören her sayfayı dinamik sayıyor.

Sonuç, Cloudflare'in hiçbir sayfayı önbelleğe alamamasıydı. Her ziyaret Hetzner'deki sunucuya kadar gidiyordu. Yerelde ölçünce ilk bayt süresi birkaç milisaniyeydi, yani kod yavaş değildi. Sorun ölçekte çıkacaktı.

Çözüm, dili istekten değil adresten çıkarmak oldu. Her dilin kendi kök düzeni var ve dil, sayfanın hangi klasörde durduğundan belli. Bugün yaklaşık üç yüz sayfanın tamamı derleme sırasında bir kez üretiliyor.

Yedi dil ve tutarlılık

Site Türkçe, İngilizce, Fransızca, Portekizce, Almanca, İspanyolca ve Arapça yayında. Çevirinin kendisi işin kolay kısmı. Zor olan, bir metin değiştiğinde yedi yerde birden değişmesi.

İlk denetimlerde bulduğumuz hataların çoğu aynı kalıptan çıkıyordu. Dile göre metin seçen uzun bir koşul zinciri, bir dili unuttuğunda sessizce son dala düşüyordu ve son dal genellikle Türkçeydi. Fransızca sayfanın ortasında Türkçe bir cümle böyle çıkıyordu.

Bunu bir yardımcı fonksiyonla kapattık. Metin seçen her yer yedi dilin yedisini birden vermek zorunda. Bir dil eksikse kod derlenmiyor. Hata, yayına çıkmadan önce yakalanıyor.

Akademik unvan da benzer bir sorundu. Bir çeviride "Doç. Dr." unvanı profesöre dönüşmüştü. Unvan artık hiçbir dilde çevrilmiyor, Türkçe kayıttan alınıyor ve bir test bunu her push'ta denetliyor.

Testler

Ağır bir test çatısı kurmadık. Node'un kendi test modülüyle dokuz test yazdık. Her biri daha önce gerçekten yaşadığımız bir hatayı yakalıyor.

Unvanın her dilde aynı kalması, hiçbir metinde uzun tire bulunmaması, marka adının çevrilmemesi, her Türkçe yazının altı dilde karşılığının olması ve hukuki metinlerin çeviride özetlenmemesi bunların arasında. Son test kaba ama işe yarıyor: bir dildeki hukuki sayfa Türkçesinin yüzde altmışından kısaysa, büyük ihtimalle özetlenmiştir.

GitHub'a her push'ta tip denetimi, lint, bu testler ve üretim derlemesi çalışıyor. Biri kırılırsa sürüm yayına çıkmıyor.

Güvenlik

İçerik güvenliği politikası sıkı. Dış bir alan adından betik, yazı tipi ya da görsel yüklenemiyor. Yazı tipleri kendi sunucumuzdan geliyor, bu yüzden ziyaretçinin tarayıcısı sayfayı açarken üçüncü bir tarafa istek göndermiyor. Google Analytics yalnızca ziyaretçi onay verirse yükleniyor.

Ana sayfadaki çalışma protokolü ekranı, ziyaretçinin yazdığı metni bir dil modeline gönderiyor. Bu, sitenin en kolay kötüye kullanılabilecek yeri. Ücretli bir modeli bedava kullanmak isteyen biri ucu doğrudan çağırabilir. Bunu birkaç katmanla engelliyoruz: isteğin bizim sayfamızdan geldiğinin denetimi, kısa ömürlü ve tek kullanımlık imzalı bilet, adres başına saatlik ve günlük sınır, sitenin tamamı için günlük bir tavan ve aynı anda modele gidebilecek istek sayısına bir sınır.

Dağıtım

Kod GitHub'da duruyor. Hetzner'deki sunucuda Coolify çalışıyor ve ana dala her push'ta siteyi Docker imajı olarak yeniden derleyip yayına alıyor. Bir dağıtım yaklaşık iki buçuk dakika sürüyor.

Önünde Cloudflare var. Statik üretime geçince HTML de önbelleğe alınabilir oldu ve sayfalar bir saate kadar orada tutuluyor.

Nerede yanıldık

Önbellek, hızın kaynağı olduğu kadar bir yanılgının da kaynağı oldu. Yeni bir sürümü yayına aldık, Coolify başarılı dedi ama ana sayfa eski hâliyle geliyordu. Sebep basitti. Cloudflare elindeki kopyanın süresi dolmadan yenisini istemiyordu.

Doğru çözüm, her dağıtımın sonunda önbelleği otomatik temizlemek. Yayın süreci yalnızca sunucuda değil, ziyaretçinin gördüğü yerde bittiğinde bitmiş sayılır.

Bir de erişilebilirlik var. Otomatik tarama sayfalarda hata bulmuyordu, ama ana sayfadaki küçük etiketler yarı saydam bir fotoğrafın üstünde duruyordu ve tarama aracı fotoğrafın üstündeki kontrastı ölçemiyor. Etiketlerin arkasındaki pikselleri ayrıca ölçtük, oran 3:1 civarındaydı. Fotoğrafı biraz soldurup etiketleri bir ton koyulaştırınca 5:1'in üstüne çıktı. Araç "hata yok" dediğinde bile bakmak gerekiyor.

Neden anlatıyoruz

Bir müşteriye "çalışan yazılım teslim ediyoruz" demek kolay. Bu sitede ne yaptığımızı açıkça yazınca, o cümlenin neye dayandığını görmek de kolaylaşıyor.

Sık sorulanlar

01Kurumsal bir site için yedi dil gerekli miydi?
Ortak aradığımız Avrupa projelerinde ve yurt dışındaki muhataplarımızda Türkçe okuyan az. Yedi dilin asıl maliyeti çeviri değil, tutarlılık. Bunu insan dikkatine değil teste bıraktık.
02Neden hazır bir site oluşturucu kullanmadınız?
Ana sayfadaki çalışma protokolü ekranı bir dil modeline istek gönderiyor ve bu istek kötüye kullanıma karşı korunmalı. Hazır araçlarla bu korumayı ve sıkı içerik güvenliği politikasını birlikte kurmak zordu. Kendi kodumuzda her ikisi de görünür ve denetlenebilir.
03Yayından sonra eski sayfanın görünmesi neden oluyor?
Sayfalar Cloudflare önbelleğinde en fazla bir saat tutuluyor. Yeni sürüm yayına girse bile önbellekteki kopya süresi dolana kadar gösterilebiliyor. Çözümü, her dağıtımdan sonra önbelleği otomatik temizlemek.

Kaynaklar

  1. 01Next.js belgeleri, statik ve dinamik işleme
  2. 02MDN, Content Security Policy
  3. 03W3C, Web İçeriği Erişilebilirlik Yönergeleri 2.1
  4. 04Cloudflare belgeleri, önbellek temizleme

Önerilen atıf

Öğr. Gör. Tarık İsmet Alkan. “Kurumsal web sitesi nasıl kurulur: kendi sitemizden notlar”. Kulular Teknoloji, sürüm 1.1, 1 Ekim 2026. https://kulular.com.tr/yazilar/bu-siteyi-nasil-kurduk

Kulular Teknoloji

Bu işi kurumlar için yapıyoruz

Kulular Teknoloji, Ankara merkezli bir yazılım şirketi. Kurumlara özel yazılım, yapay zekâ ve veri sistemleri geliştiriyoruz. Benzer bir ihtiyacınız varsa projenizi kısaca anlatın, ilk görüşmeyi birlikte planlayalım.

  • Yazılım mimarisi
  • Next.js
  • Çok dillilik
  • Dağıtım