Guide May 13, 2025 · Updated May 20, 2025 · 9 min read

JavaScript SEO: Modern Web Uygulamaları

Metehan Yesilyurt

Metehan Yesilyurt

AI Search & SEO Researcher

JavaScript günümüz web dünyasının vazgeçilmez bir parçası haline geldi. Ancak bu güçlü programlama dili, SEO açısından bazı zorlukları da beraberinde getiriyor. Özellikle React, Angular ve Vue gibi popüler JavaScript framework’leriyle geliştirilen Single Page Application’lar (SPA), geleneksel SEO yaklaşımlarıyla optimize edilemiyor. Peki, modern web uygulamalarını arama motorlarına nasıl sevdirebiliriz? Bu yazımızda JavaScript SEO’nun tüm inceliklerini, karşılaşabileceğiniz sorunları ve çözüm yollarını detaylıca ele alacağız.

JavaScript ve SEO İlişkisi

JavaScript ile SEO arasındaki ilişki, başlangıçta oldukça sorunluydu. Arama motorları ilk zamanlarında JavaScript’i anlamakta zorlanıyor, JS ile oluşturulan içerikleri göremiyordu. Ancak zaman içinde, özellikle Google’ın algoritmaları ve Googlebot geliştikçe, bu durum değişti.

Bugün Googlebot, JavaScript kodunu render edip çalıştırabiliyor. Fakat bu süreç her zaman mükemmel işlemiyor. Örneğin, geçen ay bir müşterimizin React tabanlı e-ticaret sitesinde yaşadığımız deneyim oldukça öğreticiydi: Site tamamen client-side rendering kullanıyordu ve Google, ürün sayfalarının neredeyse %40’ını indekslemekte sorun yaşıyordu.

JavaScript SEO’nun temel zorluğu şudur: Geleneksel HTML sayfalarında içerik doğrudan sunucudan gelir ve sayfa kaynak kodunda görünür durumdadır. Oysa JavaScript uygulamalarında içerik genellikle sayfa yüklendikten sonra, tarayıcıda JavaScript çalıştırılarak oluşturulur. Bu da arama motorlarının içeriği görmesi için ekstra bir adım gerektirir.

Bu noktada teknik SEO bilgisi hayati önem taşıyor. JavaScript uygulamalarınızın SEO açısından başarılı olması için sadece içerik değil, içeriğin nasıl sunulduğu da kritik öneme sahip.

Rendering Türleri (CSR, SSR, SSG)

JavaScript uygulamalarında içeriğin tarayıcıya nasıl sunulduğu, SEO performansını doğrudan etkiler. Başlıca üç rendering yöntemi bulunuyor:

Client-Side Rendering (CSR)

Client-side rendering, SPA’ların klasik yaklaşımıdır. Bu yöntemde:

  • Tarayıcıya minimal bir HTML gönderilir
  • JavaScript dosyaları indirilir ve çalıştırılır
  • İçerik tarayıcıda dinamik olarak oluşturulur

SEO Etkisi: CSR, SEO açısından en sorunlu yaklaşımdır. Çünkü arama motoru ilk geldiğinde neredeyse boş bir HTML görür. Google’ın JavaScript’i render etmesi için ikinci bir tarama gerekir ki bu da crawl budget tüketimi ve indeksleme gecikmelerine yol açar.

Geçen yıl React ile geliştirdiğimiz bir haber sitesinde CSR kullanıyorduk. Google Search Console’da “Sayfa URL’si değil, ancak Google’a göre indekslenebilir” hatalarının arttığını gördük. Sebebi, JavaScript’in render edilmesi için gereken zamanın crawl budget’ı tüketmesiydi.

Server-Side Rendering (SSR)

Server-side rendering, içeriğin sunucu tarafında oluşturulup tarayıcıya hazır HTML olarak gönderilmesidir:

  • Sayfa isteği geldiğinde, sunucu JavaScript’i çalıştırır
  • Tam HTML içeriği oluşturulur ve tarayıcıya gönderilir
  • Tarayıcıda JavaScript yüklenince sayfa interaktif hale gelir

SEO Etkisi: SSR, SEO dostu bir yaklaşımdır. Çünkü arama motorları sayfaya geldiğinde içeriği hemen görebilir. Next.js, Nuxt.js gibi framework’ler SSR imkanı sunar.

Static Site Generation (SSG)

Static site generation, sayfaların önceden oluşturulup hazır HTML dosyaları olarak sunulmasıdır:

  • Build aşamasında tüm sayfalar HTML olarak oluşturulur
  • Kullanıcı isteği geldiğinde hazır HTML sunulur
  • JavaScript yüklenince sayfa interaktif hale gelir

