AI tabanlı arama motorları çağında görünürlük stratejisi
Yanıt üreten arama arayüzleri tıklamayı azaltırken kaynak olarak anılmak için yapısal veri, net tanım, özgün ölçüm ve yeni ölçüm göstergeleri.
Yapay zekâ tabanlı arama motorlarında görünürlük, klasik SEO'nun "ilk sayfada çık, tıklamayı al" denklemini bozdu. Google'ın AI Overviews bölümü, Perplexity, ChatGPT'nin arama modu ve Bing Copilot gibi yanıt üreten arayüzler, kullanıcının sorusunu birden fazla kaynaktan derleyip tek bir paragrafta cevaplıyor; kaynak bağlantıları çoğu zaman cevabın altında küçük bir dipnot olarak kalıyor. Bunun sonucu olarak bazı sorgularda gösterim sayısı yerinde dururken tıklama geriliyor. Bu, içeriğin kötüleştiği anlamına gelmiyor; içeriğin tüketildiği yer değişti.
Bu yazıda son bir yılda denediğim ve etkisini en azından kısmen ölçebildiğim dört yaklaşımı anlatacağım: makineye "bu sayfa ne hakkında" diyen yapısal veri, özetlenirken bozulmayan net tanımlar, başka yerde bulunmayan özgün ölçüm ve veri, bir de alıntılanabilir paragraf kurgusu. Sonunda ölçümün nasıl değiştiğine, artık hangi sayılara bakmak gerektiğine geleceğim.
Baştan söyleyeyim: bu bir "modeli kandırma" rehberi değil. Yanıt üreten sistemler büyük ölçüde klasik arama dizininden besleniyor; taranabilirlik, hız ve doğru başlık hiyerarşisi gibi teknik temeller hâlâ ön koşul. Aşağıdaki adımlar o temelin üstüne gelen katman.
Tıklama neden azalıyor, ne değişti
Klasik arama sonucunda kullanıcı bir bağlantı listesi görür ve birine tıklar. Yanıt üreten arayüzde ise model, sorguyla ilgili sayfaları çeker, içlerinden işine yarayan cümleleri seçer ve kendi ifadesiyle birleştirir. Kullanıcı cevabı okur; ancak ayrıntı, doğrulama ya da bir araç istiyorsa bağlantıya gider. Buradan üç sonuç çıkıyor:
- Sayfanız ziyaret edilmeden de kullanılabiliyor. Gösterim var, oturum yok.
- Model sayfanın tamamını değil, sorguya en yakın birkaç cümlesini seçiyor. O cümleler net değilse sayfa kaynak listesine giremiyor.
- Gelen tıklama daha nitelikli: kullanıcı özeti okumuş, yine de gelmiş. Bu oturumlar sayıca az ama niyet olarak güçlü.
Dolayısıyla hedef "özetlenmemek" değil; özetlenirken kaynak olarak anılmak ve özetin yetmediği noktada tıklanacak sayfa olmak.
Yapısal veri: sayfanın kimliğini makineye söylemek
Schema.org sözlüğüyle yazılmış bir JSON-LD bloğu; sayfanın türünü, yazarını, tarihini ve konusunu belirsizliğe yer bırakmadan aktarır. Bunun yapay zekâ yanıtlarında doğrudan bir sıralama etkisi olduğunu iddia edemem, çünkü bu sistemlerin iç işleyişi kapalı; ancak yazar ve tarih bilgisi tutarlı olan sayfaların kaynak listelerinde daha düzenli göründüğünü gözlemliyorum. Bu blogun şablonunda her yazı için üretilen blok şuna çok yakın:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Yapay zekâ tabanlı arama çağında görünürlük stratejisi",
"description": "Yanıt üreten arama arayüzlerinde kaynak olarak anılmak için yapısal veri, tanım ve ölçüm yaklaşımı.",
"datePublished": "2026-09-05",
"dateModified": "2026-09-05",
"inLanguage": "tr-TR",
"author": {
"@type": "Person",
"name": "Ekrem Değirmenci",
"url": "https://ekremdegirmenci.com"
},
"mainEntityOfPage": "https://ekremdegirmenci.com/blog/articles/ai-tabanli-arama-motorlari-caginda-gorunurluk-stratejisi"
}
Blok, sayfa başlığındaki application/ld+json türündeki script etiketinin içine gider. Dikkat ettiğim noktalar:
dateModifiedyalnızca içerik gerçekten değiştiğinde güncellenir. Tarihi taze göstermek için yapılan sahte güncellemeler, sayfadaki görünür tarihle çelişince güven kaybına dönüşüyor.- Bloktaki her alan sayfada görünen bilgiyle birebir aynı olmalı. Google'ın Rich Results Test aracı sözdizimini doğrular, anlam uyumunu doğrulamaz; o iş sizde.
- FAQ ve HowTo türleri Google'da zengin sonuç üretmeyi büyük ölçüde bıraktı. Sayfa yapısını tarif etmek için eklenebilir ama tek başına bir kazanç beklemeyin.
Net tanım ve alıntılanabilir paragraf kurgusu
Yanıt üreten sistemlerin en iyi kullandığı şey, bağlamından koparıldığında da anlamını koruyan cümledir. "Bu yöntem, yukarıda anlattığım sorunu çözer" cümlesi tek başına hiçbir şey ifade etmez; "Docker Compose proje adı, konteyner, ağ ve volume adlarının önüne gelen ve varsayılanda dizin adından türetilen bir ön ektir" cümlesi ise tek başına bir cevaptır. Compose proje adlandırması üzerine yazdığım yazıda bu kalıbı bilinçli olarak kullandım: her bölüm önce tanımı veriyor, hikâye sonra geliyor.
Uyguladığım kurgu şu:
- Her
h2altındaki ilk paragraf, başlığın sorduğu soruyu iki üç cümlede cevaplar. Örnek ve istisna sonra gelir. - Tanım cümlesinde terimin kendisi geçer; "bu", "o", "söz konusu" gibi işaret sözcükleri tanımın içinde yer almaz.
- Bir paragraf tek bir fikir taşır. Modelin seçtiği cümle 40-60 kelimelik bir paragrafın içinden geliyorsa bağlam da onunla geliyor.
- Sayısal iddia, kaynağıyla aynı cümlede durur. Kaynağı olmayan sayıyı yazmıyorum; özet aşamasında kaynağından koparılınca ya yanlış aktarılıyor ya da eleniyor.
Bunu elle takip etmek zor olduğu için yayın öncesi küçük bir denetim betiği çalıştırıyorum. Betik, her başlığın altındaki ilk paragrafı alıyor; uzunluğunu ve işaret sözcüğüyle başlayıp başlamadığını raporluyor:
import re
import sys
from html.parser import HTMLParser
ISARET_SOZCUKLERI = ("bu ", "bunlar ", "o ", "onlar ", "söz konusu ", "yukarıdaki ")
class BolumToplayici(HTMLParser):
"""Her h2 basligini altindaki ilk paragrafla eslestirir."""
def __init__(self):
super().__init__()
self.bolumler = []
self.aktif = None
self.metin = []
def handle_starttag(self, tag, attrs):
if tag in ("h2", "p"):
self.aktif = tag
self.metin = []
def handle_data(self, data):
if self.aktif:
self.metin.append(data)
def handle_endtag(self, tag):
if tag != self.aktif:
return
icerik = re.sub(r"\s+", " ", "".join(self.metin)).strip()
if tag == "h2":
self.bolumler.append({"baslik": icerik, "ilk_paragraf": None})
elif self.bolumler and self.bolumler[-1]["ilk_paragraf"] is None:
self.bolumler[-1]["ilk_paragraf"] = icerik
self.aktif = None
def denetle(html):
ayristirici = BolumToplayici()
ayristirici.feed(html)
for b in ayristirici.bolumler:
p = b["ilk_paragraf"] or ""
kelime = len(p.split())
isaretle_basliyor = p.lower().startswith(ISARET_SOZCUKLERI)
sorunlu = kelime not in range(25, 91) or isaretle_basliyor
durum = "UYARI" if sorunlu else "ok"
print(f"{durum:5} {kelime:3} kelime {b['baslik']}")
if __name__ == "__main__":
with open(sys.argv[1], encoding="utf-8") as f:
denetle(f.read())
Betik bir kalite kapısı değil, hatırlatıcı. "UYARI" gördüğüm paragrafı çoğu zaman tek cümle ekleyerek ya da işaret sözcüğünü terimin kendisiyle değiştirerek düzeltiyorum.
Özgün ölçüm ve veri: özetlenemeyen içerik
Genel bilgi, özetlendiğinde kaybolacak bir şey içermez; herkesin yazdığı "yapısal veri nedir" paragrafı için kimse sayfanıza gelmez. Kendi kurulumunuzdan çıkan sayı ise özetlenebilir ama yeniden üretilemez; model onu anarken kaynağı da anmak durumunda kalır. Excel kalite kontrol otomasyonu yazısında hata türlerini kendi kural motorumun yakaladığı örneklerle anlattım; o örnekleri başka bir kaynaktan derlemek mümkün değil ve kaynak olarak anılma ihtimalini artıran tam da bu.
- Kendi ölçümünüzü yayınlayın: betiğinizin çalışma süresi, denediğiniz üç yöntemin karşılaştırması, bir hatanın ne kadar sürede bulunduğu. Sayı küçük olabilir; önemli olan başka yerde olmaması.
- Ölçüm koşulunu yazın: hangi sürüm, hangi veri boyutu, hangi tarih. Koşulsuz sayı özetlenirken genelleştiriliyor ve yanlış aktarılıyor.
- Veriyi tablo ya da liste olarak verin, paragrafa gömmeyin. Yapısal biçim hem okuyucu hem model için ayrıştırması kolay olandır.
Ölçüm nasıl değişti: yeni sayılar
Eskiden tek sayıya bakardım: organik oturum. Bugün o sayı tek başına yanıltıcı, çünkü düşüşün sebebi görünürlük kaybı da olabilir, görünürlüğün tıklamasız hâle gelmesi de. Şu anda izlediğim göstergeler şunlar:
- Gösterim ve tıklama ayrışması. Search Console'da gösterim sabit ya da artarken tıklama oranı düşüyorsa sayfa özetleniyor demektir. Bu bir alarm değil, yeni normal; asıl alarm gösterimin de düşmesi.
- Yapay zekâ tarayıcılarının ziyaretleri. GPTBot, ClaudeBot, PerplexityBot ve OAI-SearchBot gibi tarayıcılar sunucu günlüğünde kendi adlarıyla görünür. Hangi sayfaları ne sıklıkta çektiklerini görmek, hangi içeriğin kaynak olarak değerlendirildiğine dair elimdeki en doğrudan sinyal.
- Yönlendirme kaynağı olarak yapay zekâ arayüzleri. Perplexity ve ChatGPT üzerinden gelen oturumlar analitik aracında yönlendiren adresle ayırt edilebiliyor; bunları ayrı bir kanal olarak gruplamak, küçük ama nitelikli trafiği görünür kılıyor.
- Marka aramaları. Özette adınız geçtiyse kullanıcı sonradan doğrudan sizi arıyor. Bu artışı yapay zekâ görünürlüğüne bağlamak kesin değil ama izlenmeye değer.
Tarayıcı ziyaretlerini saymak için Nginx erişim günlüğü üzerinde çalışan basit bir betik kullanıyorum. Günlük biçimi standart "combined" olduğu sürece betik olduğu gibi çalışır:
import re
import sys
from collections import Counter, defaultdict
YZ_TARAYICILAR = ("GPTBot", "ChatGPT-User", "OAI-SearchBot", "ClaudeBot",
"PerplexityBot", "Bytespider", "CCBot", "Amazonbot")
# combined bicimi: ip - - [tarih] "GET /yol HTTP/1.1" 200 1234 "yonlendiren" "user-agent"
SATIR = re.compile(r'"(?:GET|HEAD) (\S+) [^"]*" (\d{3}) (?:\d+|-) "[^"]*" "([^"]*)"')
def say(dosya):
tarayici_sayac = Counter()
sayfa_sayac = defaultdict(Counter)
with open(dosya, encoding="utf-8", errors="replace") as f:
for satir in f:
e = SATIR.search(satir)
if not e:
continue
yol, durum, ua = e.groups()
for bot in YZ_TARAYICILAR:
if bot in ua:
tarayici_sayac[bot] += 1
if durum == "200" and yol.startswith("/blog/articles/"):
sayfa_sayac[bot][yol] += 1
break
return tarayici_sayac, sayfa_sayac
if __name__ == "__main__":
tarayicilar, sayfalar = say(sys.argv[1])
for bot, adet in tarayicilar.most_common():
print(f"{bot:15} {adet:6} istek")
for yol, n in sayfalar[bot].most_common(5):
print(f" {n:4} {yol}")
Çıktıyı haftalık olarak saklıyorum; hangi yazının hangi tarayıcı tarafından çekildiği zamanla bir örüntü veriyor ve bu örüntü, Search Console'daki gösterim artışlarıyla çoğu zaman aynı yazılarda çakışıyor. Bu betiği robots.txt kararıyla birlikte düşünmek gerekir: bir tarayıcıyı engellerseniz o sistemin yanıtlarında kaynak olarak görünme ihtimalinden de vazgeçmiş olursunuz. Engelleyip engellememek bir iş kararı, ama karar günlüğe bakmadan verilmemeli.
Toparlarsam: yanıt üreten arama arayüzleri içeriği özetleyip tıklamayı azaltıyor, ama kaynak seçmeyi bırakmıyor. Seçilen kaynak olmak için sayfanın kimliğini yapısal veriyle netleştirmek, her bölümü bağlamsız da anlaşılan bir tanımla açmak, başka yerde olmayan ölçümü yayınlamak ve başarıyı oturum sayısı yerine gösterim, tarayıcı ziyareti ve nitelikli yönlendirme üçlüsüyle ölçmek gerekiyor. Bu düzeni kendi siteniz için kurmak ya da mevcut içeriğinizi bu gözle denetletmek isterseniz, veri ve otomasyon danışmanlığı sunduğum ana sayfadaki /#contact bölümünden bana ulaşabilirsiniz; ilk adım genellikle yarım günlük bir günlük analizi ve içerik taraması oluyor.