JavaScript SEO Nedir, Google JavaScript Siteleri Nasıl Tarar?

Yazar: Mehmet KaramanYayın: 28 Ağu 2026Güncelleme: 9 Eyl 202619 dk Okuma

JavaScript SEO, arama motorlarının dinamik JS içeriklerini tarama, oluşturma (rendering) ve indeksleme süreçlerini optimize etme disiplinidir.

JavaScript SEO Nedir, Google JavaScript Siteleri Nasıl Tarar? için öne çıkan görsel
JavaScript SEO Nedir, Google JavaScript Siteleri Nasıl Tarar? için öne çıkan görsel

JavaScript SEO, modern web geliştirme mimarilerinde sıklıkla kullanılan dinamik betik dillerinin ve istemci taraflı teknolojilerin arama motoru standartlarına uyumlu hale getirilmesi sürecini tanımlar. Pek çok modern platform, kullanıcı deneyimini artırmak ve dinamik yapılar kurmak adına React, Angular ve Vue.js gibi popüler JavaScript framework kütüphanelerini tercih etmektedir. Ancak bu teknolojilerle inşa edilen web sayfaları, geleneksel HTML tabanlı sayfalardan farklı bir tarama ve dizine ekleme mekanizmasına tabidir. Bu rehberde, "JavaScript SEO Nedir, Google JavaScript Siteleri Nasıl Tarar?" sorusuna teknik parametreler, altyapı analizleri ve Googlebot'un modern işleme mimarisi üzerinden kapsamlı ve operasyonel yanıtlar sunuyoruz.

JavaScript SEO'nun Kurumsal Web Yapılarındaki Kritik Rolü

JavaScript'in Modern Web Geliştirmedeki Yeri

Modern web geliştirme ekosistemi, kullanıcı etkileşimini üst düzeye çıkarmak amacıyla büyük ölçüde istemci taraflı betik dillerine dayanmaktadır. Geleneksel web sitelerinde her sayfa geçişinde sunucudan yeni bir HTML belgesi talep edilirken, SPA (Single Page Application) mimarisi bu süreci tek bir sayfa yüklemesiyle çözer. React, Angular, Vue.js ve Svelte gibi popüler JavaScript framework kütüphaneleri, web sayfalarının arayüzlerini dinamik olarak güncelleyerek masaüstü uygulaması akıcılığında bir kullanıcı deneyimi sunar. Ancak bu durum, sunucudan tarayıcıya iletilen ilk verinin sadece boş bir HTML iskeletinden ibaret olmasına yol açar.

Boş iskeletin doldurulması, kullanıcının cihazında veya arama motorunun tarayıcısında (client-side) JavaScript kodlarının çalıştırılması ile gerçekleşir. Tarayıcı, harici JS dosyalarını indirir, bunları ayrıştırır ve Document Object Model (DOM Ağacı) yapısını oluşturur. İşte bu noktada geleneksel SEO ile JavaScript SEO arasındaki temel ayrım ortaya çıkar. Geleneksel SEO, statik HTML kodlarının taranması ve indekslenmesine odaklanırken; JavaScript SEO, bu karmaşık dinamik betiklerin arama motoru botları tarafından doğru bir şekilde yürütülüp yürütülemediğini kontrol eder.

Teknik karar vericiler ve işletme yöneticileri için bu mimari değişim, tarama süreçlerinin ek işlem maliyetleri doğurması anlamına gelir. Sunucu yükünü hafifleten ve kullanıcı arayüzünü hızlandıran bu yapı, arama motorlarının tarama bütçesi (crawl budget) optimizasyonunu zorlaştırmaktadır. Web sitenizin altyapısı bu dinamik süreçleri arama motorlarının algılayabileceği şekilde sunamazsa, yazılım yatırımları arama sonuçlarında görünmez hale gelerek ticari kayba yol açabilir.

Yanlış Yapılandırmanın Ticari Sonuçları

Kurumsal ölçekteki e-ticaret siteleri, SaaS platformları ve dinamik içerik portalları için JavaScript SEO hataları telafisi zor finansal kayıplara yol açar. Örneğin, ürün listeleme sayfalarında ürünlerin ve fiyat bilgilerinin yalnızca istemci tarafında (CSR) asenkron API çağrıları ile yüklendiği bir senaryoda, arama motoru botları sayfayı ziyaret ettiğinde sadece boş bir şablonla karşılaşabilir. Googlebot, sayfa kaynağında ürün bilgilerini ve fiyatları göremediğinde, bu sayfaları değersiz veya içeriği eksik olarak sınıflandırabilir.

Bu tür yapılandırma hataları, organik arama trafiğinde ani düşüşlere, dönüşüm oranlarının azalmasına ve müşteri edinme maliyetlerinin (CAC) kontrolsüz şekilde yükselmesine neden olur. Bir markanın dijital pazarlama bütçesinin büyük kısmı organik görünürlüğe dayanırken, teknik SEO hataları nedeniyle arama motorlarından gelen trafiğin kesilmesi, doğrudan satış gelirlerini baltalar. Ayrıca, veri gizliliği (GDPR/KVKK) ve güvenlik standartlarına uyum sağlamaya çalışırken JavaScript ile kurulan katı engeller, Googlebot'un siteyi taramasını tamamen kilitleyebilir.

