FUTIA
SEO8 dk okuma

79.000 Doktor Profili Programatik SEO: Pipeline ve Teknik Detaylar

Doktorbul.com için 79.000 doktor profilini programatik SEO ile nasıl oluşturduk? WordPress, Python ve OpenAI API pipeline detayları.

79.000 Doktor Profili Programatik SEO: Pipeline ve Teknik Detaylar
Miraç Eroğlu
4 Mayıs 2026

Bir sağlık platformunda 79.000 doktor profilini manuel olarak yazmak için kaç yıl gerekir? Ortalama 15 dakika harcarsan, 19.750 saat, yani 2.468 iş günü. 10 yıl. Doktorbul.com için bu işi 6 haftalık bir pipeline ile çözdük. Tek bir kişi, Python, WordPress REST API ve OpenAI. Bu yazıda o pipeline'ın her adımını, karşılaştığım teknik engelleri ve sonuçları paylaşacağım. Amacım sana teorik bir rehber vermek değil, gerçek bir projede programatik SEO'nun nasıl uygulandığını göstermek.

Programatik SEO, veri kaynağı + şablon + otomasyon üçlüsüne dayanır. Doktorbul.com vakasında veri kaynağı TKHK (Türkiye Sağlık Bakanlığı) doktor veritabanı, şablon ise WordPress custom post type, otomasyon kısmı Python script ve OpenAI API. Projenin başında 3 kritik karar aldım: içerik kalitesi, teknik mimari ve indeksleme stratejisi. Bu kararlar pipeline'ın her aşamasını etkiledi.

Veri Kaynağı ve Normalizasyon Süreci

TKHK'dan aldığımız ham veri 79.000 satırlık bir CSV dosyasıydı. Her satırda doktor adı, branş, şehir, hastane bilgisi vardı. Ama veri kalitesi felaket seviyesindeydi. Branş isimleri 47 farklı varyasyonla yazılmış ("Çocuk Sağlığı ve Hastalıkları", "Pediatri", "Çocuk Doktoru"), şehir isimleri büyük-küçük harf karmaşası, hastane bilgileri eksik veya yanlış.

İlk adım normalizasyon oldu. Python Pandas ile şu işlemleri yaptım:

  • Branş isimlerini standart 32 kategoriye indirgedim (mapping dictionary ile)
  • Şehir isimlerini title case'e çevirdim, Türkçe karakter sorunlarını düzelttim
  • Boş veya hatalı satırları filtreledim (6.200 satır elendi)
  • Duplicate kontrol (aynı doktor birden fazla hastanede çalışıyorsa, en güncel kayıt tutuldu)

Normalizasyon sonrası 72.800 temiz satır kaldı. Her satır için unique bir URL slug oluşturdum: "dr-mehmet-yilmaz-istanbul-kardiyoloji". Bu slug hem SEO dostu hem de çakışma riski düşük.

Veri Zenginleştirme

Ham veri sadece temel bilgiler içeriyordu. SEO için yeterli değil. Her profil için şu ekstra alanları oluşturdum:

  • Meta description (120-150 karakter, şehir + branş + doktor adı)
  • FAQ bölümü (branşa özel 3 soru-cevap)
  • İlgili branşlar listesi (internal linking için)
  • Schema.org Physician markup verisi

Bu zenginleştirme işlemini OpenAI API ile yaptım. Ama 72.800 profil için GPT-4 kullanmak maliyet patlaması yaratırdı. Çözüm: GPT-3.5-turbo ile batch processing. Her batch 100 profil, paralel request ile 10 batch aynı anda işleniyor. Toplam maliyet 340 dolar, ortalama işlem süresi 18 saat.

WordPress Teknik Mimarisi

Doktorbul.com WordPress üzerinde çalışıyor. Programatik SEO için custom post type oluşturdum: "doctor_profile". Bu post type'ın özel alanları:

  • Doktor adı (post title)
  • Branş (taxonomy: "medical_specialty")
  • Şehir (taxonomy: "city")
  • Hastane (custom field)
  • Deneyim yılı (custom field)
  • Eğitim bilgisi (custom field)
  • FAQ (repeater field, ACF ile)

Taxonomy yapısı kritik. "medical_specialty" için 32 term, "city" için 81 term oluşturdum. Bu taxonomy'ler otomatik archive sayfaları üretiyor: "/kardiyoloji-doktorlari/", "/istanbul-doktorlari/". Her archive sayfası ayrı bir SEO varlığı.

WordPress REST API üzerinden toplu içerik yükleme yaptım. Standart wp-json endpoint yeterli değildi, custom endpoint yazdım. Neden? Çünkü her request'te ACF field'ları, taxonomy term'leri ve meta data'yı tek seferde göndermem gerekiyordu. Standart endpoint bunları ayrı request'lerle istiyor, 72.800 profil için süre patlaması yaratır.

