Bir web sitesinin iki işi var: bulunmak ve bulunduğunda hızlı açılmak. Bugün “bulunmak”, yalnızca Google’da üst sıralarda çıkmak değil; ChatGPT, Gemini ve Perplexity gibi yapay zekâ asistanlarının verdiği cevaplarda anılmak da demek. Bu yazıda kurumsal sitelerde bu iki iş için yaptıklarımı, ölçtüğüm rakamlarla birlikte anlatıyorum.
Teknik SEO: arama motorunun işini kolaylaştırmak
- Her sayfada eksiksiz temel: Tek bir H1, kanonik adres (canonical), paylaşım kartları için Open Graph ve Twitter etiketleri, geçerli yapılandırılmış veri.
- Temiz site haritası:
sitemap.xmlyalnızca kanonik sayfaları listeliyor. Yönlendirilen ya da kopya adresler haritada yok. - Kalıcı yönlendirmeler: Eski
.htmluzantılı adresler, uzantısız yeni adreslere 301 ile yönleniyor; birikmiş bağlantı değeri kaybolmuyor. - Gerçek 404: Olmayan sayfa, “200 başarılı” diyerek boş bir sayfa göstermiyor; gerçekten 404 döndürüyor.
- Sızıntı temizliği: Sunucuda unutulmuş
.bakve.oldyedek dosyalarına ve önizleme klasörüne erişim kapatıldı; dosyalar silinmeden erişilemeyen bir yere taşındı. - Başlık ve açıklama eşikleri: 66 karakteri aşan başlıklar ve 158 karakteri aşan açıklamalar düzeltiliyor. Bu eşiklerin altındakilere dokunulmuyor; çalışan bir şeyi değiştirmek yeni risk demek.
- Konuya göre iç bağlantı: Blog yazıları ilgili hizmet sayfasına bağlanıyor. Arama motoru hangi sayfanın hangi konuda ana sayfa olduğunu anlıyor.
- Site geneli analiz: Kendi yazdığım bir araç tık derinliğini, aynı kelime için yarışan sayfaları (konu yamyamlığı), sayfa ile hedef kelime uyumunu ve uzmanlık sinyallerini (E-E-A-T) denetliyor.
İşler P1, P2, P3 diye önceliklendiriliyor. Kritik (P1) iş kalmadan yayına çıkılıyor; bilerek açık bırakılan P2 ve P3 maddelerinin gerekçesi yazılı duruyor.
GEO: yapay zekâ asistanlarının cevabında yer almak
Yapay zekâ asistanları bir siteyi insanlardan farklı okur. Onlar için yaptıklarım:
llms.txt: Sitenin yapay zekâ modelleri için özeti. Kurumsal sayfalar ve blog iki grupta; her satırda sayfanın başlığı ve en fazla 160 karakterlik açıklaması var.- Her sayfanın Markdown ikizi: Bir istemci
Accept: text/markdownbaşlığıyla istek attığında, aynı sayfanın sade Markdown sürümünü alıyor. Sunucuda tek bir genel kuralla çalışıyor. - Zengin yapılandırılmış veri:
Organization,LocalBusiness,ProfessionalService,WebSite,WebPage,BreadcrumbList,Service,FAQPage,BlogPosting,HowToveImageObjecttipleri. - Tek kimlik: Kurumun kimliği bütün sayfalarda aynı
@idaltında birleştirildi. Asistan, yirmi ayrı sayfada yirmi ayrı kurum değil tek bir kurum görüyor. - Açılış cümlesi: Sayfaların girişine marka, hizmet ve konumu birlikte söyleyen net bir cümle eklendi. Asistanlar cevabı çoğunlukla ilk paragraftan alır.
GEO nasıl ölçülür
Sabit, değişmeyen 20 soruluk bir set hazırladım ve bu soruları düzenli aralıklarla birden fazla yapay zekâ sağlayıcısına soran bir tarama aracı yazdım. Araç, markanın cevaplarda ne sıklıkla anıldığını ölçüyor.
Bir kurumsal sitede yaptığım ilk ölçümde marka adıyla sorulan sorularda anılma oranı %100, “bu işi kim yapar” tipindeki keşif sorularında ise %0 çıktı. Bu fark GEO’nun asıl zorluğunu gösteriyor: asistanlar sizi tanıyor ama henüz önermiyor. Yukarıdaki yapılandırılmış veri ve açılış cümlesi çalışmaları tam olarak bu açığı kapatmaya yönelik.
Hız: rakamlarla iyileştirmeler
Hızı sezgiyle değil ölçümle yönetiyorum. Her değişikliğin öncesi ve sonrası kayıt altında.
| İyileştirme | Önce | Sonra |
|---|---|---|
| Yazı tiplerini kendi sunucudan sunmak (mobil LCP) | 3164 ms | 2106 ms |
| Aynı değişiklik (mobil PageSpeed skoru) | 86,9 | 98,0 |
| Bot doğrulamasını form etkileşimine kadar geciktirmek (ana sayfa mobil skoru) | 70 | 94 |
| Aynı değişiklik (mobil LCP) | 6126 ms | 2552 ms |
| Aynı değişiklik (sayfa ağırlığı) | 866 KB | 356 KB |
| Aynı değişiklik (masaüstü toplam engelleme süresi) | 4210 ms | 335 ms |
| JPG’den WebP’ye geçiş (görsel başına ortalama) | yaklaşık %46 küçülme |
Masaüstünde skor 100. İki büyük kazancın ortak noktası aynı: üçüncü taraf bileşenleri kritik yoldan çıkarmak. Dışarıdan çekilen yazı tipleri ve sayfa açılışında yüklenen bot doğrulaması, sayfanın ilk görünmesini geciktiriyordu. Birini kendi sunucuya taşıdım, diğerini kullanıcı formla etkileşime geçene kadar erteledim.
Ağır içerik de akıllıca yükleniyor: sitedeki üç boyutlu sahne ayrı bir paket olarak sonradan yükleniyor, metin ondan önce okunabilir.
Laboratuvar skoru ile saha verisini karıştırmamak
PageSpeed skoru bir laboratuvar ölçümü. Google’ın sıralamada kullandığı ise gerçek ziyaretçilerden gelen saha verisi (Core Web Vitals) ve düşük trafikli sitelerde bu veri henüz oluşmamış olabilir. Bu yüzden laboratuvar skorunu hedef değil, erken uyarı olarak görüyorum.
Ölçüm araçları
Kendi yazdığım, sürekli çalışan bir SEO ve GEO kiti kullanıyorum:
- Tarama: Kırık bağlantı, eksik etiket, yönlendirme zinciri.
- PageSpeed: Her sayfa için mobil ve masaüstü ölçümü.
- Sıra takibi: Hedef kelimelerde Google’daki konum.
- GEO taraması: Yapay zekâ cevaplarında anılma oranı.
- Günlük analizi: Sunucu günlüklerinden gerçek ziyaretçi ve bot trafiği.
Her ölçüm tarihli bir klasöre kaydediliyor. İlk ölçüm (başlangıç çizgisi) hiç değiştirilmiyor; her iyileştirme ona göre değerlendiriliyor.
Ölçerken öğrendiklerim
- “Ölçülemedi” sıfır değildir. Bir GEO taraması “%0 görünürlük” gösterdi. Gerçek sebep, 20 API çağrısının hepsinin başarısız olmasıydı; hiçbir şey ölçülmemişti. O günden beri araçlarım başarısız ölçümü sıfır olarak değil, başarısız olarak kaydediyor.
- Bot trafiğinin büyük kısmı taklit. “Yapay zekâ tarayıcısı ziyareti” sayılan trafiğe IP doğrulaması ekleyince, bu trafiğin %65’inin sahte kullanıcı ajanı taşıyan taklitler olduğu ortaya çıktı.
- Türkçe büyük-küçük harf tuzağı. Python’da
"İ".lower()iki karakter üretir. Metin içinde konum hesaplayan bir kod bu yüzden</head>etiketini bozuyordu. Yerel testte yakalandı, canlıya gitmedi. - Tek satır, bütün başlıklar. Nginx’te bir
locationbloğuna eklenen tek biradd_headersatırı, üstteki bütün güvenlik başlıklarını o yol için sessizce iptal etti. Artık her değişiklikten sonra başlıklar ayrıca denetleniyor. - Anahtarın IP kısıtlaması. Ölçüm anahtarının IP kısıtlaması, IP değişince bütün ölçümleri sessizce çökertti ve panoda “skor 0” göründü. Boş ölçüm artık başarısız sayılıyor.
Takip kodu yok
Ölçtüğüm sitelerde istemci tarafında reklam ve takip kodu (analitik etiketleri, piksel betikleri) kullanmıyorum. Ölçüm sunucu günlüklerinden ve arama motorlarının kendi araçlarından yapılıyor. Bu hem hızı hem ziyaretçi gizliliğini koruyor.
Bu sitelerin fikirden yayına nasıl ilerlediğini bir web sitesini nasıl yapıyorum yazısında adım adım anlattım.