Teknik ekipler ile pazarlama ekipleri arasındaki iletişim kopukluğu, bu ticari zararları derinleştirir. Yazılımcılar genellikle en güncel JavaScript kütüphanelerini performans odaklı kullanmayı hedeflerken, bu kodların arama motorları tarafından nasıl işlendiğini analiz etmeyi göz ardı edebilirler. Sonuçta, harika bir kullanıcı arayüzüne sahip olan ancak Google dizinlerine giremeyen, görünmez ve dolayısıyla ticari katma değer üretmeyen dijital ürünler ortaya çıkar.

Arama Motoru Görünürlüğüne Olası Etkileri

Arama motoru görünürlüğü, web sitenizin dizine eklenme hızı ve sıralama performansı ile doğrudan ilişkilidir. JavaScript tabanlı web sayfalarında, arama motorlarının içeriği algılaması iki aşamalı bir süreçle gerçekleştiği için "Dizine ekleme gecikmesi" adı verilen bir durum ortaya çıkar. Googlebot, sayfayı ilk ziyaret ettiğinde statik HTML'i alır ve hemen indeksler. Ancak JavaScript ile oluşturulan dinamik içeriklerin dizine eklenmesi, Web Rendering Service (WRS) adı verilen oluşturma servisinin müsait olmasına ve sayfayı tam olarak render etmesine kadar ertelenir.

Bu erteleme süresi, sitenin popülaritesine ve tarama bütçesine bağlı olarak birkaç saatten birkaç haftaya kadar uzayabilir. Özellikle sık güncellenen haber siteleri, döviz kuru platformları veya anlık stok değişiminin yaşandığı e-ticaret sitelerinde bu gecikme, güncel bilgilerin arama motoru sonuç sayfalarında (SERP) gösterilememesine yol açar. Bu durum, zaman duyarlı içeriklerin hedef kitleye ulaşamadan eskimesine neden olarak organik görünürlüğü olumsuz etkiler.

Görünürlük üzerindeki diğer bir olumsuz etki ise arama motorlarının link ağını takip edememesidir. JavaScript ile üretilen ve DOM üzerinde düzgün bir biçimde yapılandırılmayan iç yönlendirmeler, Googlebot'un sitenin derinliklerine inmesini engeller. A href etiketleri yerine kullanılan Javascript yönlendirme kodları, Googlebot tarafından taranamaz. Bu da yetersiz taranabilirlik (crawlability) nedeniyle birçok değerli sayfanın yetim sayfa (orphan page) durumuna düşmesine ve asla dizine eklenememesine yol açar.

Googlebot JavaScript'i Nasıl İşler? (Üç Aşamalı Mimari)

1. Tarama (Crawling) ve Tarama Kuyruğu

Googlebot smartphone veya masaüstü botu, bir URL'i ziyaret ettiğinde ilk olarak HTTP protokolü üzerinden sunucuya istek gönderir ve ham HTML yanıtını indirir. Geleneksel HTML sitelerinde bu ilk yanıt, sayfanın tüm içeriğini, başlıklarını ve linklerini barındırır. Googlebot bu veriyi anında işleyerek dizine ekleme motoruna gönderir. Ancak JavaScript tabanlı bir web mimarisinde (örneğin ham React kurulumu), sunucudan dönen HTML dosyası neredeyse tamamen boştur ve yalnızca <div id="root"> gibi bir kapsayıcı ile harici JS dosyalarına referans veren <script> etiketlerini içerir.

Googlebot, ham HTML'deki bağlantıları (A href etiketleri) tespit ederek bunları "Tarama kuyruğu (Crawl queue)" havuzuna gönderir. Ancak sayfanın asıl içeriği JavaScript dosyalarının yürütülmesine bağlı olduğu için, Googlebot bu sayfayı hemen dizine ekleyemez. Sayfa, işlemci (CPU) gücü gerektiren JavaScript çalıştırma işlemi için "Oluşturma kuyruğuna" (Render queue) alınır. Bu durum, statik sayfalara kıyasla ek bir işlem adımı ve zaman maliyeti yaratır.

Oluşturma kuyruğundaki bekleme süresi, Google'ın sunucu kaynaklarının uygunluğuna ve sitenizin tarama bütçesine göre değişiklik gösterir. Googlebot, milyarlarca web sayfasını işlerken elektrik ve donanım maliyetlerini minimize etmek adına bu kuyruğu dinamik olarak yönetir. Bu nedenle, teknik altyapısı optimize edilmemiş JavaScript sitelerinin güncellenen içerikleri, Google dizinlerinde saatler hatta günler sonra güncellenebilir.

2. Oluşturma (Rendering) ve Web Rendering Service (WRS)

Oluşturma sırası gelen web sayfası, Google'ın Web Rendering Service (WRS) adlı alt yapısına aktarılır. WRS, temelde modern bir tarayıcı gibi çalışan ve her zaman en güncel Chrome sürümünü kullanan Headless Chromium tabanlı bir motordur. WRS'in görevi; HTML'i ayrıştırmak, ilişkili harici JavaScript dosyalarını ve CSS kodlarını indirmek, ardından API uç noktalarından gelen dinamik verileri çekerek sayfayı görsel ve işlevsel olarak oluşturmaktır.

WRS aşamasında en büyük zorluk "Oluşturma süresi (Render time)" sınırlandırmaları ve zaman aşımı (timeout) süreleridir. Googlebot, bir sayfanın JavaScript kodlarını yürütmek için sınırsız bir süreye sahip değildir. Eğer web sitenizin JS dosyalarını indirmek, çalıştırmak ve harici veritabanı API'lerinden yanıt almak çok uzun sürüyorsa, WRS yürütme işlemini sonlandırır. Genellikle bu sınır birkaç saniye ile sınırlıdır. Zaman aşımı gerçekleştiğinde, sayfa eksik verilerle veya tamamen boş bir şekilde oluşturularak dizine gönderilir.

