Ana içeriğe geç
Blog
22 Mayıs 2026
10 Dk.

JavaScript SEO ve Dinamik Renderlama: Google SPA'nı Belki Hiç Okumuyor

JavaScript SEO, Google'ın içeriğini görüp görmediğine karar verir. Googlebot JS'yi nasıl renderlar, SPA'lar neden sıralamada ölür ve Nuxt ile SSR sorunu yapısal olarak nasıl çözer.

Cagri Ersöz – Gründer & Creative Director, Storyable Werbeagentur Hannover

Cagri Ersöz

Cagri Ersöz, Hannover'deki dijital ajans Storyable'ın kurucusu ve genel müdürüdür. Satış psikolojisine dayalı web tasarımı ve full-stack geliştirme (Vue.js, Nuxt, React) deneyimiyle KOBİ'ler için 50'den fazla dijital projeyi hayata geçirmiştir. Uzmanlık alanları: dönüşüm optimizasyonu, yapay zeka entegrasyonu ve veri odaklı pazarlama.

Şimdi İletişime Geç

React, Vue veya Angular ile harika ve animasyonlu bir Single Page App'in başlatıyorsun. Tasarım stüdyosundan çıkmış gibi görünüyor. Google trafiği bekliyorsun – ve hiçbir şey gelmiyor. Altı ay sonra Search Console'u açıyorsun ve görüyorsun: İçerikler indekslenmemiş. JavaScript SEO'nun 2026'daki sert gerçeğine hoş geldin.

Storyable olarak Hannover'da bu hatayı Create-React-App veya saf Vue-CLI tabanlı bir SPA ile başlayan müşterilerde sürekli görüyoruz. Görsel olarak kusursuz, teknik olarak SEO mezarı. Sebep, Googlebot'un JavaScript'i Chrome tarayıcıdan temelde farklı işlemesinde yatıyor. Bunu anlamayan görünürlükle ödüyor. Bazen tüm organik erişimle.

JavaScript SEO 2026 – Googlebot, Dinamik Renderlama ve indekslenebilir Single Page App'ler için SSR
JavaScript SEO 2026: Server-Side Rendering olmadan Googlebot çoğu zaman yalnızca boş bir HTML iskeleti görür.
Rahatsız Edici Gerçek

„SSR'siz bir SPA, okuyucunun önce çevirmesi gereken bir dilde yazılmış bir kitap gibidir. Bazen zamanını ayırır. Çoğu zaman bir kenara koyar. Googlebot tam o okuyucudur – ve seçebileceği 8 milyar başka kitabı vardır."

Sorun: Google JavaScript'i Tarayıcından Farklı Şekilde Tarar

Chrome'da bir web sitesini açtığında tarayıcı HTML'i yükler, JavaScript'i alır, çalıştırır, DOM'u kurar, pikselleri renderlar. Üç saniye sonra hazır sayfayı görürsün. „Tarayıcım yapabiliyorsa Google da yapabilir" diye düşünürsün. Yanlış.

