Methodology v1.0
28 Ağustos 2026 • By AICompatible Ekibi • 7 dk okuma

Blogumuz Google'da Vardı ama Perplexity Hiç Görmüyordu: JS Render Sorunu

Sorunun Fark Edilişi: ChatGPT Bloglarımızı Tanımıyordu

Geçen ay ilginç bir şey fark ettik. ChatGPT'ye "AICompatible.com'da yapay zeka botlarının tarama davranışları hakkında ne yazılar var?" diye sorduğumuzda, hiçbir blog yazımızdan bahsetmedi. Oysa Google Search Console'da blog sayfalarımız güzelce indekslenmiş görünüyordu, organik trafik de alıyorduk.

Perplexity'de de benzer bir durum vardı. Sitemizle ilgili sorular sorduğumuzda, ana sayfamızdan ve statik sayfalarımızdan alıntı yapıyordu ama blog yazılarımız sanki hiç yokmuş gibi davranıyordu. Bu garip tutarsızlık bizi araştırmaya itti.

Teşhis: Botlar JavaScript Çalıştırmıyor

İlk olarak blog sayfalarımızın kaynak koduna baktık. Chrome'da sağ tık → "Görüntüle Kaynak" yaptığımızda şunu gördük:

<div id="blog-container">
  <!-- İçerik buraya yüklenecek -->
</div>
<script src="posts.js"></script>

Blog içeriğimiz tamamen JavaScript ile render ediliyordu. posts.js dosyası, yazıları bir JSON yapısından çekip DOM'a enjekte ediyordu. Sayfanın gerçek HTML kaynağında hiçbir içerik yoktu.

Googlebot'un bu durumla başa çıkabildiğini biliyorduk çünkü Google 2015'ten beri JavaScript render ediyor. Ama diğer botlar? Curl ile test ettik:

curl -A "GPTBot/1.0" https://aicompatible.com/blog/bot-tarama-rehberi

Dönen HTML'de sadece boş bir container vardı. GPTBot, ClaudeBot ve PerplexityBot gibi LLM botlarının çoğu JavaScript çalıştırmıyor. Onlar için sayfalarımız kelimenin tam anlamıyla boştu.

robots.txt ve Log Analizi

Sunucu loglarımızı incelediğimizde şunu gördük:

  • Googlebot: Sayfayı ziyaret ediyor, ardından posts.js dosyasını da fetch ediyor (JS render kanıtı)
  • GPTBot: Sadece HTML sayfayı çekiyor, hiçbir JS dosyasına dokunmuyor
  • ClaudeBot: Aynı şekilde tek istek, JS yok
  • PerplexityBot: Benzer davranış

Sorun açıktı: Modern arama botları JS render edebilirken, LLM eğitim ve yanıt üretme botları bunu yapmıyordu. Bu mantıklı aslında—milyarlarca sayfayı tarayıp eğitim verisi olarak kullanırken her biri için headless browser çalıştırmak çok maliyetli.

Çözüm: Statik HTML Sayfalar Üretmek

Çözüm basitti ama etkili: Her blog yazısı için içeriği doğrudan HTML içine gömmek. Bunu yapmak için basit bir Node.js scripti yazdık:

// generate-blog-pages.js
const fs = require('fs');
const posts = require('./posts.json');

posts.forEach(post => {
  const html = `
<!DOCTYPE html>
<html lang="tr">
<head>
  <meta charset="UTF-8">
  <title>${post.title} - AICompatible.com</title>
  <meta name="description" content="${post.excerpt}">
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "headline": "${post.title}",
    "description": "${post.excerpt}",
    "author": {
      "@type": "Organization",
      "name": "AICompatible.com"
    },
    "datePublished": "${post.date}",
    "dateModified": "${post.modified || post.date}",
    "publisher": {
      "@type": "Organization",
      "name": "AICompatible.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://aicompatible.com/logo.png"
      }
    }
  }
  </script>
</head>
<body>
  <article>
    <h1>${post.title}</h1>
    <time datetime="${post.date}">${post.date}</time>
    ${post.content}
  </article>
</body>
</html>
  `;
  
  fs.writeFileSync(`./blog/${post.slug}.html`, html);
});

Bu scripti her yeni yazı eklediğimizde veya mevcut yazıları güncellediğimizde çalıştırıyoruz. Artık her blog sayfası gerçek HTML içeriğe sahip.

BlogPosting Şeması Ekleme

Yukarıdaki örnekte de görüldüğü gibi, her sayfaya application/ld+json formatında BlogPosting şeması ekledik. Bu hem Google'ın zengin sonuçlar göstermesine yardımcı oluyor hem de LLM botlarına yapılandırılmış veri sağlıyor.

Önemli alanlar:

  • headline: Yazının başlığı
  • datePublished/dateModified: Tarih bilgileri (LLM'ler içeriğin güncelliğini değerlendirmek için kullanıyor)
  • author ve publisher: İçeriğin kaynağını netleştiriyor

Sonuç ve Dersler

Değişikliği yaptıktan iki hafta sonra ChatGPT'ye aynı soruyu tekrar sorduk. Bu sefer blog yazılarımızdan doğrudan alıntılar yaptı ve kaynak olarak gösterdi. Perplexity'de de benzer bir iyileşme gördük.

Bu deneyimden çıkardığımız genel dersler:

  • Googlebot ≠ Tüm Botlar: Google'da görünmek, LLM'lerin sizi göreceği anlamına gelmiyor
  • JavaScript render isteğe bağlı: İçeriğiniz HTML'de varsa JS ile zenginleştirebilirsiniz, ama temel içerik HTML'de olmalı
  • Yapılandırılmış veri kritik: Schema.org işaretlemeleri botların içeriğinizi anlamasını kolaylaştırıyor

Kendi Sitenizi Kontrol Edin

Bu sorunu yaşayıp yaşamadığınızı kontrol etmek basit:

  1. Blog sayfanızda sağ tık → "Görüntüle Kaynak" yapın
  2. Asıl içeriğinizi kaynak kodda görebiliyor musunuz?
  3. Yoksa sadece boş div'ler ve script etiketleri mi var?

Eğer içeriğiniz kaynak kodda yoksa, LLM botları muhtemelen sizi görmüyordur.

AICompatible.com'un site tarayıcısı bu tür sorunları otomatik tespit ediyor. Bir sayfayı taradığımızda hem ham HTML içeriğini hem de render edilmiş içeriği karşılaştırıyoruz. Eğer önemli içerik sadece JS ile yükleniyorsa, raporda bunu "LLM botları için görünmez içerik" olarak işaretliyoruz. Ayrıca eksik veya hatalı schema.org işaretlemelerini de tespit edip düzeltme önerileri sunuyoruz.

Sonuç olarak: Modern web geliştirme pratikleri bazen geriye dönük uyumluluğu ihmal edebiliyor. LLM çağında "botlar için erişilebilirlik" yeni bir optimizasyon boyutu haline geldi. İçeriğinizin hem insanlar hem de her türlü bot için erişilebilir olduğundan emin olun.