Ayrıca WRS, kullanıcı etkileşimini (tıklama, kaydırma, form doldurma) taklit etmez. Bu sebeple, yalnızca kullanıcının kaydırma hareketiyle (scroll) tetiklenen gecikmeli yükleme (lazy loading) mekanizmaları veya tıklama ile açılan akordeon menülerin içindeki veriler WRS tarafından tetiklenmeyebilir. Kod tabanının ve harici API entegrasyonlarının hızı, WRS'in sayfayı eksiksiz render edebilmesi için hayati önem taşır.

3. Dizine Ekleme (Indexing) ve DOM Analizi

WRS süreci başarıyla tamamlandıktan sonra, JavaScript kodlarının tarayıcı üzerinde yürütülmesiyle oluşan nihai yapı olan Document Object Model (DOM Ağacı) elde edilir. Dizine ekleme motoru (Indexing Engine), bu nihai DOM yapısını analiz eder. Metin içerikleri, yapılandırılmış veriler (schema markup), meta etiketler ve sayfa içi yönlendirmeler bu aşamada okunarak Google dizinine (index) kaydedilir.

Bu süreç, "Sayfa kaynağını görüntüle (View page source)" ile "Öğeyi incele (Inspect element)" arasındaki farkı net bir şekilde ortaya koyar. Tarayıcınızda "Sayfa kaynağını görüntüle" dediğinizde sunucudan gelen ham HTML'i görürsünüz. Eğer dinamik bir JS yapısı kullanıyorsanız burada aradığınız içeriği bulamayabilirsiniz. "Öğeyi incele" seçeneği ise yerel tarayıcınız tarafından render edilmiş, yani DOM Ağacı'na dönüştürülmüş güncel kodu gösterir. Googlebot'un dizine eklediği son sürüm, işte bu "Öğeyi incele" kısmında gördüğünüz güncel DOM yapısıdır.

Ancak unutulmamalıdır ki, Google dışındaki diğer arama motorlarının (Bing, Yandex, Baidu vb.) JavaScript işleme kapasiteleri Google kadar gelişmiş değildir. Özellikle global bir pazarı hedefliyorsanız ve diğer arama motorlarından da organik trafik elde etmek istiyorsanız, salt istemci taraflı JavaScript oluşturma (CSR) modeline güvenmek büyük bir risk taşır. Bu durum, mimari seçimlerin SEO stratejisindeki rolünü ön plana çıkarmaktadır.

Mimari Seçimler: Rendering Yöntemleri ve SEO Riskleri

Client-Side Rendering (CSR): Neden Temkinli Yaklaşılmalıdır?

İstemci tarafı oluşturma (Client-side rendering), uygulamanın tüm arayüz mantığının ve veri çekme işlemlerinin kullanıcının tarayıcısında yürütüldüğü modeldir. Sunucu yalnızca temel bir HTML şablonu ve JavaScript paketini (bundle) gönderir. CSR, kullanıcı deneyimi açısından son derece akıcı geçişler sunsa da, teknik SEO açısından en riskli mimaridir. Googlebot'un WRS kuyruğunda beklemek zorunda kalması, dizine ekleme gecikmesini maksimum seviyeye çıkarır.

CSR mimarisinde yaşanan en büyük sorunlardan biri, JavaScript kodlarında meydana gelebilecek küçük bir syntax hatasının (unhandled exception) tüm sayfanın render edilmesini durdurabilmesidir. Eğer tarayıcı veya Googlebot'un WRS ünitesi bir hata nedeniyle kodu çalıştıramazsa, kullanıcılar ve botlar boş beyaz bir ekranla karşılaşır. Ayrıca, büyük JS paketlerinin mobil cihazlarda indirilmesi ve çalıştırılması ciddi CPU gücü gerektirdiğinden Core Web Vitals performans metrikleri (özellikle LCP ve INP) olumsuz etkilenir.

Eğer kurumsal bir e-ticaret siteniz veya geniş bir içerik ağınız varsa, saf CSR mimarisini kullanmaktan kaçınmalısınız. CSR ancak üyelik panelleri, yönetim panelleri (dashboard) gibi arama motoru indekslemesine ihtiyaç duymayan, şifre korumalı özel alanlar için uygun bir seçenektir. Kamu açık ve organik trafik hedefleyen sayfaların doğrudan CSR ile sunulması, dijital görünürlüğünüzü tehlikeye atar.

Server-Side Rendering (SSR): Arama Motorları İçin En Güvenli Liman

Sunucu tarafı oluşturma (Server-side rendering), kullanıcının veya arama motorunun her sayfa isteğinde, ilgili sayfanın HTML yapısının sunucuda dinamik olarak oluşturulup istemciye gönderilmesi yöntemidir. Next.js, Nuxt.js veya Angular Universal gibi modern framework çözümleri bu mimariyi destekler. SSR modelinde sunucu, veritabanı sorgularını ve API çağrılarını kendisi tamamlar, içeriği HTML'e yerleştirir ve tamamen hazır bir belgeyi Googlebot'a teslim eder.

