Ana metnin sayfaya yalnızca tarayıcıda çalışan JavaScript ile ekleniyorsa, JavaScript çalıştırmayan bir yapay zekâ botu boş bir kabuk görüyor: bir başlık, bir <div id="root"> ve birkaç betik etiketi. Googlebot JavaScript'i işliyor, Applebot işleyebiliyor; ama OpenAI, Anthropic ve Perplexity botlarının bunu yapıp yapmadığını belgelemiyor. Güvenli yol, önemli içeriğin sunucunun gönderdiği HTML'de olmasını sağlamak: sunucu tarafında işleme (SSR), statik üretim ya da ön işleme (pre-rendering).
Belgelenen ne?
| Bot | JavaScript işleme | Kaynak |
|---|---|---|
| Googlebot | Evet. Google JavaScript sayfalarını üç aşamada işliyor: tarama, işleme (rendering) ve dizine ekleme | JavaScript SEO temelleri |
| Applebot | Apple'a göre siteni bir tarayıcı içinde işleyebiliyor; JS, CSS ve XHR kaynaklarının engellenmemesi gerekiyor | Applebot hakkında |
| GPTBot, OAI-SearchBot, ChatGPT-User | Belirtilmemiş | OpenAI botları |
| ClaudeBot, Claude-SearchBot, Claude-User | Belirtilmemiş | Anthropic botları |
| PerplexityBot, Perplexity-User | Belirtilmemiş | Perplexity botları |
Google'ın bir cümlesi olduğu gibi ciddiye alınmaya değer: sunucu tarafında işleme ya da ön işleme, siteyi hem kullanıcılar hem botlar için hızlandırdığı ve her bot JavaScript çalıştıramadığı için hâlâ çok iyi bir fikir.
Bildiğimiz tek büyük ölçüm yapay zekâ şirketlerinden değil, bir barındırma şirketinden geliyor. Vercel Aralık 2024'te kendi ağ verisine dayanarak büyük yapay zekâ botlarının hiçbirinin o tarihte JavaScript işlemediğini, OpenAI ve Anthropic botlarının JavaScript dosyalarını çektiğini ama çalıştırmadığını yazdı. Bu, bir şirketin belli bir andaki verisi; botlar değişiyor. Kalıcı bir gerçek değil, test etmek için bir sebep.
Hangi siteler etkileniyor?
- Sunucu tarafında işleme olmadan React, Vue, Angular ya da Svelte ile yapılmış, HTML gövdesi boş bir bağlama noktasından ibaret tek sayfa uygulamalar (SPA).
- Sayfa yüklendikten sonra
fetch()ile gelen içerik: istemcide bir API'den çekilen yazı metni, ürün bilgisi ya da fiyat. - Etkileşimin arkasındaki metin: tıklanana kadar HTML'de olmayan sekmeler, akordeonlar, "devamını oku" düğmeleri.
- Yalnızca ilk birkaç öğenin HTML'de olduğu sonsuz kaydırma listeleri.
- Yorum ya da SSS widget'ı gibi metni üçüncü taraf bir betikle ekleyen site kurucular ve widget'lar.
WordPress, çoğu statik site üreticisi ve sunucuda işlenen ya da statik üretilen Next.js ve Nuxt sayfaları genellikle tam HTML gönderiyor. "Genellikle", çünkü tek bir bileşen bile içeriğini istemcide yükleyebiliyor.
HTML'inde ne var, test et
Tarayıcının betikler çalıştıktan sonra gösterdiğine değil, sunucunun gönderdiği HTML'e bak.
Terminalden:
curl -s https://ornek.com/yazin/ | grep -c "yazının ortasından bir cümle"
0 çıkıyorsa o cümle ham HTML'de yok. Başlıktan değil gövdeden bir cümle seç; istemcide işlenen sitelerde bile başlık çoğu zaman sunucudan geliyor.
Tarayıcıda: sayfayı aç, Kaynağı Görüntüle'yi kullan (JavaScript'ten sonraki DOM'u gösteren Öğeler panelini değil) ve yazıdan bir cümle ara.
Metin uzunluğunu karşılaştır: sayfanın görünen metnini kopyala, ham HTML'deki metinle karşılaştır. HTML'de küçük bir kısmı varsa geri kalanı JavaScript'ten geliyor.
Search Console'daki URL Denetleme aracı işlenmiş HTML'i, yani Googlebot'un işledikten sonra gördüğünü gösteriyor. Google için faydalı; ama işleme yapmayan bir botun ne aldığını söylemiyor.
En iyiden kabul edilebilire çözümler
- Sunucu tarafında işleme ya da statik üretim. İçeriği sunucuda ya da derleme sırasında oluştur. Next.js'te bu, içerik sayfaları için sunucu bileşenleri ya da statik sayfalar, yazı gövdesini bir istemci bileşeninde çekmemek demek. Çatı tarafı Next.js ve React AdSense rehberinde.
- Ön işleme. Her sayfanın HTML anlık görüntüsünü derleme sırasında üret. Seyrek değişen içerikte iyi çalışıyor.
- Gerisi istemcide kalsa bile kritik metni ilk HTML'e koy. Yazı gövdesi, ara başlıklar, başlık, meta açıklama ve ana menü linkleri HTML'de olmalı. Yorum sayıları, canlı widget'lar ve kişiselleştirme istemcide kalabilir.
- İçeriği tıklamanın arkasına saklama. Kapalı bir
<details>ya da CSS ile gizlenmiş sekmedeki metin HTML'de duruyor; yalnızca sekmeye tıklanınca çekilen metin durmuyor.
Google, dinamik işlemeyi (botlara önceden işlenmiş HTML, kullanıcılara istemci sürümünü sunmak) uzun vadeli bir çözüm değil, geçici bir çare olarak tanımlıyor (dinamik işleme). Gerçek sunucu tarafı işlemeyi tercih et.
Temelleri de kontrol et
İşleme, bir yapay zekâ botunun metnini kaçırmasının yollarından yalnızca biri. İsteğin önce şunlardan geçmesi gerekiyor:
- robots.txt: yapay zekâ botlarına robots.txt izni;
- CDN ya da güvenlik duvarı: Cloudflare yapay zekâ bot engeli ve sunucu ve eklenti kuralları.
JavaScript içerik ve AdSense
Ayrı sorular, ama çözüm örtüşüyor. Googlebot JavaScript'i işliyor; yine de betikler çalışana kadar neredeyse hiçbir şey göstermeyen bir sayfa, bir betik hata verdiğinde zayıf ya da bozuk görünebiliyor. AdSense'in düşük değerli sayfadan ne kastettiği zayıf içerik rehberinde; AdSense incelemesinin baktığı şeyleri ücretsiz Approvalens taraması kontrol ediyor.
Sayfalarını kontrol et
Ücretsiz yapay zekâ bot kontrolü sayfanı JavaScript işlemeyen bir botun yapacağı gibi çekiyor ve ana metni JavaScript'e bağlı görünen sayfaları işaretliyor. İstekleri yapay zekâ botlarının kullanıcı aracılarıyla bizim sunucumuzdan gidiyor; yani botun kendisi değil, onun benzetimi. IP aralığına bakan bir güvenlik duvarı bunlara farklı cevap verebilir.
Sık sorulan sorular
ChatGPT sitemi okurken JavaScript çalıştırıyor mu?
OpenAI ne evet ne hayır diyor. Vercel'in 2024 verisinde OpenAI botları JavaScript dosyalarını çekmiş ama çalıştırmamıştı. İşlemeye güvenme; içeriği HTML'e koy.
Sitem Google'da çıkıyor. Bu, botların okuyabildiğini kanıtlamaz mı?
Googlebot'un işledikten sonra okuyabildiğini kanıtlar. Google JavaScript işliyor; bu, işleme yapmayabilecek botlar hakkında bir şey söylemiyor.
HTML'e biraz metin koyuyor, ama genelde kısa bir mesaj oluyor, yazının kendisi değil. Gerçek içeriği işle.
Tembel yüklenen (lazy load) görseller sorun olur mu?
Metnin görünürlüğü için hayır. Kaydırınca yüklenen görseller ayrı konu; her birinin HTML'de anlamlı bir alt metni olduğundan emin ol.
Eskimiş ya da yanlış bir şey mi gördün? Bize yaz, düzeltelim.
Bu rehberi İngilizce oku →Kendi sitende kontrol et. Ücretsiz, kayıt yok.
Bunun için ücretsiz araçlar
Ücretsiz tarama
Kendi siteni kontrol et
Ücretsiz tarama: uygunluk puanı ve tüm sorunlar, genelde birkaç dakikada.