Doktorunu Bil, Mevox Digital’in bir web sitesi değil; yüksek veri hacmi, organik arama trafiği, çok rollü kullanıcı yapısı ve sürekli büyüyen içerik ağı üzerinde çalışan uçtan uca bir dijital ürün geliştirme projesidir.
Türkiye genelindeki yaklaşık 148 bin doktor profilini, binlerce sağlık kurumunu ve 120’den fazla tıbbi branşı aynı veri ekosisteminde buluşturan platform; kullanıcıların doğru hekimi bulmasını, doktor profillerini karşılaştırmasını, değerlendirmeleri incelemesini ve doğrudan uzmanlara soru sormasını sağlıyor.
Doktor tarafında ise profil sahiplenme ve doğrulama, profil yönetimi, hasta sorularını yanıtlama, değerlendirmelerle etkileşim kurma ve uzmanlık alanında içerik yayınlama gibi süreçler bulunuyor.
Ancak bu projeyi Mevox Digital açısından özel yapan şey yalnızca fonksiyon sayısı değil. Doktorunu Bil’i mevcut WordPress yapısından Laravel 12 tabanlı, yüksek trafik ve büyük veri setleri için yeniden tasarlanmış özel bir uygulama mimarisine taşıdık.
Problem bir arayüz problemi değildi
Doktorunu Bil’in yeniden geliştirme sürecinde önümüzde klasik bir “site yenileme” işi yoktu.
Platform yüz binlerce doktor kaydı, binlerce hastane, branş ve lokasyon ilişkisi barındırıyor; aynı zamanda Google üzerinden ciddi miktarda organik trafik alıyordu. Kullanıcı hesapları, doktor hesapları, değerlendirmeler, sorular, cevaplar, favoriler, profil sahiplenme talepleri ve içerikler de bu veri katmanının üzerinde çalışıyordu.
Dolayısıyla yeni sistemin yalnızca daha modern görünmesi yeterli değildi. Daha büyük veri hacmini taşıması, arama ve filtrelemeyi hızlandırması, kullanıcı ve doktor işlemlerini güvenli biçimde ayırması ve bütün bunları yaparken yıllar içerisinde oluşmuş arama motoru görünürlüğünü koruması gerekiyordu.
Bu nedenle projeyi bir tema değişikliği olarak değil, ürünün teknik çekirdeğinin yeniden inşası olarak ele aldık.
WordPress’ten Laravel 12’ye mimari dönüşüm
Eski sistemde içerik yönetimi için kullanılan WordPress altyapısı, platformun ulaştığı veri ve fonksiyon ölçeğinde giderek daha fazla sınır oluşturmaya başlamıştı.
Doktorunu Bil’in yeni sürümünü Laravel 12 üzerinde yeniden geliştirerek platformu klasik CMS mantığından çıkarıp uygulama odaklı bir mimariye taşıdık.
Laravel tarafında veri modelleri, kullanıcı rolleri, arama, moderasyon, profil yönetimi ve içerik süreçleri birbirinden ayrıştırılmış servisler ve uygulama katmanları halinde kurgulandı. Redis önbellekleme ve queue altyapısı, MariaDB üzerinde optimize edilmiş ilişkisel veri modeli ve Nginx / PHP-FPM sunucu katmanı ile yüksek trafik altında daha kontrollü çalışabilecek bir sistem oluşturuldu.
Bu dönüşüm yapılırken mevcut alan adı ve organik arama değeri yeni sisteme feda edilmedi. Eski URL kalıpları analiz edildi, gerekli yönlendirme kuralları oluşturuldu ve sayfaların canonical, metadata ve indeksleme davranışları Laravel tarafında yeniden kurgulandı.
148 bine yakın profil, tek arama deneyimi
Doktorunu Bil’in temel fonksiyonu arama. Fakat yüz binlerce profilin bulunduğu bir sistemde klasik bir veritabanı arama kutusu yeterli değil.
Kullanıcı aynı arama alanına doktor adı, branş, hastane veya şehir yazabiliyor. Doktor listeleme ekranında ise sonuçlar şehir, branş, hastane, ünvan, değerlendirme durumu ve profil doğrulaması gibi farklı kriterlerle daraltılabiliyor.
Bu yapıyı Laravel Scout ve TNTSearch ile desteklenen özel bir arama katmanı üzerinde geliştirdik.
Türkçe’yi anlayan fuzzy search
Sağlık terimlerinin ve doktor isimlerinin her zaman doğru yazılmayacağını biliyoruz. Kullanıcının “kardiyoloji” kelimesini eksik veya hatalı yazması, aradığı sonuca ulaşamaması anlamına gelmemeli.
Bu nedenle arama altyapısında Türkçe karakter normalizasyonu ve benzerlik hesaplamaları kullanan fuzzy matching mekanizmaları oluşturduk. Doktor aramalarında Laravel Scout ve TNTSearch üzerinden indekslenmiş arama yapılırken branş, şehir ve hastane gibi daha sınırlı veri setlerinde önbellek destekli eşleştirme mekanizmaları devreye giriyor.
Böylece arama yalnızca birebir kelime eşleşmesine bağlı kalmıyor; kullanıcının ne bulmaya çalıştığını anlamaya çalışan bir keşif katmanına dönüşüyor.
Doktor profilleri statik birer sayfa değil
Platformdaki doktor sayfalarını klasik rehber kayıtları olarak tasarlamadık. Her doktor profili kendi içerisinde yaşayan bir içerik ve etkileşim merkezi olarak çalışıyor.
Profil içerisinde doktorun uzmanlık alanı, çalıştığı sağlık kurumu ve konum bilgileri gösterilirken aynı zamanda hasta değerlendirmeleri, puan dağılımları, doktora yöneltilen sorular ve verdiği cevaplar da tek yerde toplanıyor.
Kullanıcı doktoru favorilerine ekleyebiliyor, değerlendirme bırakabiliyor veya doğrudan ilgili hekime soru yöneltebiliyor.
Bu yapı sayesinde doktor profili yalnızca arama motorundan ziyaret edilen statik bir sayfa olmaktan çıkıyor; zaman içerisinde yeni değerlendirmeler, cevaplar ve uzman içerikleriyle büyüyen dinamik bir kaynağa dönüşüyor.
Doktorlar için ayrı bir ürün deneyimi
Doktorunu Bil yalnızca hastalara yönelik geliştirilmiş bir platform değil. Sistemin ikinci kullanıcı grubunu hekimler oluşturuyor.
Platformda mevcut olan bir doktor, profil sahiplenme akışı üzerinden kimliğini doğrulayarak profilinin yönetimini devralabiliyor. Onaylanan doktorlar kendi bilgilerini ve görsellerini güncelleyebiliyor, kendilerine yöneltilen sorulara cevap verebiliyor, değerlendirmelerle etkileşim kurabiliyor ve uzmanlık alanlarıyla ilgili makaleler yayınlayabiliyor.
Hasta ve doktor kullanıcılarının farklı ihtiyaçları bulunduğu için yetki ve panel deneyimlerini birbirinden ayrıştırdık. Ortak uygulama altyapısı üzerinde kullanıcı rolüne göre değişen navigasyon, araçlar ve işlem yetkileri oluşturuldu.
Hasta panelinde sorular, değerlendirmeler ve favoriler ön plana çıkarken doktor panelinde profil yönetimi, içerikler, gelen sorular ve etkileşim verileri öne çıkıyor.
Soru-cevap sistemi platformun içerik motoru
Doktorunu Bil’deki soru-cevap altyapısı bizim için yalnızca bir mesajlaşma özelliği değil.
Kullanıcı sağlıkla ilgili bir soru oluşturduğunda soru ilgili uzmanlık alanıyla ilişkilendiriliyor. Doktor tarafından verilen cevap ise moderasyon ve içerik kuralları çerçevesinde platformda yayınlanabiliyor.
Böylece tek bir kullanıcı için başlayan etkileşim, aynı problemi araştıran binlerce kişinin ulaşabileceği kalıcı bir bilgi sayfasına dönüşüyor.
Ayrıca kullanıcı yalnızca genel bir soru oluşturmak zorunda değil. Belirli bir doktor profilinden doğrudan o hekime soru yöneltebiliyor. Doktorun verdiği cevap kendi profiliyle ilişkilendiriliyor ve profilin uzmanlık içeriğini zaman içerisinde zenginleştiriyor.
Bu mekanizma kullanıcı deneyimi, doktor etkileşimi ve organik içerik üretimini aynı noktada birleştiriyor.
SEO’yu eklenti değil, ürün mimarisi olarak ele aldık
Doktorunu Bil gibi bir platformda SEO yalnızca title ve description alanlarından ibaret olamaz.
Doktorlar, hastaneler, branşlar, şehirler, makaleler, sorular ve sağlık etiketleri birbirleriyle ilişkili ayrı içerik varlıkları. Bu nedenle arama motoru mimarisini doğrudan veri modelinin bir parçası olarak ele aldık.
Doktor profilleri branş ve hastane sayfalarıyla; sorular ilgili uzmanlık ve etiketlerle; uzman makaleleri ise doktor ve konu sayfalarıyla ilişkilendiriliyor. Böylece platform içerisinde yüz binlerce sayfanın birbirinden kopuk çalışması yerine anlamlı bir iç bağlantı ağı oluşuyor.
Özellikle soru-cevap ve uzman makalesi altyapısı, kullanıcıların Google’da aradığı uzun ve spesifik sağlık sorgularına karşı sürekli büyüyebilen bir içerik yüzeyi oluşturuyor.
WordPress’ten Laravel’e geçiş sırasında mevcut URL değerini korumak da bu mimarinin kritik bir parçasıydı. Eski URL kalıpları, yönlendirmeler, canonical davranışları ve indekslenebilir sayfalar yeni uygulama içerisinde yeniden ele alındı.
Arama performansı rakamlarla ölçülebiliyor
Doktorunu Bil projesinde SEO başarısını soyut ifadelerle anlatmak zorunda değiliz.
Google Search Console’da ölçülen üç aylık dönemde platform yaklaşık 429 bin organik arama tıklaması ve 8,88 milyon Google gösterimi elde etti.
Aynı görünümde organik arama tıklama oranı %4,8, ortalama arama konumu ise 8,2 seviyesinde ölçüldü.
Bu veriler bizim için yalnızca bir pazarlama metriği değil. Yüz binlerce dinamik URL içeren bir platformun yeniden geliştirilip farklı bir teknoloji yığınına taşındıktan sonra arama motorlarında erişilebilir ve güçlü kalabildiğinin gerçek trafik üzerindeki karşılığı.
Yüksek trafik altında çalışan altyapı
Arama motoru görünürlüğü büyüdükçe altyapının taşıdığı trafik de büyüyor.
Cloudflare’ın son 30 günlük trafik görünümünde Doktorunu Bil için yaklaşık 624 bin unique visitor metriği ve 4,79 milyon HTTP isteği kaydedildi. Aynı dönemde platform üzerinden yaklaşık 105 GB veri servis edildi.
Bu ölçek nedeniyle performans optimizasyonunu yalnızca frontend dosyalarını küçültmek olarak değerlendirmedik.
Uygulama, veritabanı, önbellek, medya işleme ve web sunucusu katmanları ayrı ayrı ele alındı.
Redis ile sorguyu gerektiği yerde durdurmak
Yaklaşık 148 bin doktorun bulunduğu bir veritabanında her sayfa açılışında doktor, hastane, branş veya içerik sayılarını tekrar tekrar hesaplamak gereksiz bir maliyet yaratır.
Bu nedenle platform istatistikleri ve sık kullanılan veri setleri Redis üzerinde belirli sürelerle önbelleğe alınan servisler üzerinden sunuluyor. Yoğun kullanılan sorguların her istekte MariaDB’ye ulaşması engellenerek veri tabanı yükü azaltılıyor.
Aynı yaklaşım kullanıcıya sık gösterilen fakat her saniye değişmesi gerekmeyen farklı veri gruplarında da uygulanabiliyor.
Veri modeli büyümeye göre tasarlandı
Platformdaki etkileşimlerin tamamını her içerik türü için ayrı ve tekrar eden tablolarla çözmek yerine ihtiyaç duyulan noktalarda polimorfik veri ilişkileri kullandık.
Örneğin favori ve raporlama altyapıları doktor, hastane veya farklı içerik tipleriyle aynı mekanizma üzerinden ilişki kurabilecek şekilde tasarlandı.
Bu sayede yeni bir içerik türü sisteme eklendiğinde favorileme, raporlama veya benzeri ortak özelliklerin yeniden sıfırdan geliştirilmesi gerekmiyor.
Güvenlik ve moderasyon uygulamanın çekirdeğinde
Sağlık alanında kullanıcı tarafından üretilen içerik barındıran bir platformda güvenlik yalnızca giriş ekranının korunması anlamına gelmiyor.
Hesap işlemleri, soru gönderimi, değerlendirmeler, profil sahiplenme talepleri ve raporlama akışlarında yetki kontrolleri, rate limiting ve sunucu tarafı doğrulama mekanizmaları kullanılıyor.
Kullanıcı içerikleri yayınlanmadan önce moderasyon süreçlerinden geçirilebiliyor; uygunsuz içerikler ayrıca kullanıcılar tarafından raporlanabiliyor.
Doktorların makale alanına Word, farklı editörler veya yapay zekâ araçlarından içerik yapıştırması sonucunda taşınabilecek gereksiz HTML, inline stil veya güvenli olmayan kod parçalarını azaltmak amacıyla içerik temizleme ve HTML sanitizasyon katmanı oluşturuldu.
Böylece içerik editörü kullanıcı için serbest kalırken çıktının platformun tasarımını veya güvenlik sınırlarını bozmasının önüne geçiliyor.
KVKK taleplerinde veri ve URL yaşam döngüsünü ayırdık
Doktor profili gibi arama motorlarında uzun süre görünmüş sayfalarda kişisel veri kaldırma talebi yalnızca bir veritabanı satırını silmekten ibaret değildir.
Bu nedenle platformda profilin kişisel veri yaşam döngüsü ile URL’nin teknik yaşam döngüsünü birbirinden ayıran bir kaldırma mimarisi tasarlandı.
Kaldırılması gereken kişisel bilgiler artık kullanıcıya sunulmazken ilgili kaydın sistem içerisindeki durumu ayrıca işaretlenebiliyor. Kaldırılmış profillerin arama motorlarında tekrar indekslenmemesi için uygun noindex davranışı uygulanabiliyor.
Bu yaklaşım hem kullanıcının kişisel verisinin yeniden servis edilmesini önlüyor hem de büyük veri setlerinde profil kaldırma işlemlerinin diğer ilişkiler üzerinde kontrolsüz yan etkiler yaratmasını engelliyor.
Görseller sunucuya geldiği haliyle bırakılmıyor
Yüz binlerce profil barındıran bir platformda medya optimizasyonu da önemli bir altyapı problemi.
Doktor fotoğrafları ve içerik görselleri yükleme aşamasında işlenerek web kullanımına uygun boyutlara dönüştürülüyor ve WebP çıktıları üretilebiliyor.
Böylece gereksiz büyüklükteki kaynak görsellerin her ziyaretçiye doğrudan gönderilmesi engelleniyor; disk kullanımı ve ağ üzerinden taşınan veri miktarı kontrol altında tutuluyor.
Teknik altyapı
- Backend: PHP 8.4, Laravel 12
- Yönetim altyapısı: FilamentPHP
- Frontend: Tailwind CSS 4, Alpine.js, Livewire 3
- Arama: Laravel Scout, TNTSearch ve özel fuzzy matching katmanı
- Veritabanı: MariaDB
- Cache & Queue: Redis
- Web sunucusu: Nginx ve PHP-FPM
- Process yönetimi: Supervisor
- CDN & trafik katmanı: Cloudflare
- Medya işleme: Otomatik boyutlandırma ve WebP dönüşümü
- İçerik güvenliği: HTML sanitizasyon / purification katmanı
- SEO: Laravel tabanlı dinamik metadata, canonical ve indeksleme mimarisi
Birbirini büyüten ürün döngüsü
Doktorunu Bil’in en değerli taraflarından biri sistemdeki parçaların birbirinden bağımsız çalışmaması.
Google’dan gelen kullanıcı bir sağlık sorusu, branş, hastane veya doktor üzerinden platforma ulaşabiliyor. Doktoru inceliyor, soru soruyor veya değerlendirme bırakıyor. Doktor profilini sahiplenerek cevap veriyor ve uzmanlık alanında içerik yayınlıyor. Oluşan yeni içerikler tekrar arama motorlarında erişilebilir hale geliyor ve yeni kullanıcıları platforma getiriyor.
Başka bir ifadeyle arama, doktor profilleri, soru-cevap, değerlendirmeler ve uzman içerikleri aynı büyüme döngüsünün parçaları.
Bu nedenle Doktorunu Bil’i yalnızca bir doktor rehberi olarak değil, kullanıcı ve hekim etkileşimi arttıkça kendi bilgi tabanını büyütebilen bir sağlık platformu olarak tasarladık.
Mevox Digital için neden bir imza proje?
Doktorunu Bil, Mevox Digital’in yalnızca kurumsal web sitesi geliştiren bir ekip olmadığını en açık biçimde gösteren projelerden biri.
Burada tasarımın yanında yüz binlerce kayıtlık veri mimarisi, gelişmiş arama, iki farklı kullanıcı tipi, özel yönetim panelleri, moderasyon, güvenlik, önbellekleme, medya işleme, SEO migrasyonu ve yüksek trafik operasyonu aynı ürün içerisinde çözülüyor.
Üstelik sistem teorik bir prototip olarak değil; yüz binlerce profili ve milyonlarca aylık HTTP isteğini gerçek kullanıcı trafiği altında taşıyan canlı bir ürün olarak çalışıyor.
Doktorunu Bil’de yaptığımız iş bir web sitesini yeniden tasarlamak değildi. Organik görünürlüğünü kaybetmeden büyüyebilecek, yüksek veri ve trafik hacmini taşıyabilecek ve kullanıcı ile doktor arasında sürekli yeni değer üretebilecek bir dijital ürünün teknik temelini yeniden kurduk.