Bu yöntem, arama motorlarının tarama ve indeksleme süreçlerini mükemmel şekilde kolaylaştırır. Googlebot, sayfayı ziyaret ettiği ilk mikrosaniyede tüm metinleri, başlıkları ve linkleri okuyabilir. WRS kuyruğunda beklemek zorunda kalmaz, dizine ekleme gecikmesi yaşanmaz. Bu durum, özellikle anlık stok güncellemeleri yapan e-ticaret siteleri, fiyat karşılaştırma motorları ve haber portalları için vazgeçilmez bir teknik SEO standardıdır.

Bununla birlikte, SSR mimarisinin de kendine özgü zorlukları vardır. Sunucu, her kullanıcı isteği için sayfayı sıfırdan oluşturduğundan, yüksek trafik anlarında sunucu yükü (TTFB - Time to First Byte) artabilir. Bu durum, güçlü bir sunucu altyapısı ve gelişmiş önbellekleme (caching) mekanizmalarının kurulmasını zorunlu kılar. Doğru bir CDN (Content Delivery Network) ve Redis gibi önbellekleme katmanlarıyla desteklenen SSR, teknik SEO için en ideal çözümdür.

Dynamic Rendering (Dinamik Oluşturma): Geçici Bir Çözüm mü?

Dinamik oluşturma (Dynamic Rendering), web sunucusunun gelen isteğin kaynağına göre farklı yanıtlar vermesi prensibine dayanır. Eğer istek sıradan bir kullanıcıdan geliyorsa sunucu standart CSR (JavaScript tabanlı) kodlarını gönderir. Ancak istek bir arama motoru botundan (Googlebot, Bingbot vb.) geliyorsa, sunucu isteği Puppeteer veya Prerender.io gibi bir ön oluşturma (pre-rendering) servisine yönlendirerek, botlara JavaScript'ten arındırılmış, tamamen statik bir HTML belgesi sunar.

Google, geçmiş yıllarda karmaşık JavaScript sitelerinin taranabilmesi için bu yöntemi geçici bir çözüm olarak önermiş ve desteklemiştir. Ancak günümüzde Googlebot'un WRS altyapısının gelişmesiyle birlikte, dinamik oluşturma yöntemi tavsiye edilen bir standart olmaktan çıkmıştır. Google, bu yöntemin uzun vadede sürdürülebilir olmadığını, teknik karmaşıklığı artırdığını ve sunucu yönetiminde hatalara yol açabileceğini belirtmektedir.

Ayrıca dinamik oluşturma, "Cloaking" (Arama motorlarına farklı, kullanıcılara farklı içerik gösterme) riskini beraberinde getirir. Botlara sunulan statik sürüm ile kullanıcılara sunulan dinamik sürüm arasında içerik veya link bazında tutarsızlıklar oluşursa, siteniz arama motorları tarafından cezalandırılabilir (manuel işlem). Bu nedenle, dinamik oluşturma yöntemi yalnızca SSR veya SSG mimarisine geçişin teknik olarak imkansız olduğu devasa miras (legacy) sistemler için geçici bir geçiş stratejisi olarak düşünülmelidir.

Static Site Generation (SSG): Performans ve SEO Optimizasyonu

Statik site üretimi (Static Site Generation), web sayfalarının kodlama ve derleme (build) aşamasında tamamen statik HTML dosyalarına dönüştürülmesi sürecidir. Next.js, Hugo, Gatsby ve Jekyll gibi modern araçlar, projenin derlenmesi esnasında tüm veritabanı isteklerini tamamlar ve her bir URL için fiziksel birer HTML dosyası oluşturur. Bu dosyalar doğrudan bir CDN üzerinden milisaniyeler içinde kullanıcılara ve botlara servis edilir.

SSG mimarisi, Core Web Vitals metrikleri açısından olağanüstü sonuçlar verir. Sunucu tarafında anlık bir render işlemi yapılmadığı için ilk yanıt süresi (TTFB) minimum seviyeye iner. Googlebot, sayfa kaynağını anında indirir ve saniyeler içinde dizine ekler. Ayrıca sunucu çökmesi veya veritabanı bağlantı hataları gibi dinamik riskler tamamen ortadan kalktığı için sitenin taranabilirliği (crawlability) maksimum güvenliğe ulaşır.

SSG'nin temel kısıtlaması ise dinamik içeriklerin ve sık değişen verilerin yönetimindedir. On binlerce ürünü olan bir e-ticaret sitesinde her fiyat veya stok değişiminde tüm sitenin yeniden derlenmesi (rebuild) saatler sürebilir. Bu sorunu çözmek için Next.js'in sunduğu ISR (Incremental Static Regeneration - Kademeli Statik Yeniden Oluşturma) gibi karma yaklaşımlar tercih edilmelidir. ISR, belirli sayfaların statik olarak kalmasını sağlarken, arka planda sadece güncellenen sayfaların önbelleğini yenileyerek hem SSG performansını hem de dinamik veri güncelliğini bir arada sunar.

KriterClient-Side Rendering (CSR)Server-Side Rendering (SSR)Static Site Generation (SSG)Dynamic Rendering
Dizine Ekleme HızıYavaş (WRS kuyruğuna bağlı)Çok Hızlı (Anında)Çok Hızlı (Anında)Hızlı (Pre-render durumuna bağlı)
Sunucu YüküÇok Düşük (İstemci odaklı)Yüksek (Her istekte render)Sıfır (Statik dosya sunumu)Orta (Pre-renderer sunucu maliyeti)
İlk Yükleme Hızı (FCP)Yavaş (Büyük JS dosyaları)Hızlı (Hazır HTML)Mükemmel (Optimize statik)Hızlı (Botlar için optimize)
Bakım / Uygulama MaliyetiDüşükOrta-YüksekDüşük-OrtaYüksek (Ayrı pre-render sunucusu)
SEO Uyumluluk DerecesiDüşükÇok YüksekÇok YüksekOrta (Geçici çözüm olarak önerilir)