SEO Etkisi: SSG, SEO açısından ideal bir çözümdür. Hem hızlı yüklenir hem de içerik anında erişilebilirdir. Gatsby, Next.js, Gridsome gibi araçlar SSG destekler.

Modern rendering stratejileri içinde Incremental Static Regeneration (ISR) ve Partial Hydration gibi hibrit yaklaşımlar da giderek yaygınlaşıyor. Bu yöntemler, performans ve SEO dengesi açısından önemli avantajlar sunuyor.

Googlebot JS Processing

Google’ın JavaScript’i nasıl işlediğini anlamak, JavaScript SEO’nun temelidir. İşte Googlebot’un JavaScript sayfalarını işleme süreci:

  1. Crawling: Googlebot önce HTML’i indirir
  2. Queuing: JavaScript işleme için sayfa kuyruğa alınır
  3. Rendering: Google’ın rendering servisi JavaScript’i çalıştırır
  4. Indexing: Render edilen içerik indekslenir

Bu süreç, standart HTML sayfalarına göre daha uzun ve karmaşıktır. Rendering aşaması, Google’ın kaynakları doğrultusunda gecikebilir. Pratikte gördüğümüz kadarıyla, bu gecikme birkaç saat ile birkaç gün arasında değişebiliyor.

Google’ın rendering servisi, Chrome 41 tabanından günümüzde modern Chrome sürümlerine evrildi. Artık ES6+ özellikleri, Promise’ler, fetch API gibi modern JavaScript özelliklerini destekliyor. Ancak her yeni JavaScript özelliğinin hemen desteklenmeyeceğini unutmamak gerekir.

Martin Splitt’in 2021’deki bir sunumunda belirttiği gibi, Google’ın JavaScript’i anlama kabiliyeti gelişse de, hala bazı sınırlamalar mevcut:

  • JavaScript çalıştırma için sınırlı bir süre (genellikle 5 saniye civarı)
  • Bazı tarayıcı API’lerinin eksikliği
  • localStorage/sessionStorage gibi bazı özelliklerin sınırlı desteği

Bu nedenle, uygulamanızın kritik içeriklerinin bu sınırlamalar dahilinde erişilebilir olduğundan emin olmalısınız.

Common JS SEO Issues

JavaScript tabanlı uygulamalarda karşılaşılan bazı yaygın SEO sorunları ve çözümleri şunlardır:

1. İçeriğin Geç Yüklenmesi

Sorun: JavaScript yüklenip çalıştırılmadan içerik görünmez.

Çözüm: SSR veya SSG kullanarak içeriği önceden hazırlayın. Örneğin, React uygulamanızı Next.js’e taşımak bu sorunu çözebilir.

2. Lazy Loading Sorunları

Sorun: Viewport dışındaki içeriğin lazy loading ile yüklenmesi, bu içeriğin crawl edilememesine yol açabilir.

Çözüm: Kritik içerikleri lazy loading’den muaf tutun veya IntersectionObserver yerine önce tüm içeriği yükleyip sonra görünürlüğü ayarlayan yaklaşımlar kullanın.

3. JavaScript Hatalar

Sorun: Runtime JavaScript hataları, rendering’i yarıda kesebilir.

Çözüm: Try-catch blokları kullanın, hata durumlarını yönetin ve SEO açısından kritik bileşenleri basit tutun.

4. Render Blocking JavaScript

Sorun: Büyük JavaScript dosyaları site hızı ve rendering performansını olumsuz etkiler.

Çözüm: Code splitting, tree shaking, lazy loading gibi teknikleri kullanarak JavaScript yükünü optimize edin.

5. SPA Routing Sorunları

Sorun: SPA’larda URL değişimleri pushState ile yapılır ve bazen doğru URL yapısı oluşmaz.

Çözüm: Doğru history API kullanımı, prerendering ve SSR ile her route için geçerli HTML çıktısı sağlayın.

Geçen yıl Vue.js tabanlı bir projemizde, dinamik route’lar için history mode yerine hash mode kullanılmıştı. Bu durum, Google’ın içeriği düzgün indeksleyememesine neden oluyordu. History mode’a geçiş ve server-side rewrite kuralları ile sorunu çözdük.

Framework-Specific Solutions

Farklı JavaScript framework’leri için spesifik SEO çözümleri mevcuttur. İşte en popüler framework’ler için öneriler:

React SEO

React, kendi başına SEO dostu değildir. Ancak Next.js gibi çözümlerle güçlü SEO yetenekleri kazanır:

// Next.js ile SEO dostu bir sayfa bileşeni
export async function getStaticProps() {
  const data = await fetchData();
  return { props: { data } };
}

function ProductPage({ data }) {
  return (
    <>
      
        {data.title}
        
      
      
# {data.title}

      {/* İçerik */}
    
  );
}

React uygulamalarında react-helmet veya next-seo gibi kütüphaneler, meta etiketlerini yönetmeyi kolaylaştırır.

Angular SEO

Angular Universal, Angular uygulamalarına SSR kabiliyeti kazandırır:

// server.ts
import 'zone.js/dist/zone-node';
import { ngExpressEngine } from '@nguniversal/express-engine';
// Express server
const app = express();

// Angular SSR engine
app.engine('html', ngExpressEngine({
  bootstrap: AppServerModule
}));

app.get('*', (req, res) => {
  res.render('index', { req });
});

Angular’da meta etiketlerini Title ve Meta servisleri ile yönetebilirsiniz.

Vue.js SEO

Vue.js uygulamaları için Nuxt.js, SSR ve SSG desteği sağlar:

// nuxt.config.js
export default {
  // SEO ayarları
  head: {
    title: 'Uygulama Başlığı',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: 'Sayfa açıklaması' }
    ]
  },
  // SSG konfigürasyonu
  target: 'static'
}

Vue-meta kütüphanesi, Nuxt.js kullanmayan Vue uygulamalarında meta etiketlerini yönetmek için kullanılabilir.

Dynamic Rendering Stratejileri

Uygulamanızı SSR’ye taşımak her zaman mümkün olmayabilir. Bu durumda, dynamic rendering bir geçiş stratejisi olabilir.

Dynamic rendering, user-agent’a göre farklı içerik sunma yaklaşımıdır:

  • Arama motoru botları için pre-rendered (önceden oluşturulmuş) HTML
  • Normal kullanıcılar için CSR (client-side rendering)

Puppeteer, Rendertron, Prerender.io gibi araçlar dynamic rendering için kullanılabilir.

// Express.js ile basit bir dynamic rendering örneği
const express = require('express');
const rendertron = require('rendertron-middleware');

const app = express();

app.use(rendertron.makeMiddleware({
  proxyUrl: 'https://render-tron.appspot.com/render',
  userAgentPattern: /bot|googlebot|bingbot|yandex|baiduspider|twitterbot|facebookexternalhit/i
}));

app.use(express.static('public'));
app.listen(8080);

Dynamic rendering, Google tarafından geçici bir çözüm olarak görülüyor. Uzun vadede SSR veya SSG’ye geçiş yapmak daha sağlıklı olacaktır.

Testing ve Debugging

JavaScript SEO sorunlarını tespit etmek ve çözmek için birçok araç mevcuttur:

1. Google Search Console

GSC’nin URL Inspection Tool’u, Googlebot’un sayfanızı nasıl gördüğünü gösterir. Rendered HTML çıktısını kontrol ederek JavaScript tabanlı içeriğinizin doğru render edilip edilmediğini anlayabilirsiniz.

2. Mobile-Friendly Test

Google’ın Mobile-Friendly Test aracı, sayfanızın rendered HTML çıktısını gösterir. JavaScript’in düzgün çalışıp çalışmadığını kontrol etmek için kullanışlıdır.

3. Chrome DevTools

“View Page Source” ile “Inspect Element” arasındaki fark, JavaScript SEO’nun özüdür. DevTools’un Network ve Performance sekmeleri, rendering sürecinizi analiz etmenize yardımcı olur.

4. Puppeteer ve Headless Chrome

JavaScript debugging için özel scriptler yazabilirsiniz:

const puppeteer = require('puppeteer');

async function checkRendering(url) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url, {waitUntil: 'networkidle0'});

  // H1 etiketini kontrol et
  const h1Content = await page.evaluate(() => {
    const h1 = document.querySelector('h1');
    return h1 ? h1.innerText : null;
  });

  console.log(`H1 içeriği: ${h1Content}`);
  await browser.close();
}

checkRendering('https://example.com');

5. Screaming Frog

Screaming Frog’un JavaScript rendering özelliği, tüm sitenizi tarayarak JavaScript SEO sorunlarını tespit etmenize yardımcı olur.