Googlebot iki aşamalı çalışır – sıralamaları gelmediğinde çoğu geliştiricinin öğrendiği bir detay:

  • 1. Aşama – Crawling: Bot URL'i çağırır ve ham HTML'i okur. Burada içerik yoksa (SPA'larda tipik) indeksleyici neredeyse hiçbir şey almaz.
  • 2. Aşama – Rendering: Saatler veya günler sonra Google sayfayı Web Rendering Service'e (WRS) gönderir. Burada JavaScript çalıştırılır, DOM kurulur – sonuç indeksleyiciye geri gider.
  1. ve 2. aşama arasındaki bu boşluk sorunun özüdür. İçeriğin yalnızca JavaScript ile görünüyorsa Google bekler. Bazen günler. Bazen haftalar. Büyük SPA'larda WRS çoğu zaman yetişemez – ve sayfalarının önemli bir kısmı zayıf veya hiç indekslenmemiş kalır.

Önemli rakamlar: Onely'nin 2024 çalışması 1.000 SPA tabanlı web sitesini inceledi: Önemli içeriklerin %35'i Google'ın gördüğü renderlanmış DOM'da görünmüyordu. E-ticaret SPA'larında indekslenmemiş ürün sayfası oranı %50'ye kadar çıkıyordu. Mükemmel bir uygulama. Yarı görünürlükle.

SPA vs. SSR vs. SSG: Google Her Mimariyi Nasıl Farklı İndeksler

Modern web geliştirmeye üç mimari hakim. SEO özellikleri temelden farklıdır – ve seçim Google'da görünür olup olmamana karar verir. Performans yönünü Yüklenme süresi cirodur – Next.js ile e-ticaret performansı yazımızda detaylı inceledik, burada konu indeksleme mantığı.

MimariÖrnek Framework'lerİlk HTMLİndeksleme DavranışıSEO Riski
SPA (Client-Side Render)Create-React-App, Vue CLI, AngularBoş iskeletRender aşaması gerektirir, çoğu zaman eksikYüksek
SSR (Server-Side Render)Nuxt, Next.js, RemixTam içerikAnında indekslenebilirÇok düşük
SSG (Static Site Generation)Nuxt SSG, Astro, HugoÖnceden derlenmiş HTMLAnında indekslenebilirÇok düşük
ISR (Incremental SSR)Next.js ISR, Nuxt HybridStatik + dinamik güncellemelerAnında indekslenebilirÇok düşük

SPA Neden Risk Modelidir

Saf bir SPA ilk istekte şöyle bir HTML sunar:

<!DOCTYPE html>
<html>
  <head><title>App</title></head>
  <body>
    <div id="root"></div>
    <script src="/static/js/main.js"></script>
  </body>
</html>

Heading yok, metin yok, yapılandırılmış veri yok. Googlebot 1. aşamada bunu görüyorsa tek semantik bilgi başlıktaki „App". Geri kalanı WRS'in daha sonra başarılı render etmesine bağlı. Şansa bağımlı olan SEO liginde değildir.

SSR Neden Yapısal Cevaptır

SSR uygulaması ilk istekte zaten tam HTML'i sunar – heading'ler, metinler, görseller, meta etiketler ve JSON-LD şema dahil. Googlebot 1. aşamada ihtiyacı olan her şeyi alır. 2. aşama artık indeksleme açısından kritik değil, sadece etkileşimli özellikler için bonus.

Tam bu yüzden Storyable olarak her müşteriyi saf Vue-SPA yerine SSR'li Nuxt üzerine inşa ediyoruz. First Contentful Paint farkı çoğu zaman %60–80 oluyor. SEO farkı: Haftalar üzerinden ölçülen indeksleme hızında 3-5 katı.

Storyable Pratiği

2026 başında bir Web App alanından müşterimiz React-SPA'dan SSR'li Next.js'e geçti. Öncesi: Dahili rotaların %40'ı indekslenmiş, ortalama indeksleme gecikmesi 12 gün. Sonrası: Rotaların %100'ü indekslenmiş, ortalama gecikme 18 saat. 90 günde organik trafik +%210. Tek bir yeni backlink olmadan saf mimari sorusu.

Googlebot Tarayıcısı: Crawl Bütçesi ve Render Gecikmesi

Google'ın muazzam kaynakları var, ancak sonsuz değil. Algoritma her alan adı için bir crawl bütçesi tanımlar – Googlebot'un belirli bir sürede çağırdığı URL sayısı. JavaScript sitelerinde render geçişi de eklendiği için yük iki katına çıkar.

JavaScript Sitelerinde Crawl Bütçesi Nasıl Yakılır

Storyable SEO audit'lerinde sürekli gördüğümüz üç tipik tuzak:

  • Render döngüleri: JavaScript'te ek rotaları lazy yükleyen bir SPA, tarayıcıyı tekrarlanan render geçişlerine zorlar. Crawl bütçesi tavan yapar
  • MB boyutunda JS bundle'ları: Main bundle'ın 3 MB ise WRS render süresi de o kadar uzun olur. Büyük sitelerde bot yetişemez
  • Dış bağımlılıklar: Render geçişinde yüklenen üçüncü taraf script'ler (tracking, widget, chatbot) indeksleyiciyi ek olarak geciktirir

Sonuç: Audit verilerimize göre orta büyüklükte SPA'larda (5.000+ rota) URL'lerin yalnızca %40–60'ı temiz indekslenmiş. Saf SSR sitelerinde değer %95+.

Gecikmenin İşine Maliyeti

İndeksleme gecikmesi sadece teknik bir detay değil – ciro kaybıdır. Üç somut zarar:

  • Yeni içerikler sıralamaları geciktirir: 14 gün sonra indekslenen bir blog yazısı, en çok trafik alacağı güncellik dalgasını kaybeder
  • Ürün güncellemeleri geç gelir: Google'ın haftalar sonra gördüğü yeni bir koleksiyon, alışveriş sonuçlarında hiçbir listeleme oluşturmaz
  • Rakipler farkı kapatır: İçeriğin render kuyruğunda asılı kalırken SSR'li rakip aynı kavramları 24 saatte sıralar

2026'da bir SPA üzerinde e-ticaret işleten her hafta ciro feda eder. Bu teoride değil – analiz ettiğimiz her Search Console'da geçerlidir.

Dinamik Renderlama: Son Kullanma Tarihi Olan Ara Çözüm

Dinamik Renderlama, Google'ın 2018'de SPA'lar için geçiş stratejisi olarak önerdiği köprüdür: Tarayıcılar önceden renderlanmış HTML versiyonu alır, gerçek kullanıcılar normal JavaScript uygulamasını. Prerender.io, Rendertron veya kendi Puppeteer kurulumu gibi araçlar bu işi üstlenir.

Dinamik Renderlama Teknik Olarak Nasıl Çalışır

  • Sunucu istek geldiğinde User-Agent'ı kontrol eder
  • Crawler bot'lar için (Googlebot, Bingbot, FacebookBot) önceden renderlanmış HTML snapshot'u sunulur
  • Normal tarayıcılar standart SPA'yı çalıştırır
  • Renderer (Headless Chrome) snapshot'ları arka planda üretir ve cache'ler

Google Neden 2024'te Dinamik Renderlamayı Workaround Olarak Tanımladı

Google 2023/2024 resmi açıklamalarında netleştirdi: Dinamik Renderlama uzun vadeli bir konsept değil. Resmi argümanlar:

  • Cloaking riski: Bot ve kullanıcılara farklı içerik sunan, içerik birbirinden saparsa Google yaptırımı riskine girer
  • Bakım yükü: Renderer kurulumları sık sık kırılır (yeni tarayıcı sürümleri, yeni JS özellikleri), fark edilmemiş indeksleme hatalarına yol açar
  • Performans: Renderer sunucusu, SSR mimarisinde hiç düşmeyecek kaynaklara mal olur

Storyable olarak Dinamik Renderlamayı yalnızca geçici köprü olarak kullanırız – örneğin büyük bir Legacy SPA'yla migre olan ve SSR'i 2. fazda devreye alan müşterilerde. Asla son durum olarak değil.

SPA'dan SSR'e geçiş mi gerekli? Mevcut JavaScript uygulamanı analiz ediyor, kritik SEO açıklarını tespit ediyor ve seninle birlikte SSR'li Nuxt veya Next.js'e dönüşümü planlıyoruz. Ranking düşüşü olmadan, ara durum testleri ve kayıpsız URL migrasyonuyla net bir göç planı alırsın.

Nuxt ile SSR Sorunu Yapısal Olarak Neden Çözer

Belirtiyi tedavi etmek yerine hastalığı baştan kurmazsın. Server-Side Rendering tam bunu yapar: JavaScript SEO sorununu kökten ortadan kaldırır, çünkü Googlebot 1. aşamada indeksleme için ihtiyacı olan her şeyi zaten görür.

Nuxt SSR'ın Detaylı Avantajları

  • İlk yanıtta tam HTML: Heading'ler, metin, görseller, Schema.org JSON-LD, Open Graph – hepsi zaten teslim edilir
  • Etkileşim için Hydration: Render sonrası JavaScript devralır ve sayfayı etkileşimli yapar – ama ilk render eksiksiz kalır
  • Schema.org out-of-the-box: nuxt-schema-org ile yapılandırılmış markup sunucu tarafında üretilir – Rich Results ve Entity SEO için kritik
  • Edge Rendering: Nuxt 3 Edge dağıtımları (Cloudflare, Vercel) destekler – HTML milisaniyeler içinde teslim edilir, Core Web Vitals kendiliğinden gelir

Nuxt'u doğru kuran sadece SEO'yu kontrol altına almaz, aynı zamanda performansı, güvenliği ve ölçeklenebilirliği eş zamanlı optimize eder. Üç sorun, tek mimari cevap.

Next.js, Remix, SvelteKit – Alternatifler

Vue ekosistemi projelerimize ideal uyduğu için Nuxt standart seçimimiz. Ama mantık her modern meta-framework için geçerli:

FrameworkStackSSR OlgunluğuEdge Desteği
Nuxt 3VueÇok yüksekVar (Cloudflare, Vercel)
Next.js 15ReactÇok yüksekVar (Vercel, AWS)
RemixReactYüksekVar (Cloudflare, Fly.io)
SvelteKitSvelteYüksekVar (Cloudflare, Vercel)
AstroMulti-StackÇok yüksek (SSG odaklı)Var

Hangi framework'ü seçtiğin ikincil. Saf bir Client-Side SPA yerine bunlardan birini seçmen birincil.

Uygulama Testi: Google Sayfanı Gerçekten Görüyor mu?

Teori yeter. İşte başka her optimizasyona dokunmadan önce her Storyable SEO audit'inde uyguladığımız üç zorunlu test.

Test 1: Google Search Console URL İncelemesi

Search Console, Google'ın fiilen ne indekslediğine dair tek güvenilir kaynaktır. İş akışı:

  1. URL'i URL incelemesine gir
  2. „Canlı URL'i test et" tıkla
  3. „Renderlanmış HTML" sekmesinde tüm içeriklerin var olup olmadığını kontrol et
  4. Ekran görüntüsünde sayfanın görsel olarak tam renderlanıp renderlanmadığını kontrol et

Renderlanmış HTML boş veya eksikse Google'ın JavaScript'inle bir sorunu vardır. Nokta.

Test 2: Render Ekran Görüntüsüyle Mobile-Friendly Test

Mobile-Friendly Test aracı (search.google.com/test/mobile-friendly) Googlebot'un renderladığı ekran görüntüsünü gösterir. Hızlı, ücretsiz, acımasızca dürüst. Header'ın orada eksikse – Googlebot da göremiyor demektir.

Test 3: JavaScript Rendering Modunda Screaming Frog

Orta ve büyük siteler için Screaming Frog (veya alternatif olarak Sitebulb) zorunlu. JS Rendering modunda araç sitenizi Googlebot gibi tarar ve gösterir:

  • Hangi URL'ler JS olmadan içeriğe sahip (iyi) vs. yalnızca JS ile (risk)
  • Hangi meta etiketler istemci tarafında üretiliyor (çoğu zaman kritik)
  • Hangi rotalar yavaş veya hiç renderlanmıyor

Tek bir tarama içinde alan adının yapısal JavaScript SEO sorunlarını görürsün. Tipik bir 5.000 URL'lik sitede audit 2 saatten kısa sürer.

Sık Audit Bulgusu

Audit'lerin %80'inde gördüğümüz klasik: Meta-Title ve Meta-Description istemci tarafında react-helmet, vue-meta veya benzeriyle ayarlanır. Ham HTML'de jenerik bir varsayılan vardır. Googlebot 1. aşamada varsayılanı indeksler. Sonuç: SERP'lerde aynı başlığa sahip yüzlerce sayfa. SSR (veya statik üretim) ile sorun tek satır kodda çözülür.

Sonuç: JavaScript SEO Var Olup Olmadığına Karar Verir

JavaScript SEO 2026'da niş değil, modern web sitesi işleten herkes için zorunlu bilgi. Saf bir SPA inşa edip Google sıralamalarını uman, kontrol etmediği bir render pipeline'ına bahse girer. İki aşamalı Googlebot, sınırlı crawl bütçesi ve büyüyen JavaScript bundle'ları Client-Side Rendering'i stratejik bir riske dönüştürür.

Üç yol kalır: Birincisi sorunu Server-Side Rendering ile kökünden çözmek – Nuxt veya Next.js 2026 endüstri standartları. İkincisi nadir değişen içerikler için Static Site Generation – sunucu yükü olmadan performans artı SEO. Üçüncüsü Dinamik Renderlama yalnızca migrasyon henüz tamamlanmadıysa köprü olarak – asla kalıcı durum olarak değil.

Storyable olarak Hannover'da görüyoruz: Uygulamasını baştan Nuxt SSR ile kuran müşteriler hiç indeksleme sorunu yaşamaz. Sonradan migre eden müşteriler 90 gün içinde çoğu zaman yeni içerik veya yeni backlink olmadan organik trafikte 2-4 katı kazanır. Bu mimaridir, pazarlama değil. JavaScript SEO'yu yok sayan, Google'ın görmediği bir dünya için optimize ediyor.

Cagri Ersöz
Cagri Ersöz

Google JavaScript uygulamanı görüyor mu – yoksa boş bir iskelet mi?

Web siteni URL incelemesi, Mobile-Friendly Test ve JS Rendering modunda Screaming Frog ile kontrol ediyoruz. Hangi rotaların indekslendiği, hangilerinin indekslenmediği konusunda net bir bulgu ve mimarinin SEO'yu engelliyorsa SSR'li Nuxt ya da Next.js'e somut göç planı alırsın.

Sıkça Sorulan Sorular

Bu konuyla ilgili en önemli soruların hızlı cevapları

JavaScript SEO nedir?+
JavaScript SEO, dinamik JavaScript içeriği olan web sitelerini, arama motorlarının güvenilir bir şekilde tarayıp renderlayıp indeksleyebileceği şekilde inşa etme disiplinidir. Klasik HTML sayfalarını Google anında okur. JavaScript uygulamaları (React, Vue, Angular) önce renderlanmalıdır – crawl bütçesi tüketen, gecikme yaratan ve birçok durumda eksik indekslemeye yol açan ek bir adım.
Google neden bazı Single Page App'leri doğru okuyamıyor?+
Klasik bir Single Page App (SPA), ilk istekte yalnızca boş bir HTML iskeleti sunar. Asıl içerik tarayıcıda JavaScript ile sonradan yüklenir. Googlebot iki aşamalı çalışır: Önce HTML'i tarar, daha sonra (genellikle günler sonra) JavaScript'i Web Rendering Service adı verilen bir hatta renderlar. Bu ikinci adım başarısız olur, takılır veya çok uzun sürerse Google yalnızca boş iskeleti görür ve sayfayı içeriksiz indeksler.
SPA, SSR ve SSG arasındaki fark nedir?+
SPA (Single Page App) her şeyi tarayıcıda renderlar – ilk HTML boştur. SSR (Server-Side Rendering) sunucuda her istekte renderlar ve eksiksiz HTML sunar. SSG (Static Site Generation) HTML'i build sırasında bir kez üretir ve CDN'den dağıtır. SEO açısından SSR ve SSG neredeyse eşit derecede mükemmeldir – SPA risk mimarisidir, çünkü tarayıcı tarafından JavaScript renderlanmasına bağlıdır.
Dinamik Renderlama nedir – kullanmalı mıyım?+
Dinamik Renderlama, web sitenin tarayıcılara önceden renderlanmış HTML versiyonu sunması (örn. Prerender.io, Rendertron veya Puppeteer ile), gerçek kullanıcılara ise normal JavaScript uygulamasını sunmasıdır. Google 2024'te Dinamik Renderlamayı „best practice
Nuxt veya Next.js ile SSR JavaScript SEO sorununu neden çözer?+
SSR ile sunucu her istekte tüm içerik, meta etiketler ve yapılandırılmış veriler dahil tam HTML'i renderlar. Googlebot ilk adımda ihtiyacı olan her şeyi alır – ikinci render geçişi yok, gecikme yok, crawl bütçesi kaybı yok. Nuxt ve Next.js SSR'yi out-of-the-box sağlar, Hydration ile birleştirir ve sunucu render'ı ile istemci etkileşimini birlikte mümkün kılar. Storyable olarak her müşteriyi tam bu yüzden Nuxt üzerine inşa ediyoruz – JavaScript SEO hiç sorun olmasın diye.
Google'ın JavaScript sayfamı görüp görmediğini nasıl test ederim?+
Üç zorunlu araç: Birincisi Google Search Console'daki URL incelemesi – Googlebot'un fiilen aldığı renderlanmış HTML kodunu burada görürsün. İkincisi renderlanmış sürümü ekran görüntüsüyle gösteren Mobile-Friendly Test aracı. Üçüncüsü JavaScript Rendering modunda Screaming Frog – tek bir crawl'da sitendeki tüm URL'leri parse eder ve ham HTML ile renderlanmış HTML arasındaki farkları gösterir. Üçünü çalıştıran her indeksleme sorununu 30 dakikadan kısa sürede görür.
İlgili Yazılar

İlgili Yazılar

Bu konu alanından diğer yazılar