Dizine Ekleme Hızı

Client-Side Rendering (CSR)

Yavaş (WRS kuyruğuna bağlı)

Server-Side Rendering (SSR)

Çok Hızlı (Anında)

Static Site Generation (SSG)

Çok Hızlı (Anında)

Dynamic Rendering

Hızlı (Pre-render durumuna bağlı)

Sunucu Yükü

Client-Side Rendering (CSR)

Çok Düşük (İstemci odaklı)

Server-Side Rendering (SSR)

Yüksek (Her istekte render)

Static Site Generation (SSG)

Sıfır (Statik dosya sunumu)

Dynamic Rendering

Orta (Pre-renderer sunucu maliyeti)

İlk Yükleme Hızı (FCP)

Client-Side Rendering (CSR)

Yavaş (Büyük JS dosyaları)

Server-Side Rendering (SSR)

Hızlı (Hazır HTML)

Static Site Generation (SSG)

Mükemmel (Optimize statik)

Dynamic Rendering

Hızlı (Botlar için optimize)

Bakım / Uygulama Maliyeti

Client-Side Rendering (CSR)

Düşük

Server-Side Rendering (SSR)

Orta-Yüksek

Static Site Generation (SSG)

Düşük-Orta

Dynamic Rendering

Yüksek (Ayrı pre-render sunucusu)

SEO Uyumluluk Derecesi

Client-Side Rendering (CSR)

Düşük

Server-Side Rendering (SSR)

Çok Yüksek

Static Site Generation (SSG)

Çok Yüksek

Dynamic Rendering

Orta (Geçici çözüm olarak önerilir)

JavaScript SEO'da Sık Yapılan Hatalar ve Ağır Sonuçları

JavaScript tabanlı sitelerde geliştiricilerin en sık düştüğü hataların başında, standart dışı HTML elementleri kullanarak bağlantılar (linkler) oluşturmak gelir. Geleneksel web standartlarında bir sayfanın taranabilmesi için yönlendirmelerin <a href="..."> formatında olması zorunludur. Ancak modern JavaScript framework ekosisteminde, sayfa geçişlerini hızlandırmak veya buton tasarımlarını kolaylaştırmak amacıyla sıklıkla <button onclick="..."> veya <span onclick="location.href=&#39;...&#39;"> gibi dinamik tetikleyiciler kullanılır.

Googlebot ve diğer arama motoru botları, sayfa üzerindeki butonlara tıklamaz, formları doldurmaz veya kaydırma dışındaki karmaşık kullanıcı etkileşimlerini simüle etmez. Dolayısıyla, standart a href etiketleri içermeyen tüm dinamik yönlendirmeler Googlebot için birer çıkmaz sokaktır. Bot, bu yönlendirmelerin arkasındaki sayfaları keşfedemez. Bu durum, iç link yapısının (internal linking) tamamen çökmesine ve değerli alt sayfaların indeks dışında kalmasına neden olur.