Geçen ay bir e-ticaret sitesinde yaptığımız denetimde, Screaming Frog’un JavaScript rendering özelliğini kullanarak, Ajax ile yüklenen ürün açıklamalarının bazı sayfalarda eksik olduğunu tespit ettik. Bu tür sorunları manuel olarak bulmak neredeyse imkansız olurdu.

Best Practices

JavaScript tabanlı web uygulamalarınızın SEO performansını artırmak için izleyebileceğiniz best practice’ler:

1. Mümkünse SSR veya SSG Kullanın

CSR’den SSR veya SSG’ye geçiş yaparak, arama motorlarının içeriğinizi daha hızlı ve daha güvenilir şekilde görmesini sağlayın.

2. Hybrid Rendering Stratejileri Uygulayın

Tüm sayfalar için SSR gerekli olmayabilir. Önemli landing page’ler ve ürün sayfaları için SSR, blog ve yorum gibi ikincil içerikler için CSR kullanabilirsiniz.

3. Critical CSS ve JavaScript

İlk render için kritik olan CSS ve JavaScript’i inline olarak sunun, geri kalanı defer edin:


  
    /* Critical CSS */
    body { font-family: sans-serif; }
    header { background: #f5f5f5; }
  
  

4. Semantik HTML Kullanın

JavaScript framework’leri ile çalışırken bile semantik HTML’i unutmayın:

// Kötü örnek

Tıkla

// İyi örnek
Tıkla

5. Internal Linking Yapısını Güçlendirin

SPA’larda bile güçlü bir internal linking yapısı oluşturun. Framework’ünüzün router’ını kullanarak gerçek linkler oluşturun:

// React Router örneği
Kategori Sayfası

// Nuxt.js örneği
Kategori Sayfası

6. Structured Data Ekleyin

JavaScript uygulamalarınıza structured data ekleyerek, arama motorlarının içeriğinizi daha iyi anlamasını sağlayın:

function ProductPage({ product }) {
  return (
    <>
      
# {product.name}

      
        {JSON.stringify({
          "@context": "https://schema.org/",
          "@type": "Product",
          "name": product.name,
          "description": product.description,
          "price": product.price
        })}
      
    
  );
}

7. Performans Optimizasyonu

JavaScript SEO, performans optimizasyonu ile doğrudan ilişkilidir:

  • Code splitting ve lazy loading
  • Tree shaking
  • Modern JavaScript özellikleri için transpilation
  • Service Worker ve caching stratejileri

Geçtiğimiz aylarda bir müşterimizin Vue.js uygulamasında, code splitting ve component lazy loading uygulayarak ilk yüklenme süresini %40 azalttık. Bu değişiklik, organik trafik üzerinde doğrudan olumlu etki yarattı.

8. Progressive Enhancement

JavaScript tabanlı uygulamanızı, JavaScript devre dışı bırakıldığında bile temel işlevselliğini koruyacak şekilde tasarlayın. Bu, sadece SEO için değil, kullanıcı deneyimi için de hayati.

Sonuç

JavaScript SEO, modern web geliştirmenin kaçınılmaz bir parçası haline geldi. Framework’lerin ve SPA’ların yaygınlaşmasıyla, geleneksel SEO yaklaşımlarının ötesine geçmek gerekiyor.

Unutmayın ki, Google ve diğer arama motorları JavaScript’i anlama konusunda giderek daha yetenekli hale geliyor. Ancak, bu yeteneklere güvenmek yerine, uygulamanızı SEO dostu bir yapıda tasarlamak her zaman daha güvenli bir stratejidir.

Özetle:

  • JavaScript SEO, rendering stratejinizle başlar
  • Framework seçimi ve implementasyonu kritik öneme sahiptir
  • Testing ve debugging sürekli yapılmalıdır
  • Performans optimizasyonu, SEO başarısı için şarttır

Siz de deneyimlerinizi bizimle paylaşın! JavaScript tabanlı projelerinizde hangi SEO stratejilerini uyguladınız? Hangi zorlukları aştınız? Yorumlarda bizimle paylaşabilirsiniz.

Burada ele aldığımız konular hakkında daha detaylı bilgi almak isterseniz, blog’umuzdaki diğer teknik SEO makalelerine göz atabilirsiniz. JavaScript SEO yolculuğunuzda başarılar dileriz!

$ cat post.md | stats
words: 1,767 headings: 33 read_time: 9m links: code_blocks: images:
$subscribe --newsletter

Get new research on AI search, SEO experiments, and LLM visibility delivered to your inbox.

Powered by Substack · No spam · Unsubscribe anytime

Share with AI
Perplexity Gemini