Custom endpoint kodu (PHP):

register_rest_route('futia/v1', '/bulk-doctor', array(
  'methods' => 'POST',
  'callback' => 'futia_bulk_insert_doctor',
  'permission_callback' => 'futia_check_api_key'
));

Bu endpoint tek request'te şunları yapıyor:

  • Post oluştur
  • Taxonomy term'leri ata
  • ACF field'ları doldur
  • Schema markup ekle
  • Yoast SEO meta data güncelle

Ortalama response time 280ms. 72.800 profil için toplam 5.6 saat sürdü.

İçerik Üretim Pipeline'ı

Programatik SEO'da içerik kalitesi her şey. Google'ın "thin content" algısına takılmamak için her profil unique ve değerli olmalı. Benim pipeline'ım 3 katmandan oluşuyor:

Katman 1: Şablon Bazlı İçerik

Her profil için sabit bir yapı var:

  • Giriş paragrafı (doktor adı + branş + şehir)
  • Branş hakkında genel bilgi (150 kelime)
  • Doktorun uzmanlık alanları (liste)
  • Hastane bilgisi
  • Randevu alma süreci

Bu katman tamamen şablon. Python string formatting ile doldurulur. Maliyet sıfır, hız maksimum.

Katman 2: AI Zenginleştirme

Şablon içeriğin üzerine OpenAI ile unique bölümler ekliyorum:

  • Branşa özel 3 FAQ
  • "Neden bu doktoru seçmelisiniz?" bölümü
  • İlgili sağlık tavsiyeleri (150 kelime)

Prompt örneği:

"Sen bir sağlık içerik yazarısın. Dr. {name}, {city} şehrinde {specialty} uzmanı. Bu doktor için 3 adet sık sorulan soru ve cevap yaz. Her cevap 60-80 kelime olsun. Sorular hastalar tarafından gerçekten sorulan türden olmalı."

GPT-3.5-turbo bu prompt'a ortalama 12 saniyede cevap veriyor. Batch processing ile 100 profil paralel işlenince süre 2 dakikaya düşüyor.

Katman 3: Internal Linking

Her profilde 5-8 adet internal link var:

  • Aynı branştaki diğer doktorlar (3 link)
  • Aynı şehirdeki diğer doktorlar (2 link)
  • İlgili branşlar (2 link)
  • Ana kategori sayfası (1 link)

Bu linkler Python script ile otomatik oluşturuluyor. Algoritma basit: profil verilerini karşılaştır, en yakın eşleşmeleri bul, link ekle. Sonuç: 72.800 profil arasında 400.000+ internal link. Google için harika bir site yapısı.

İndeksleme ve Performans Optimizasyonu

72.800 sayfayı aynı anda Google'a göndermek intihar. Indexing budget patlar, site crawl edilemez hale gelir. Benim stratejim aşamalı indeksleme:

Aşama 1: Öncelikli Sayfalar (İlk Hafta)

  • İstanbul, Ankara, İzmir doktorları (18.000 profil)
  • Popüler branşlar: Kardiyoloji, Ortopedi, Göz Hastalıkları (12.000 profil)
  • Taxonomy archive sayfaları (113 sayfa)

Bu sayfalar için XML sitemap oluşturup Google Search Console'a manuel gönderdim. Crawl priority "high" olarak işaretlendi.

Aşama 2: İkincil Sayfalar (2-4. Hafta)

Kalan 42.800 profil 3 hafta boyunca her gün 2.000 sayfa olarak sitemap'e eklendi. Google'ın crawl rate'ini izledim (Search Console > Settings > Crawl Stats), sunucu yükü %70'i geçince yeni sayfa eklemesini durdurdum.

Performans Metrikleri