Benzer şekilde, asenkron yüklenen içeriklerin (örneğin kullanıcı bir sekmeye tıkladığında API'den çekilen veriler) DOM üzerinde ilk yüklemede hazır bulunmaması, bu verilerin arama motoru tarafından taranamamasına yol açar. Eğer bir içeriğin taranmasını ve sıralama almasını istiyorsanız, o içeriğin herhangi bir kullanıcı etkileşimi (tıklama vb.) gerektirmeksizin DOM Ağacı üzerinde hazır bulunduğundan emin olmalısınız.

Tarama Bütçesinin (Crawl Budget) Verimsiz Tüketimi

Tarama bütçesi (Crawl budget), Googlebot'un bir web sitesini ziyaret ettiğinde tarayacağı ve indeksleyeceği maksimum sayfa sayısı ve harcayacağı zaman dilimidir. JavaScript tabanlı siteler, statik sitelere göre katbekat daha fazla tarama bütçesi tüketir. Bunun nedeni, botun sadece HTML dosyasını indirmekle kalmayıp, megabaytlarca büyüklükteki JavaScript dosyalarını indirmek, ayrıştırmak ve çalıştırmak zorunda olmasıdır.

Eğer projenizde kod bölme (code splitting) uygulanmadıysa ve tek bir devasa JavaScript paketi (main bundle) tüm sayfalarda yükleniyorsa, Googlebot her basit sayfayı taramak için bu devasa dosyayı tekrar tekrar işlemek zorunda kalır. Bu durum, WRS üzerinde aşırı yük yaratır ve tarama bütçesinin çok hızlı tükenmesine neden olur. Sonuç olarak, sitenize eklediğiniz yeni ürünler veya güncellediğiniz içerikler haftalarca taranmadan bekleyebilir.

Ayrıca, yavaş çalışan harici API servisleri de tarama bütçesini sabote eder. JavaScript kodunuz, verileri çekmek için yavaş bir üçüncü parti API'ye bağımlıysa ve bu API'nin yanıt süresi 3 saniyenin üzerindeyse, Googlebot render işlemini beklemeden sayfayı terk edecektir. Bu durum hem bütçenin boşa harcanmasına hem de sayfanın Google dizininde boş veya hatalı görünmesine yol açar.

Hatalı Yönlendirmeler ve İstemci Taraflı 404 Hataları

Tek sayfa uygulamalarında (SPA), tarayıcı sunucuya gitmeden yönlendirmeleri kendi içinde (client-side routing) çözer. Bu durum, var olmayan veya silinmiş bir sayfaya gidildiğinde ciddi bir SEO sorunu yaratır. Normal şartlarda, silinen bir URL için sunucunun doğrudan 404 durum kodu dönmesi gerekir. Ancak SPA yapılarında sunucu her durumda 200 durum koduyla ana HTML şablonunu döner; ardından istemci tarafındaki JavaScript (örneğin React Router) URL'i kontrol eder ve sayfa bulunamadıysa ekrana "404 Sayfa Bulunamadı" içeriğini basar.

Bu durum, arama motorları için "Soft 404" (Yumuşak 404) olarak adlandırılan büyük bir karmaşaya neden olur. Googlebot, HTTP durum kodunu 200 olarak gördüğü için bu sayfayı geçerli ve çalışan bir sayfa olarak kabul eder ve dizine eklemeye çalışır. Ancak sayfa içeriğinde "Sayfa Bulunamadı" yazdığı için, algoritma bunu düşük kaliteli veya hatalı içerik olarak sınıflandırır. Binlerce silinmiş ürünün bu şekilde 200 koduyla taranması, sitenin genel kalite puanını düşürür ve tarama bütçesini tamamen tüketir.

Bu sorunun kesin çözümü, yönlendirme ve hata durumlarının sunucu seviyesinde (SSR katmanında) ele alınmasıdır. Eğer bir URL kalıcı olarak silindiyse sunucu doğrudan 404 veya başka bir adrese kalıcı olarak yönlendirildiyse 301 HTTP durum kodunu vermelidir. İstemci tarafında Javascript ile yapılan görsel "404" tasarımları arama motorlarını manipüle etmekle eşdeğer sonuçlar doğurabilir.

JS Tabanlı Siteler İçin Denetim ve Doğrulama Araçları

Google Search Console ile URL Denetimi

Google Search Console, JavaScript SEO optimizasyonunun doğruluğunu kontrol etmek için en birincil ve en güvenilir kaynaktır. Panelde yer alan "URL Denetimi" aracı, taranmış olan bir sayfanın Google dizinindeki mevcut durumunu gösterdiği gibi, "Canlı URL'yi Test Et" seçeneğiyle sayfanın o anki durumunu gerçek zamanlı olarak analiz etmenizi sağlar. Canlı test tamamlandığında, Googlebot'un sayfayı nasıl render ettiğini gösteren ekran görüntüsüne (Screenshot) ve oluşturulan DOM koduna ulaşabilirsiniz.

"Kodu Görüntüle" sekmesinde yer alan HTML çıktısını inceleyerek, sunucuda veya istemci tarafında yüklenmesini beklediğiniz kritik metinlerin, başlıkların ve en önemlisi iç linklerin bu kodun içinde yer alıp almadığını kontrol etmelisiniz. Eğer kritik bir içerik veya menü bağlantısı bu canlı render çıktısında görünmüyorsa, JavaScript kodunuzda bir hata var demektir veya Googlebot harici JS/CSS kaynaklarınıza erişemiyor demektir.

Aynı ekranda bulunan "Daha Fazla Bilgi" sekmesi altındaki "Sayfa Kaynakları" bölümü, Googlebot'un sayfayı oluştururken yükleyemediği dosyaları listeler. Eğer burada kritik bir JavaScript dosyası veya API uç noktası "Engellendi" veya "Yüklenemedi" olarak görünüyorsa, robots.txt dosyanızın bu kaynakları engelleyip engellemediğini kontrol etmelisiniz. Googlebot'un sitenizi doğru render edebilmesi için tüm kritik CSS, JS ve API kaynaklarına erişim izni olmalıdır.

Zengin Sonuçlar Testi ve Mobil Uyumluluk Raporları

JavaScript tabanlı web sitelerinde schema (yapılandırılmış veri) işaretlemeleri genellikle dinamik olarak enjekte edilir. Örneğin, bir ürünün fiyatı veya stok durumu API'den geldikten sonra JSON-LD formatındaki schema kodu DOM'a eklenir. Google'ın "Zengin Sonuçlar Testi" (Rich Results Test) aracı, bu dinamik olarak oluşturulan yapılandırılmış verilerin Googlebot tarafından okunup okunamadığını doğrulamak için mükemmel bir araçtır.

URL'inizi bu araca gönderdiğinizde, sistem sayfayı tamamen render eder ve bulduğu tüm schema yapılarını (Product, Article, FAQ, Breadcrumb vb.) listeler. Eğer schema kodlarınız sadece sayfa kaynağında (View Page Source) yoksa ancak Zengin Sonuçlar Testi'nde başarıyla yeşil renkle listeleniyorsa, Googlebot'un bu verileri başarıyla algıladığından emin olabilirsiniz. Ancak test sırasında "Hata" veya "Uyarı" alıyorsanız, JavaScript yürütülmeden önce veya yürütülürken veri biçimlendirmesinde bir çakışma yaşanıyor olabilir.

Mobil Uyumluluk Raporları da benzer şekilde WRS'in sayfayı dikey mobil ekran boyutlarında nasıl render ettiğini gösterir. JavaScript hataları nedeniyle mobil görünümde kaymalar, üst üste binen elementler veya tıklanamayacak kadar küçük butonlar oluşursa, bu durum mobil öncelikli indeksleme (Mobile-First Indexing) çağrısında sitenizin sıralama kaybetmesine yol açar.

Chrome Geliştirici Araçları (DevTools) ile DOM İncelemesi

Yerel tarayıcınızda yer alan Chrome DevTools, JavaScript SEO hatalarını anında teşhis etmek için son derece güçlü bir laboratuvardır. İlk olarak, "Öğeyi İncele" (Inspect Element) paneli ile "Sayfa Kaynağını Görüntüle" (View Page Source) çıktılarını yan yana koyarak karşılaştırmalısınız. Kaynak kodda olmayan ancak "Öğeyi İncele" kısmında var olan her element, tarayıcınızın JavaScript'i başarıyla çalıştırdığının kanıtıdır.

Bir diğer kritik test ise tarayıcıda JavaScript'i tamamen devre dışı bırakarak sayfayı yenilemektir. Bunu yapmak için Chrome DevTools açıkken Ctrl+Shift+P (Mac için Cmd+Shift+P) tuş kombinasyonuna basıp "Disable JavaScript" komutunu çalıştırabilirsiniz. Sayfayı bu şekilde yenilediğinizde siteniz hala okunabilir durumdaysa, menüler ve temel linkler görünür kalıyorsa, SEO açısından çok güvenli bir hibrit/SSR altyapısına sahipsiniz demektir. Ancak ekran tamamen boşalıyorsa, siteniz tamamen CSR bağımlıdır ve Google dışındaki botlar için taranamayacak durumdadır.

Son olarak, "Network" (Ağ) sekmesini açarak sayfa yüklenirken yapılan harici API çağrılarının sürelerini ve durum kodlarını incelemelisiniz. 500ms'den uzun süren API istekleri, Googlebot'un zaman aşımı limitlerine takılma riskini artırır. Console (Konsol) sekmesinde kırmızı renkle görünen JavaScript hata logları da WRS'in çalışmasını engelleyebilecek yazılımsal hataların tespit edilmesini kolaylaştırır.

Modern JavaScript Framework'leri İçin Performans ve Core Web Vitals Optimizasyonu

Görünmez İçerik (Hidden Content) ve Gecikmeli Yükleme (Lazy Loading) Sorunları

Web sayfalarının yüklenme hızını artırmak için resimlerin ve videoların gecikmeli yüklenmesi (lazy loading) yaygın bir performans tekniğidir. Ancak geleneksel JavaScript tabanlı lazy loading kütüphaneleri, görsel öğeleri ancak kullanıcı ekranı aşağı kaydırdığında (scroll event) yükler. Googlebot, sayfayı ziyaret ettiğinde scroll hareketini simüle etmediği için, bu kütüphaneler tarafından gizlenen görseller bot tarafından asla algılanamaz ve Google Görseller (Google Images) dizinine eklenemez.

Bu sorunun modern çözümü, tarayıcıların yerel olarak desteklediği loading="lazy" özniteliğini kullanmaktır. Yerel lazy loading kullanımı hem harici bir JavaScript kütüphanesine olan bağımlılığı ortadan kaldırır hem de Googlebot'un bu görselleri kaydırma hareketi yapmadan da tarayabilmesini garanti altına alır. Ayrıca, asıl görsel URL'inin her zaman src özniteliğinde bulunması, data-src gibi geçici özniteliklerin sadece destekleyici olarak kullanılması kritik bir gerekliliktir.

Akoronlar, sekmeli alanlar (tabs) veya "Devamını Oku" butonlarının arkasına gizlenen metinsel içerikler de benzer bir risk taşır. Eğer bu gizli içerikler sayfa ilk yüklendiğinde DOM Ağacı'na eklenmiş ancak sadece CSS (display: none) ile gizlenmişse Googlebot bunları sorunsuz şekilde okur. Ancak kullanıcı tıklamadığı sürece DOM'a hiç yüklenmeyen, yani dinamik olarak sadece tıklama anında oluşturulan içerikler Google tarafından taranamaz ve indekslenemez.

Oluşturmayı Engelleyen Kaynaklar (Render-blocking Resources) ve Asenkron Yükleme

Büyük boyutlu JavaScript dosyaları, tarayıcının HTML kodlarını yukarıdan aşağıya doğru okurken duraklamasına neden olur. Tarayıcı bir <script> etiketiyle karşılaştığında, o dosyayı indirip çalıştırana kadar sayfanın geri kalanını render etmeyi durdurur. Bu durum "Oluşturmayı engelleyen kaynaklar" olarak bilinir ve sitenizin LCP (Largest Contentful Paint) yani en büyük zengin içerikli boyama süresini ciddi şekilde uzatır.

Bu engeli aşmak için kritik olmayan tüm JavaScript dosyaları async veya defer öznitelikleriyle yüklenmelidir:

  • Async (Asenkron Yükleme): Tarayıcı, HTML'i okumaya devam ederken JS dosyasını arka planda indirir. Dosya indiği anda HTML ayrıştırmasını durdurur ve JS'i çalıştırır. Sıralama bağımsız çalışan bağımsız scriptler (örneğin Google Analytics) için uygundur.

  • Defer (Gecikmeli Yükleme): Script arka planda indirilir ancak HTML ayrıştırması tamamen bittikten sonra çalıştırılır. Dosyaların sırayla çalıştırılması gereken ve sayfa yapısını etkileyen ana JS paketleri için en güvenli yöntemdir.

Ayrıca, kritik CSS ve JavaScript kodlarının satır içi (inline) olarak doğrudan HTML belgesinin <head> bölümüne yerleştirilmesi, sayfanın ilk görsel tepkiyi verme süresini kısaltarak Core Web Vitals performans puanlarınızı yukarı taşır.

Web Rendering Service Yükünü Azaltacak Kod Bölme (Code Splitting) Teknikleri

Kod bölme (Code splitting), modern paketleyiciler (Webpack, Vite, Turbopack) aracılığıyla tüm web uygulamasının tek bir devasa JS dosyası yerine, sadece ilgili sayfalarda ihtiyaç duyulan küçük parçalara (chunks) bölünmesi işlemidir. Örneğin, sadece iletişim sayfasında kullanılan bir harita kütüphanesinin veya form doğrulama paketinin, ana sayfada veya ürün sayfalarında yüklenmesi engellenir.

Kod bölme, WRS'in üzerindeki işlemci yükünü dramatik şekilde azaltır. Googlebot bir ürün sayfasını ziyaret ettiğinde, megabaytlarca gereksiz kodu işlemek zorunda kalmaz; yalnızca o ürün sayfasını oluşturmaya yetecek minimum kod parçasını indirir. Bu durum hem "Oluşturma süresi (Render time)" sınırlarına takılma riskini ortadan kaldırır hem de tarama bütçenizi koruyarak sitenizin indekslenme hızını optimize eder.

Next.js gibi modern framework'ler, dinamik import (import()) fonksiyonları sayesinde bu süreci otomatik olarak yönetir. Teknik ekiplerin bu tür kod bölme mekanizmalarını kurumsal web mimarilerine entegre etmesi, sürdürülebilir bir teknik SEO başarısının ve yüksek kullanıcı deneyiminin (Core Web Vitals) en temel anahtarıdır.

Sıkça Sorulan Sorular

JavaScript kullanımı sitenin SEO performansını düşürür mü?

Doğrudan düşürmez, ancak yanlış yapılandırıldığında gecikmeli dizine ekleme ve tarama bütçesi kayıplarına yol açabilir. Sunucu taraflı oluşturma (SSR) veya statik site üretimi (SSG) gibi SEO dostu mimariler tercih edildiğinde performans kaybı yaşanmaz.

Sayfa kaynağında (View Page Source) görünmeyen metinler dizine eklenir mi?

Evet, Googlebot'un Web Rendering Service (WRS) katmanı JavaScript'i işledikten sonra Document Object Model (DOM) üzerinde oluşan metinleri okuyup dizine ekleyebilir. Ancak bu işlem tarama kuyruğuna girdiğinden dizine ekleme süresi uzayabilir.

Single Page Application (SPA) mimarisi Google tarafından tam olarak anlaşılır mı?

Googlebot SPA mimarilerini işleyebilir; ancak sayfa geçişleri ve dinamik rotalar doğru "a href" yönlendirmeleriyle kurulmadığında veya URL yapıları düzgün yönetilmediğinde iç sayfalara ulaşmakta ve taramakta zorluk yaşar.

Googlebot her JavaScript kodunu ve harici API isteğini çalıştırır mı?

Hayır, Googlebot'un harici kaynakları ve API'leri yüklemesi için belirli bir bütçesi ve zaman aşımı (timeout) sınırı vardır. Çok geç yanıt veren veya robots.txt ile engellenmiş olan API istekleri çalıştırılamaz, bu da içeriğin eksik taranmasına neden olur.

JavaScript SEO uyumluluğunu test etmek için en güvenilir araç hangisidir?

Google Search Console içerisindeki "URL Denetimi" aracı ve canlı test özelliği en güvenilir araçtır. Bu araç, Googlebot'un sayfayı taradıktan sonra oluşturduğu gerçek DOM çıktısını ve yükleyemediği kaynakları doğrudan raporlar.

İstemci taraflı (Client-Side Rendering) sitelerde soft 404 hatası nedir?

Sayfa sunucu seviyesinde 200 durum kodu döndürürken, JavaScript aracılığıyla kullanıcıya "Sayfa Bulunamadı" mesajı gösterilmesi durumudur. Arama motorları bu durumu "soft 404" olarak algılar ve hatalı dizine ekleme sorunlarına yol açar.

React sitelerinde JSON-LD yapılandırılmış verileri nasıl optimize edilmelidir?

Dinamik olarak enjekte edilen JSON-LD verileri Google tarafından okunabilir. Ancak verilerin DOM'a yüklenme süresi uzarsa Googlebot bu şemaları kaçırabilir; bu yüzden yapılandırılmış verilerin ilk HTML içerisinde sunucu taraflı basılması daha güvenlidir.

Lazy loading (gecikmeli yükleme) kullanan resimlerin taranması nasıl güvenceye alınır?

Özel JavaScript kütüphaneleri yerine tarayıcılar tarafından yerel olarak desteklenen "loading='lazy'" özelliği kullanılmalıdır. Ayrıca resimlerin "src" özniteliğinde gerçek URL'in bulunması, Googlebot'un bu görselleri tarayabilmesi için kritiktir.

Son Adım

Dijital projenizi bugün planlayalım

Web, yazılım, e-ticaret, mobil uygulama, entegrasyon, SEO veya GEO ihtiyacınızı net bir kapsama dönüştürelim.

JavaScript SEO Nedir, Google JavaScript Siteleri Nasıl Tarar? | Webizm