SEO

B2B için Programmatic SEO: AKS'te 81 il taramasını nasıl kurduk

AKS Otomasyon için 400+ il-servis sayfası ürettiğimiz Next.js programmatic SEO pipeline'ının saha notları — hangi durumlarda çalışır, thin content riskinden nasıl kaçınılır, launch sonrası altı hafta içinde top-10 sıralama nasıl mümkün oldu.

Yazar Berke Erdoğan15 Temmuz 20268 dk okuma
B2B için Programmatic SEO: AKS'te 81 il taramasını nasıl kurduk

ÖzetProgrammatic SEO B2B servis şirketleri için üç şart sağlanırsa çalışıyor: arama niyetinin temiz bir değişkene mapping'i (genelde coğrafya, bazen dikey sektör), her üretilen sayfada gerçek anlamda farklı içerik (yalnızca token değişimi değil), ve orphan sayfa indexation problemini önleyen iç link mimarisi. AKS Otomasyon için bu playbook'u Q2 2026'de uyguladık; "il + endüstriyel otomasyon" long-tail sorgularında launch sonrası altı hafta içinde top-10'a girdik.

Programmatic SEO — bir template + veri kümesinden üretilen sayfalar — ikiye bölünmüş bir üne sahip. Sektörün yarısı bunu "düşük efor long-tail içerik" diye yazıyor, diğer yarısı "Google'ın cezalandıracağı thin content" diyor. Gerçek ikisi de değil: belirli koşullar sağlandığında çalışan, sağlanmadığında öngörülebilir şekilde başarısız olan spesifik bir araç.

Bu yazı AKS Otomasyon'un Q2 2026'daki programmatic SEO katmanını nasıl kurduğumuzu anlatıyor — 400+ il-servis sayfası, launch sonrası altı hafta içinde Google Türkiye'de "il + endüstriyel otomasyon" long-tail sorgularında top-10 sıralama.

Programmatic SEO ne zaman doğru araç?

Üç koşul sağlanmalı:

1. Arama niyeti bir veya iki değişkene temiz bir şekilde map ediliyor olmalı. Genelde coğrafya (şehir, il, bölge, ülke) veya dikey sektör (endüstri, ürün kategorisi, use case), bazen ikisinin kombinasyonu. AKS için değişken 81 Türk iliydi — çünkü endüstriyel alıcılar gerçekten öyle arıyor: "kayseri endustriyel otomasyon" gibi, sadece "endustriyel otomasyon" değil.

2. Her üretilen sayfada gerçek anlamda farklı içerik olmalı. "Kayseri'de hizmetimize hoş geldiniz" cümlesinin "İstanbul'da hizmetimize hoş geldiniz"e döndürülmesi değil. Farklı açılış bağlamı, farklı yerel referanslar, farklı case study (varsa), farklı fotoğraf. Template sadece token değişimini destekliyorsa Google'ın duplicate content heuristik'lerine takılırsınız ve sayfaların hiçbiri sıralanmaz.

3. Hub-and-spoke iç link mimariniz olmalı. Üretilen sayfaların ana navigasyondan giriş noktaları ve aralarında cross-reference'ları olması lazım. Orphan sayfalar — sitemap'te olan ama site içinden hiçbir link gitmeyen sayfalar — keşfedilir ama önceliklendirilmez.

Bu üçünden biri eksikse programmatic SEO yapmayın. Daha az sayıda ama daha uzun sayfa yazın.

AKS setup'ı

AKS Otomasyon Türkiye genelinde endüstriyel otomasyon çözümleri satıyor. Orijinal sitede tek bir jenerik hizmet sayfası vardı. Konya'daki bir alıcı "konya endustriyel otomasyon" arattığında karşısına ulusal ziyaretçi gibi karşılayan bir ana sayfa çıkıyor ve tıklamadan kapatıyordu.

Her il için ayrı bir sayfa istedik. Hizmet farklı olduğu için değil (aynı hizmet), arama niyeti farklı olduğu için — Konya'daki alıcı AKS'nin kendi bölgesinde faaliyet gösteren gerçek bir vendor olup olmadığını kontrol ediyor; ulusal landing page bu soruya cevap vermiyor.

Ulaştığımız dosya yapısı şöyle:

src/app/[locale]/hizmetler/
├── endustriyel-otomasyon/
│   ├── page.tsx          — hub sayfa (ulusal)
│   ├── il/
│   │   └── [ilSlug]/
│   │       └── page.tsx  — il başına bir sayfa
├── plc-scada/
├── enerji-otomasyonu/
└── ...

[ilSlug] dynamic segment'i, TypeScript'teki 81 elemanlı seed dataset üzerinden generateStaticParams kullanıyor:

export const IL_DATASET = [
  {
    slug: "istanbul",
    name: "İstanbul",
    osb: ["Tuzla OSB", "İkitelli OSB", "Beylikdüzü OSB"],
    industrialContext:
      "Türkiye'nin en yoğun sanayi bölgesi. Otomotiv yan sanayi, gıda paketleme, ilaç üretimi ağırlıklı.",
    nearbyIller: ["kocaeli", "tekirdag", "bursa"],
  },
  {
    slug: "kayseri",
    name: "Kayseri",
    osb: ["Kayseri OSB", "İncesu OSB"],
    industrialContext:
      "Mobilya, metal işleme ve otomotiv yan sanayi merkezi. OSB yoğunluğu yüksek.",
    nearbyIller: ["nevsehir", "sivas", "malatya"],
  },
  // ...toplam 81
];

Her ilin gerçek verisi var: OSB adları (gerçek alıcıların kullandığı arama terimleri), ile özel kısa bir endüstriyel bağlam paragrafı ve iç link için komşu iller.

Sadece template değil, gerçek içerik

Çoğu programmatic SEO burada başarısız oluyor: sayfa sadece ulusal kopyayı şehir adı ekleyerek tekrar ediyor. Google'ın algoritması bunu on yıldır cezalandırıyor. Çalışmıyor.

Bizim template üç yerde ile özel içerik çekiyor:

1. Açılış paragrafı ilin endüstriyel bağlamına açıkça referans veriyor. "İstanbul'da endüstriyel otomasyon hizmeti veriyoruz — Tuzla OSB'den İkitelli OSB'ye kadar, otomotiv yan sanayi ve gıda paketleme fabrikalarında PLC, SCADA ve enerji otomasyonu projeleri teslim ediyoruz." Her il için farklı.

2. İlgili proje bloku o ilde AKS'nin gerçek işi varsa case study gösteriyor. Henüz projesi olmayan iller için "İlk projede referans olma fırsatı" CTA'sı ile değişiyor. İki varyant da geçerli içerik — thin content riski aşıldı.

3. Yakın illere çapraz bağlar footer bloğunda. "Yakın iller" başlığı nearbyIller slug'larına link veriyor. Her sayfanın diğer üretilen sayfalara 3-4 outbound iç linki var; bu Google'a bu sayfaların crawl edilmeye değer, orphan olmayan gerçek sayfalar olduğunu söyleyen sinyal.

Ölçekte schema markup

Her üretilen sayfa kendi LocalBusiness + Service JSON-LD'sini yayıyor:

{
  "@context": "https://schema.org",
  "@type": "Service",
  "provider": {
    "@type": "LocalBusiness",
    "name": "AKS Otomasyon",
    "areaServed": {
      "@type": "AdministrativeArea",
      "name": ilData.name,
      "containedInPlace": { "@type": "Country", "name": "TR" }
    }
  },
  "serviceType": "Endüstriyel Otomasyon",
  ...
}

areaServed alanının ile dar edilmesi, AI Overviews ve yerel aramanın bu sayfaları jenerik ulusal sayfalar değil, gerçekten yerel sayfalar olarak muamele etmesini sağlıyor.

Gerçekte ne oldu?

Nisan 2026'da canlıya çıktı. İlk indekslenmiş sayfalar Search Console'da yayın sonrası yaklaşık 10 gün içinde görünmeye başladı. Altıncı hafta sonunda:

  • 400+ il × servis kombinasyonu indekslendi.
  • ~35 "il + servis" long-tail sorgusunda top-10 sıralama.
  • İletişim formu leadleri il bazında etiketlendi; bu AKS satış ekibinin takip önceliklendirmesini değiştirdi.

Her sayfa sıralamıyor. Bazı illerde sorgu için yeterli arama hacmi yok ve o sayfalar tail'de duruyor. Bu sorun değil — render maliyetleri sıfır denecek kadar düşük (SSG-first) ve gelecekte talep gelirse hazırlar.

Farklı yapabileceğimiz iki şey

Bir: iç linkin ne kadar önemli olduğunu hafife aldık. İlk versiyonda il-başına-sayfa vardı ama nearbyIller çapraz linkleri yoktu. Indexation beklediğimizden yavaştı. Üçüncü haftada "Yakın iller" bloğunu eklemek yeni sayfalardaki crawl oranını ikiye katladı.

İki: seed dataset'i el yazımı değil, otoriter bir kaynaktan üretmeliydik (TR il Wikipedia listesi, OSB veritabanı). İlk versiyonda OSB isimlerinde birkaç yazım hatası vardı ve bunları ancak QA'da yakaladık. 400+ sayfa üretirken source-of-truth veri, el yazımı içerikten daha kritik.

Ne zaman yapılmamalı?

Programmatic SEO derinliğin yerini tutmuyor. Ürününüzün üç gerçek müşteri segmenti varsa üç mükemmel sayfa istersiniz, yanlış değişkenler üzerinden templatelenmiş otuz vasat sayfa değil. AKS örneği çalışıyor çünkü 81 il gerçek bir segmentasyon — Konya'daki alıcı vendor'un Konya'da çalışıp çalışmadığını umursuyor. Ama global tek buyer persona'sı olan bir SaaS için "[endüstri] için SaaS" sayfalarını 100 endüstriye üretmek thin content'tir ve Google öyle muamele eder.

Araç, alıcıların gerçekte nasıl arattığına uyduğunda çalışıyor. Her yerde ise manuel penaltıya kısayol.


İlgili işler: