AI Botları JavaScript Çalıştırmıyor — Görünmez İçerik Sorunu

Bir sitenin iki farklı yüzü olabilir: tarayıcıda gördüğünüz yüz ve botların gördüğü yüz. Klasik SEO'da bu ayrım yıllar içinde önemini yitirdi, çünkü Googlebot JavaScript çalıştırmayı öğrendi ve çoğu site rahatladı. Sonra AI botları geldi ve saat geriye sarıldı. İşin özü şu: AI botları JavaScript çalıştırmaz — GPTBot, ClaudeBot, PerplexityBot ve benzerleri sayfanızın ham HTML'ini alır, script'lerinizi hiç çalıştırmadan gider. Siteniz içeriği JavaScript ile ekrana çiziyorsa, bu botlar için siz boş bir sayfasınız. Buna "görünmez içerik sorunu" diyorum ve modern web'in önemli bir bölümü bu sorunun tam ortasında oturuyor, çoğunun haberi bile yok.

AI botları JavaScript çalıştırıyor mu?

Kısa cevap: büyük çoğunluğu hayır. Bir web sayfasını "görmek" iki farklı iş. Birincisi HTML'i indirmek — ucuz, hızlı, saniyede binlerce sayfa. İkincisi o HTML'deki JavaScript'i çalıştırıp sayfanın son halini oluşturmak — bunun için headless bir tarayıcı gerekir ve maliyet kabaca yüz kat artar. Milyarlarca sayfa tarayan bir bot için bu fark, bütçenin tamamı demek.

Google bu maliyeti yıllar önce göze aldı; Googlebot sayfaları bir render kuyruğuna alır ve JavaScript'i çalıştırır. Google AI Overviews da normal Google indeksinden beslendiği için JS ile çizilen içerik oraya girebilir. Ama AI şirketlerinin botları bu yatırımı yapmadı. Ağustos 2026 itibarıyla tablo kabaca şöyle:

Bot JavaScript çalıştırır mı? Sonuç
Googlebot (ve AI Overviews) Evet JS içeriği görünür, gecikmeli de olsa
GPTBot / OAI-SearchBot Hayır Yalnız ham HTML
ChatGPT-User Hayır Kullanıcı sorduğu anda bile ham HTML
ClaudeBot Hayır Yalnız ham HTML
PerplexityBot Hayır Yalnız ham HTML
Bytespider Hayır Yalnız ham HTML

Bu tablo zamanla değişebilir; render etmek pahalı ama imkansız değil ve bir gün bu botlardan biri tarayıcı kuşanabilir. Ama bugün planınızı "AI botu benim JavaScript'imi çalıştırmaz" varsayımıyla yapmalısınız. Render meselesinden bağımsız olarak, bu botların sitenize girmesine izin verdiğinizden de emin olun; o ayrı bir konu ve AI botları için robots.txt yazısında ayrıntısıyla anlattım.

SPA ve React siteleri için bu ne anlama geliyor?

Tek sayfa uygulaması (SPA) mimarisinde sunucudan gelen HTML çoğu zaman bir iskelet: boş bir <div id="root">, birkaç script etiketi, belki bir yükleme animasyonu. Başlıklar, paragraflar, ürün açıklamaları, fiyatlar — hepsi JavaScript çalıştıktan sonra ekrana gelir. Kullanıcı için sorun yok. Googlebot için çoğunlukla sorun yok. GPTBot için ise o sayfa gerçek anlamda bomboş.

Varsayımsal ama sahada defalarca benzerini gördüğüm bir örnek üzerinden gideyim. Bir B2B SaaS düşünün; pazarlama sitesi dahil her şey React ile yazılmış, içerik ekibi kırk tane özenli blog yazısı üretmiş, "neden ChatGPT bizi hiç kaynak göstermiyor?" diye danışmanlık alıyorlar. Robots.txt tertemiz, botlara izin var, sunucu logları botların geldiğini gösteriyor. Ama botların indirdiği her sayfa aynı: boş kök div, script listesi, bir de <title>. Kırk yazının tamamı, AI motorlarının gözünde hiç yazılmamış. Bot geliyor, kapıdan bakıyor, boş oda görüyor, gidiyor.

"Peki neden Google'da sıralamamız iyi?" sorusu tam burada geliyor ve cevabı yukarıdaki tabloda: Googlebot render ettiği için klasik SEO tarafında sorun görünmüyor. Bu da sorunu daha sinsi yapıyor, çünkü ekip elindeki tek göstergeye — Google trafiğine — bakıp her şeyin yolunda olduğuna hükmediyor. AI kanalı ise sessizce sıfır çekiyor. İki kanalın altyapı gereksinimleri ayrıştı; birinde başarılı olmak diğerini garanti etmiyor.

Bir teselli notu da düşeyim: SPA'larda her şey kaybolmuyor. <title>, meta açıklama ve sunucudan basılan schema markup gibi head içi öğeler ham HTML'de durur; botlar bunları okur. Ama bu, kitabın kapağını görüp içini görememek gibi — motor sitenizin ne hakkında olduğunu bilir, sizi kaynak gösterecek kadar içerik bulamaz.

İşin sinsi tarafı şu: bu sorun kısmi de olabilir. Sayfanın ana metni sunucudan gelirken ürün özellikleri bir API'den JavaScript ile çekiliyorsa, bot yazının girişini görür ama asıl önemli kısmı göremez. Ya da SSS bölümünüz tıklayınca açılan bileşenlerle çizilyorsa ve içerik DOM'a JS ile ekleniyorsa, tam da AI motorlarının en sevdiği soru-cevap içeriğiniz görünmezdir. Asıl soru "sitem görünüyor mu?" değil, "sitemin hangi parçaları görünüyor?" olmalı.

AI botlarının gördüğünü nasıl kontrol edersiniz — curl ve tarayıcı karşılaştırması

Bunu anlamak için pahalı araç gerekmiyor; on dakika ve bir terminal yetiyor. Mantık basit: tarayıcınız JavaScript çalıştırır, curl çalıştırmaz. Curl'ün gördüğü şey, aşağı yukarı GPTBot'un gördüğü şeydir.

curl -s https://siteniz.com/onemli-sayfa | grep -i "sayfadaki önemli bir cümle"

Sayfada gözünüzle gördüğünüz bir cümleyi seçin — bir başlık, bir ürün açıklaması, fiyat — ve ham HTML'de arayın. Cümle çıkıyorsa o içerik sunucudan geliyor, botlar görüyor. Çıkmıyorsa JavaScript ile çiziliyor, botlar görmüyor. Bu testi ana sayfa, bir blog yazısı, bir ürün sayfası ve fiyatlandırma sayfası için ayrı ayrı yapın; şablonlar farklı davranabiliyor.

Terminal sevmiyorsanız iki alternatif var. Birincisi tarayıcıda sağ tık, "Sayfa kaynağını görüntüle" — dikkat, F12 ile açılan öğe denetleyicisi değil. Denetleyici JavaScript çalıştıktan sonraki DOM'u gösterir, sizi yanıltır; "kaynağı görüntüle" ise sunucudan gelen ham HTML'i gösterir. İkincisi, tarayıcı ayarlarından JavaScript'i tamamen kapatıp sayfayı yenilemek. Karşınıza beyaz bir ekran çıkıyorsa, GPTBot'a merhaba deyin; o da aynısını görüyor.

Bir adım ileri gitmek isterseniz curl'e bot user-agent'ı verin:

curl -s -A "GPTBot/1.0" https://siteniz.com/ -o /dev/null -w "%{http_code}"

Bu, ikinci bir sorunu yakalar: bazı CDN ve güvenlik katmanları bot user-agent'larına farklı yanıt döner — 403, boş sayfa, doğrulama ekranı. İçerik sunucudan gelse bile bot o içeriğe hiç ulaşamıyor olabilir. İki testi birlikte yaptığınızda resmin tamamını görürsünüz.

Efora göre SSR ve prerender seçenekleri

Diyelim ki test kötü çıktı; içerik ham HTML'de yok. Panik yok — çözümler var ve hepsi aynı maliyette değil. En ucuzdan en pahalıya sıralayayım, çünkü sahada en sık gördüğüm hata, ekibin doğrudan "her şeyi yeniden yazalım" moduna geçmesi.

Birinci seviye: kritik içeriği statik HTML'e taşımak. Belki tüm siteyi kurtarmanız gerekmiyor. AI görünürlüğü için asıl önemli sayfalar bellidir: blog, dokümantasyon, SSS, ürün ve fiyatlandırma sayfaları. Yalnız bu sayfaları statik üretime almak — pazarlama sitesini uygulamadan ayırıp Astro, Hugo, Next.js static export gibi bir araçla üretmek — çoğu şirket için en yüksek getirili hamle. Uygulamanın kendisi SPA kalabilir; giriş yaptıktan sonraki ekranları zaten hiçbir botun görmesi gerekmiyor.

İkinci seviye: prerender servisi. Rendertron benzeri araçlar veya ticari prerender hizmetleri, bot user-agent'ı tespit edince sayfanın JavaScript çalıştırılmış halini önbellekten sunar; gerçek kullanıcılar SPA'yı görmeye devam eder. Kod tabanına neredeyse dokunmadan devreye girer, bu yüzden hızlı bir yara bandı olarak değerlidir. Eksileri de bilin: bakım ister, önbellek bayatlayabilir ve bot listesini güncel tutmak size kalır — listeye eklenmemiş yeni bir AI botu yine boş sayfa görür.

Üçüncü seviye: gerçek sunucu tarafı render (SSR). Next.js, Nuxt, SvelteKit gibi çatılarla sayfanın ilk HTML'i sunucuda üretilir; bot da kullanıcı da aynı dolu sayfayı alır. En sağlam ve geleceğe en dayanıklı çözüm bu, çünkü bot ayrımı yapmıyorsunuz; herkese aynı içeriği veriyorsunuz. Bedeli de en yüksek: mevcut bir SPA'yı SSR'a taşımak günlük değil, çeyreklik bir iş olabilir. Yeni proje başlatıyorsanız tartışma yok, SSR varsayılan tercihiniz olsun. Mevcut projede ise bu yatırımı içerik sitenizin AI kanalından beklediğiniz değere göre tartın.

Karar verirken şu soruyu sorun: AI kanalından görünürlük beklediğim sayfaların kaçı bugün botlara kapalı? Cevap "yalnız blog" ise birinci seviye yeter ve haftalar değil günler konuşursunuz. Cevap "sitenin tamamı" ve içerik sizin için stratejik bir kanal ise, prerender ile zaman kazanıp SSR'a giden yolu planlamak en dengeli rota. Bir de sahada gördüğüm bir ara çözümü anayım: bazı ekipler yalnız en kritik metinleri — ürünün ne yaptığını anlatan iki paragraf, fiyat tablosu, SSS — sunucudan basılan HTML'e gömüp geri kalanı SPA olarak bırakıyor. Mimari açıdan zarif değil ama botların eli boş dönmemesini sağlıyor ve tam geçişe köprü kuruyor.

Hangi seviyeyi seçerseniz seçin, bir kural değişmez: değişiklikten sonra curl testini tekrarlayın. "SSR'a geçtik" cümlesi ile "botlar içeriği görüyor" cümlesi aynı şey değil; arada yanlış yapılandırılmış bir önbellek, bir edge fonksiyonu, bir hydration hatası olabilir.

rankzupAI panelinde motor bazında görünürlük skorları
Botlar sayfanızı işleyemiyorsa motorlar birbirinden ayrışır — rankzupAI'nin motor bazlı skorları bu farkı görünür kılar.
Ücretsiz görünürlük kontrolü

JavaScript ve AI görünürlüğü, aklınızda kalsın

Toparlayayım. AI motorlarında görünürlük zinciri üç halkadan oluşuyor: bot siteye girebilmeli (robots.txt, CDN katmanı), içeriği ham HTML'de bulabilmeli (bu yazının konusu) ve o içerik alıntılanmaya değer olmalı. İkinci halka en sinsisi, çünkü kırıldığında hiçbir hata mesajı üretmiyor; siteniz kullanıcıya kusursuz görünürken botlara boş görünüyor ve siz bunu ancak aylar sonra, "neden hiç atıf almıyoruz?" diye sorduğunuzda fark ediyorsunuz.

İyi haber: teşhis beş dakika. Sitenizin AI botlarına şu an gerçekte nasıl göründüğünü crawler simülatörü ile ücretsiz test edebilirsiniz; araç sayfanızı bot gözüyle çekip hangi içeriğin görünür olduğunu gösteriyor. Beyaz ekranla karşılaşırsanız üzülmeyin — sorunun farkında olan azınlığa katıldınız ve yukarıdaki harita elinizde.

Bu, daha geniş teknik GEO kontrol listesinin bir parçası.

Sıkça sorulan sorular

React kullanmak yapay zeka gorunurlugumu bozar mi?
Sorun React degil, tamamen istemci tarafinda render. Sunucu bos bir div gonderip icerigi tarayiciya kurdurursa sikinti cikar. Sunucuda ya da derleme aninda render ediyorsan (Next.js SSR, Astro, SvelteKit on-render), HTML eksiksiz gelir ve yapay zeka tarayicilari rahat okur.
Yapay zeka tarayicisinin sayfamda ne gordugunu nasil kontrol ederim?
Ham HTML'i curl ile cek ve oku — GPTBot asagi yukari bunu aliyor. Fiyat, SSS ya da karsilastirma iceriklerin o metinde yoksa tarayici da gormuyor demektir. Tarayicida JavaScript'i kapatirsan ayni gorunumu gozunle de yakalarsin.
Google JavaScript icerigimi gorurken ChatGPT goremiyor mu?
Cogu zaman evet, insani yaniltan da bu. Googlebot JavaScript'i kendi render servisiyle calistirir, yani AI Overviews ve Gemini grounding istemci tarafi icerige ulasabilir — ama OpenAI, Anthropic ve Perplexity tarayicilari ham HTML'i alip durur. AI Overviews'ta duzgun gorunup ChatGPT'de bombos olabilirsin.