
Kurumsal Web Sitesi
EuroTech'in kamuya açık yüzü: dört dilli tanıtım ve başvuru sitesi. Dil, URL'in ilk parçasından okunuyor ve tek rota ağacı dört dilde çıktı veriyor. Portalla aynı kurumun işi ama ayrı bir uygulama. Arşiv — aktif geliştirme 2025 sonunda kapandı.
Kurumun kamuya açık yüzünün tek bir işi vardı: dört farklı dilden gelen adayı, bilgilerini bırakacağı noktaya kadar götürmek. Buradaki zorluk çeviri değil rota tasarımı. Çok dilli bir sitede dil sonradan eklendiğinde adresler bozuluyor ve o noktaya kadar biriken arama görünürlüğü kayboluyor. İkinci mesele kaynak takibi: reklamdan gelen ziyaretçinin nereden geldiği, form gönderildiğinde kaybolmamalıydı — yoksa hangi kanalın işe yaradığı hiç bilinmiyor. Üçüncüsü, ölçüm ve çerez: ölçüm kodunun onay gelmeden yüklenmemesi gerekiyordu.
Üç ziyaretçi. Aday: dört dilden birinde geliyor, program ve içerik sayfalarını geziyor, sonunda başvuru formunu dolduruyor. Veli veya kurum: aynı içeriği güven arayışıyla okuyor. Kurumun kendi ekibi: gelen başvuruyu ve kampanya kaynağını görüyor — o kısım portalın tarafında yürüyor.
Geliştirici olarak sitenin tamamı: rota ve dil yapısı, sayfalar, başvuru ve kampanya akışı, çerez ve ölçüm katmanı.
Laravel 10 üzerinde sunucu tarafında şablon üreten bir site. Dil, rota grubunun ilk parçası olarak tanımlı ve bir ara katman tarafından okunuyor: ara katman gelen değeri desteklenen dört dille karşılaştırıyor, geçersizse varsayılana düşüyor ve dili sonraki tüm bağlantı üretimlerine varsayılan parametre olarak yerleştiriyor. Bu sayede tek bir rota ağacı dört dilde çıktı veriyor ve şablonların içinde dil taşımak gerekmiyor. Veri tarafı dar: iki model — kullanıcı ve kampanya. Başvuru formu kaydı veritabanına yazıyor ve e-posta bildirimi gönderiyor; bot koruması için doğrulama ayrı bir rotada duruyor. Çerez onayı kendi controller'ında; ölçüm kodunun yüklenip yüklenmeyeceği bu onaya bağlı. Eski dil yolları kalıcı yönlendirmelerle korunuyor.
Dil rota grubunun ilk parçası ve ara katman tarafından doğrulanıyor; geçerli değilse varsayılana düşüyor. Dil aynı zamanda bağlantı üretimine varsayılan parametre olarak yerleştirildiği için şablonların içinde dil taşımak gerekmiyor — bir bağlantı yazıldığında doğru dilde çıkıyor. Bu, dört dilin tek rota ağacında yaşamasını mümkün kılıyor.
ÖdünleşimYol parçaları dört dilde ortak; yalnız dil ön eki değişiyor, segmentlerin kendisi çevrilmiyor. Bu, arama görünürlüğü açısından yerelleştirilmiş yollara göre zayıf bir tercih. VAP Turizm'de aynı problemi tersten çözdüm: orada yolların kendisi dile göre değişiyor, karşılığında her yeni sayfa üç ayrı tanım gerektiriyor.
Reklamdan gelen ziyaretçinin kaynağı, form gönderildiğinde kaybolmamalıydı. Kaynağı sayfa içeriğine karıştırmak yerine ayrı bir modelde tutmak, içerik değişse bile kaynak kaydının bozulmamasını sağlıyor.
ÖdünleşimKaynak yalnız ilk temasta yakalanıyor; ziyaretçi başka bir kanaldan geri döndüğünde ilk kayıt kalıyor ve son temas bilgisi tutulmuyor. Yani kayıt "nereden duydu" sorusuna cevap veriyor, "hangi kanal dönüştürdü" sorusuna değil.
Onay durumu ayrı bir controller'da yönetiliyor ve ölçüm kodunun sayfaya girip girmeyeceği bu duruma bağlı. Onay gelmeden ölçüm yüklenmiyor; bu, ölçümün doğruluğu pahasına verilmiş bir uyum kararı.
ÖdünleşimOnay vermeyen ziyaretçiler ölçümde hiç görünmüyor, yani raporlanan trafik gerçek trafiğin altında kalıyor. Bu fark kabul edildi.
Dil yapısı zaman içinde değişti ve eski adreslere hâlâ bağlantılar geliyordu. Eski yollar silinmek yerine kalıcı yönlendirmeye alındı; böylece dış bağlantılar ve arama sonuçlarındaki kayıtlar kırılmadı.
ÖdünleşimYönlendirme tablosu zamanla büyüyor ve hiçbiri silinmiyor; her yönlendirme küçük bir bakım yükü ve her istekte değerlendirilen bir kural. Hangi yönlendirmenin hâlâ trafik aldığını gösteren bir ölçüm yok.
Site portalla aynı çatıda yazıldı ve bu bilinçliydi: aynı kurumun iki uygulaması aynı dil, aynı dağıtım ve aynı işletme biçimini paylaşınca bakım tek bir zihinsel modelle yürüyor. Sunucu tarafında şablon üretmek, tanıtım içeriği ve bir formdan ibaret bir site için yeterliydi — ayrı bir ön yüz uygulaması ve API sözleşmesi taşımanın karşılığı yoktu. Buna karşılık site ile portal ayrı uygulamalar olarak tutuldu: kamuya açık bir yüzeyle kapalı bir portalın aynı dağıtımı paylaşması, saldırı yüzeyini gereksiz genişletirdi.
Kamuya açık tek yazma yolu başvuru formu ve bu form ayrı bir rotada duran doğrulama ucuyla korunuyor. Form dışında ziyaretçinin veritabanına yazabildiği bir uç yok. Çerez onayı ayrı bir controller'da yönetiliyor ve üçüncü taraf ölçüm kodu onay gelmeden sayfaya girmiyor. Site ile portal ayrı uygulamalar olduğu için kamuya açık yüzeyin ele geçirilmesi portal verisine erişim anlamına gelmiyor — bu ayrım bu tasarımın en değerli tarafı.
Bu site için saklanmış, tarih damgalı bir ölçüm çıktısı bulunmadığı için buraya bir skor yazılmadı. Yapısal olarak sayfalar sunucuda üretilip tam sayfa olarak gönderiliyor; istemci tarafında uygulama katmanı taşınmıyor. Ölçüm kodu onaydan sonra yüklendiği için onay vermeyen ziyaretçilerde üçüncü taraf script yükü de oluşmuyor.
Buradan taşıdığım en net ders yol yerelleştirmesi. Bu sitede yalnız dil ön eki değişiyor, segmentlerin kendisi dört dilde aynı; VAP Turizm'de aynı problemi tersten çözdüm ve yolların kendisini dile göre ayırdım. İkinci ders yönlendirme: yayındaki bir adresi sessizce kaybetmemek, sonradan telafisi olmayan tek şey. Bugün farklı yapacağım nokta ise ölçüm tarafı: yönlendirme tablosu büyüdü ama hangi kuralın hâlâ trafik aldığını gösteren bir şey yok, yani hiçbir yönlendirme güvenle silinemiyor. Ops Panel'de aynı boşluğu envanter tarafında kapattım — bir kaydın ne zamandan beri o hâlde olduğunu görmeden hangisinin temizleneceğine karar veremiyorsun.
Ne yapmak istediğinizi anlatın; ne kadar süreceğini ve nereden başlanacağını baştan söylerim.