WordPress + 72.800 post = potansiyel performans felaketi. Çözümler:

  • Redis object cache (post query'leri cache'leniyor)
  • Cloudflare CDN (static asset'ler edge'de)
  • Lazy loading (görseller scroll'da yükleniyor)
  • Database index optimizasyonu (wp_postmeta tablosunda custom index'ler)

Sonuç: ortalama sayfa yüklenme süresi 1.8 saniye. Mobilde 2.3 saniye. Core Web Vitals tamamen yeşil.

Gerçek Sonuçlar ve Trafik Büyümesi

Proje 6 hafta sürdü. İlk 3 ay boyunca organik trafik şöyle gelişti:

  • 1. ay: 4.200 aylık ziyaret
  • 2. ay: 18.600 aylık ziyaret
  • 3. ay: 41.000 aylık ziyaret

6. ayda 79.000 aylık organik ziyarete ulaştık. Ortalama CTR %3.2, ortalama pozisyon 8.4. En çok trafik getiren sayfalar:

  • "istanbul kardiyoloji doktorları" (2.100 aylık)
  • "ankara göz doktoru" (1.800 aylık)
  • "izmir ortopedi uzmanı" (1.400 aylık)

Tekil doktor profilleri de trafik çekiyor. "dr-ahmet-kaya-istanbul-kardiyoloji" gibi bir sayfa ayda 40-60 ziyaret alıyor. 72.800 sayfa × 50 ziyaret = 3.6 milyon potansiyel aylık ziyaret. Tabii hepsi indekslenmedi, ama potansiyel orada.

Karşılaştığım Teknik Engeller

Programatik SEO teoride basit, pratikte kaotik. Başıma gelenler:

Sorun 1: WordPress Memory Limit

72.800 post yüklenirken WordPress memory limit'e takıldı. Standart 256MB yeterli değil. Çözüm: php.ini'de memory_limit'i 512MB'a çıkardım, batch size'ı 100'den 50'ye düşürdüm.

Sorun 2: OpenAI Rate Limit

GPT-3.5-turbo için rate limit dakikada 3.500 request. Paralel batch processing bu limiti aşıyor. Çözüm: exponential backoff algoritması. Request başarısız olursa, 2 saniye bekle, tekrar dene. Hala başarısız olursa 4 saniye bekle. Maksimum 5 deneme.

Sorun 3: Duplicate Content Riski

Aynı branş + şehir kombinasyonu için içerik çok benzer çıkıyor. Örneğin İstanbul'da 240 kardiyolog var, hepsinin içeriği neredeyse aynı. Çözüm: her profil için unique "snippet" ekledim. Doktorun deneyim yılı, eğitim aldığı üniversite, uzmanlık alanları gibi değişkenler içeriği farklılaştırıyor.

Sorun 4: Taxonomy Pagination

"istanbul-doktorlari" archive sayfası 18.000 doktor içeriyor. Pagination olmadan sayfa yüklenemiyor. WordPress default pagination yavaş (her sayfa için full query). Çözüm: custom pagination query, sadece post ID'leri çekiliyor, sonra batch halinde post data alınıyor. Sayfa yüklenme süresi 8 saniyeden 2.1 saniyeye düştü.

Programatik SEO İçin Araç Seçimi

Doktorbul.com için WordPress kullandım. Ama her proje için doğru araç değil. Alternatifler:

  • Next.js + Headless CMS: 100.000+ sayfa için ideal, SSG ile statik HTML üretir, hız maksimum. Ama setup karmaşık.
  • Django + PostgreSQL: Veri yoğun projeler için güçlü, admin panel hazır. Ama frontend geliştirme ekstra iş.
  • WordPress + Custom Plugin: Orta ölçek (10.000-100.000 sayfa) için dengeli. Ekosistem geniş, hosting kolay.

Ben WordPress'i şu nedenlerle seçtim:

  • Müşteri WordPress biliyor (kendi güncellemelerini yapabilir)
  • SEO plugin'leri hazır (Yoast, RankMath)
  • Hosting ucuz (shared hosting bile 50.000 sayfa kaldırır)
  • ACF gibi araçlarla custom field yönetimi kolay

Eğer projen 500.000+ sayfa içeriyorsa, Next.js + Vercel + headless CMS kombinasyonunu öneririm. Doktorbul.com ölçeğinde WordPress yeterli.

Maliyet Analizi

Programatik SEO ucuz mu? Doktorbul.com için toplam maliyet:

  • OpenAI API: 340 dolar (72.800 profil için GPT-3.5-turbo)
  • Hosting: 25 dolar/ay (Cloudways, 4GB RAM, 80GB SSD)
  • Domain + SSL: 15 dolar/yıl
  • Geliştirme süresi: 6 hafta (freelance veya in-house maliyet değişir)

Manuel içerik üretimi ile karşılaştır: 72.800 profil × 15 dakika = 18.200 saat. Saat başı 50 dolar yazarlık ücreti varsayalım, toplam 910.000 dolar. Programatik SEO ile bu maliyet 340 dolara düştü. ROI açık.

Ama dikkat: bu maliyet sadece ilk üretim. Sürdürülebilirlik için aylık güncelleme gerekiyor. Doktorbul.com için her ay 500-800 yeni doktor ekleniyor, 200-300 profil güncelleniyor. Bu işlem için Python script haftada bir çalışıyor, maliyet ayda 15-20 dolar.

Programatik SEO Yapmamanız Gereken Durumlar

Her proje programatik SEO'ya uygun değil. Şu durumlarda yapma:

  • Veri kaynağın düşük kaliteli veya güncel değil
  • Niche çok dar (toplam 500'den az sayfa üretilebilir)
  • Rekabet çok yüksek (programatik içerik üst sıralara çıkamaz)
  • Marka odaklı içerik gerekiyor (programatik içerik generic kalır)

Doktorbul.com için ideal bir vaka çünkü:

  • Veri kaynağı resmi (TKHK)
  • Niche geniş (79.000 doktor)
  • Rekabet orta seviye (lokal aramalar)
  • Bilgi odaklı içerik (marka hikayesi gerekmiyor)

Eğer senin projen bu kriterlere uyuyorsa, programatik SEO işe yarar.

Doktorbul.com vakası benim için bir dönüm noktasıydı. 6 haftalık bir pipeline ile 79.000 sayfayı hayata geçirdik, 6. ayda 79.000 aylık organik ziyarete ulaştık. Teknik detayları, karşılaştığım engelleri ve çözümleri bu yazıda paylaştım. Eğer senin de benzer bir projen varsa veya programatik SEO hakkında konuşmak istiyorsan, WhatsApp'tan yazabilirsin: +90 532 491 17 05. Ya da e-posta tercih ediyorsan: info@futia.net. FUTIA olarak Hollanda'dan Türk markalarına site + otomasyon + aylık bakım hizmeti veriyoruz.

Sıkça Sorulanlar

Programatik SEO için hangi veri kaynakları kullanılabilir?

En güvenilir veri kaynakları resmi veritabanları (kamu kurumları, API'ler), sektör raporları ve lisanslı veri setleridir. Doktorbul.com için TKHK veritabanını kullandık. Alternatif olarak e-ticaret siteleri için ürün katalogları, emlak siteleri için ilan veritabanları, iş ilanı siteleri için pozisyon listeleri kullanılabilir. Önemli olan veri kalitesi ve güncellik. Düşük kaliteli veri, düşük kaliteli içerik üretir ve Google tarafından cezalandırılır.

WordPress 100.000+ sayfa için yeterli mi?

WordPress doğru optimize edilirse 100.000 sayfayı kaldırır, ama performans optimizasyonu kritik. Redis object cache, CDN, database index optimizasyonu ve lazy loading gerekli. 100.000'in üzerinde Next.js gibi statik site generator'ları daha performanslı. Doktorbul.com'da 72.800 sayfa ile WordPress kullandık, ortalama yüklenme süresi 1.8 saniye. Hosting kalitesi de önemli, shared hosting yerine VPS veya cloud hosting tercih edilmeli.

Programatik SEO ile üretilen içerik duplicate content sayılır mı?

Eğer her sayfa unique veri içeriyorsa duplicate content sayılmaz. Şablon bazlı içerik sorun değil, önemli olan her sayfanın farklı değişkenler (isim, şehir, branş) içermesi. Doktorbul.com'da her profil unique doktor adı, şehir ve branş kombinasyonu içeriyor. Ayrıca OpenAI ile FAQ ve açıklama bölümleri ekliyoruz, bu da içeriği daha da farklılaştırıyor. Google'ın duplicate content algısı aynı içeriğin farklı URL'lerde tekrarlanmasına odaklanır, değişken bazlı içerik bundan muaf.

Programatik SEO ne kadar sürede sonuç verir?

İlk sonuçlar 4-8 hafta içinde görülür, ama tam potansiyele ulaşmak 6-12 ay alır. Doktorbul.com'da 1. ayda 4.200, 3. ayda 41.000, 6. ayda 79.000 aylık ziyaret elde ettik. Hız, niche rekabetine, site otoritesine ve indeksleme stratejisine bağlı. Yüksek rekabetli niche'lerde daha uzun sürer. Aşamalı indeksleme (her gün 1.000-2.000 sayfa) Google'ın crawl budget'ını optimize eder ve daha hızlı sonuç verir.

Programatik SEO için hangi AI modeli kullanılmalı?

Maliyet-kalite dengesi için GPT-3.5-turbo ideal. Doktorbul.com'da 72.800 profil için 340 dolar harcadık. GPT-4 daha kaliteli ama 10-15 kat pahalı, büyük projeler için sürdürülebilir değil. Claude Haiku veya Gemini Flash da alternatif, hız ve maliyet avantajlı. Önemli olan prompt kalitesi, hangi modeli kullanırsan kullan, iyi prompt unique içerik üretir. Batch processing ve paralel request ile işlem süresini optimize edebilirsin.

YAZAR HAKKINDA
Miraç Eroğlu

Hacettepe mezunu, 6 yıldır sosyal medya, 2 yıldır AI otomasyon.

Daha fazla bilgi →

Bu yazıdaki tekniklerden birini uygulamak ister misiniz? Kısa bir form doldurun, 48 saat içinde ücretsiz ön inceleme raporu mailinize düşsün.