SSR Kontrol Aracı

Bir URL'nin içeriği HTML'de mi geliyor yoksa JavaScript ile mi oluşturuluyor, test edin. Sayfa tarayıcı ve Googlebot olarak, JS çalıştırılmadan çekilir; framework ve render modu (Next.js, Nuxt, React SPA, WordPress…) tespit edilir, tarayıcı botunun gördüğü kelime, bağlantı ve başlıklar sayılır, bot engelleme ve dinamik render işaretlenir. Ücretsiz, kayıt yok.

Sayfa, JavaScript çalıştırılmadan bir kez masaüstü Chrome, bir kez Googlebot olarak çekilir. Hiçbir şey saklanmaz ya da günlüklenmez; bu sayfaya yalnızca sayılar döner.

Nasıl çalışır

1. URL, JavaScript çalıştırılmadan paralel olarak iki kez çekilir: bir kez masaüstü Chrome, bir kez Googlebot user agent'ıyla
2. Yönlendirmeler izlenir (en fazla 5); nihai URL, HTTP durumu, ilk bayt süresi ve yanıt başlıkları (sunucu, CDN, önbellek durumu) kaydedilir
3. Ham HTML ayrıştırılır: title, meta description, canonical, lang, robots yönergeleri, H1'ler, <a href> bağlantıları, görseller, JSON-LD türleri, meta refresh
4. Script, style, noscript, template ve SVG ayıklanır; görünür metnin kelimeleri sayılır — ilk dalga tarayıcı botunun dizine eklediği içerik budur
5. Yapı, işaretleme izlerinden tespit edilir: __NEXT_DATA__ / self.__next_f (Next.js), __NUXT_DATA__ (Nuxt), __remixContext, ng-version + ng-server-context (Angular), astro-island, SvelteKit, Qwik, CMS generator etiketleri ve boş <div id="root"> / <div id="app"> kabukları
6. İki yanıt karşılaştırılır: Googlebot'a 403/429 dönüyorsa botlar engelleniyor demektir; Googlebot çok daha fazla metin alıyorsa dinamik render vardır
7. 0–100 puan: içerik (en fazla 40), dolu uygulama kapsayıcısı, title, H1, bağlantılar, canonical, JSON-LD, lang ve script ağırlığı; karar: sunucu tarafında, kısmen ya da istemci tarafında render

Sunucu tarafı render ve SEO hakkında

Sunucu tarafı render (SSR), sunucunuzun döndürdüğü HTML'in sayfayı zaten içermesi demektir: başlıklar, metin, ürün verisi, bağlantılar. İstemci tarafı render (CSR) ise sunucunun neredeyse boş bir kabuk döndürmesi ve tarayıcının sayfayı JavaScript çalıştırarak kurmasıdır. Modern tarayıcı kullanan bir insana ikisi de aynı görünür. HTML'i script çalıştırmadan okuyan her şeye ise tamamen farklı görünürler: Google tarayıcı botunun ilk dalgası, Bing, Slack/WhatsApp/LinkedIn bağlantı önizlemeleri, yapay zekâ tarayıcılarının ve yanıt motorlarının çoğu ve SEO araçlarının büyük kısmı.

Google JavaScript'i çalıştırır, ama tarama bütçesine bağlı ve ilk çekimden saatler ya da günler sonra gelebilen ertelenmiş ikinci bir geçişte. Dolayısıyla CSR bir sayfa daha geç dizine girer, bağlantıları daha geç keşfedilir ve render hattındaki her aksaklık — engellenen bir script, zaman aşımı, çerez isteyen bir API — sayfayı gönderildiği hâliyle, yani boş kabuk olarak dizinde bırakır. Next.js, Nuxt, Remix, SvelteKit, Astro ve Angular gibi framework'ler tam da bunu çözmek için önce sunucuda render edip sonra tarayıcıda hydrate eder; bu araç, canlı dağıtımınızın gerçekten böyle çalışıp çalışmadığını söyler.

Araç ham HTML'i okur; bu yüzden render edilmiş bir ekran görüntüsünün yanıtlayamadığı soruyu yanıtlar: herhangi bir script çalışmadan önce belgede ne var? Görünür metnin kelimelerini sayar, uygulama kapsayıcısının (#root, #app, #__next, #__nuxt) boş olmadığını kontrol eder, ilk HTML'de bulunması gereken head öğelerini — title, meta description, canonical, lang — doğrular ve render modunu framework'lerin bıraktığı izlerden okur: Next.js'in gssp/gsp bayraklı __NEXT_DATA__'sı ya da self.__next_f içindeki React Server Components yükü gibi.

Normal tarayıcının yanında Googlebot olarak da çekmek, tek bir isteğin gösteremeyeceği iki şeyi ekler. Tarayıcı sayfayı alırken bot 403 ya da 429 alıyorsa bir WAF ya da bot koruması botları engelliyordur — dizine girmeyen sayfaların şaşırtıcı derecede yaygın bir nedeni. Bot tarayıcıdan belirgin biçimde fazla metin alıyorsa site botlar için dinamik render ya da prerender servisi kullanıyordur; meşrudur ama gerçek sayfayla eşzamanlı tutulmalıdır. Her şey bizim tarafımızda bellekte olur: sayfa HTML'i analiz edilip atılır, geriye yalnızca türetilmiş sayılar ve 500 karakterlik bir metin örneği döner.

Sık sorulan sorular

Sitemin sunucu tarafında render edildiğini nasıl anlarım?
URL'yi buraya yapıştırın. HTML başlıklarınızı, metninizi ve bağlantılarınızı zaten içeriyorsa — araç yüzlerce kelime, dolu bir uygulama kapsayıcısı ve title gösteriyorsa — sayfa sunucuda render ediliyor ya da statik üretiliyordur. Bir avuç kelime ve boş bir #root ya da #app görüyorsanız içerik tarayıcıda JavaScript ile kuruluyordur. Sayfa kaynağını görüntüleyerek (render edilmiş DOM'u gösteren DevTools denetleyicisi değil) ya da JavaScript'i kapatarak elle doğrulayabilirsiniz.
Araç JavaScript çalıştırıyor mu?
Hayır, bilinçli olarak. Sunucunun gönderdiğini gösterir; ilk dalga tarayıcı botlarının, bağlantı önizleme botlarının, yapay zekâ çekicilerinin çoğunun ve birçok SEO aracının gördüğü tam olarak budur. Google'ın Zengin Sonuç Testi ve Search Console'daki URL Denetimi JavaScript sonrası render edilmiş sonucu gösterir; ikisini birlikte kullanın: neyin gönderildiğini bilmek için bunu, Google'ın neyi render ettiğini bilmek için onları.
'Kısmen render' ne demek?
HTML bir miktar içerik taşıyan bir kabuk içeriyor — genellikle sunucudan gelen header, footer ve gezinme; asıl içerik (ürün listesi, makale gövdesi, arama sonuçları) ise yükleme sonrası JavaScript ile çekilip çiziliyor. Fallback kabuğu olarak sunulan bir Next.js getStaticProps sayfası ya da görünür metnin script yüküne göre çok küçük kaldığı sayfalar için de bu karar verilir. Metin örneğinde hangi içeriğin eksik olduğuna bakın ve onu ilk HTML'e taşıyın.
Googlebot neden tarayıcıdan farklı sonuç alıyor?
Üç olağan neden var. Bir WAF ya da bot koruması Googlebot user agent'ını engelliyor (HTTP 403/429/503) — gerçek Googlebot IP ile de doğrulanır ama UA tabanlı engel güçlü bir ipucudur. Dinamik render kurulumu (Rendertron, Prerender.io, bir CDN worker'ı) yalnızca botlara önceden render edilmiş HTML sunuyor. Ya da site user agent ve dile göre kişiselleştiriyor. İlki düzeltilmeli; ikincisi her iki sürüm aynı içeriği taşıdığı sürece sorun değil; üçüncüsü cloaking riski açısından kontrol edilmeli.
İstemci tarafında render edilen sayfa SEO için her zaman kötü müdür?
Her zaman değil, ama her zaman daha yavaş ve daha risklidir. Google genellikle er geç render edip dizine ekler; Bing ve diğer motorların çoğu, sosyal önizlemeler ve yapay zekâ tarayıcıları eklemez. Sıralanması ya da paylaşılması gereken sayfalarda — açılış sayfaları, ürün sayfaları, makaleler — içerik ilk HTML'de olmalıdır. Giriş arkasındaki paneller ve hiç dizine girmesi gerekmeyen uygulama ekranları istemci tarafında kalabilir.
Hangi framework ve platformları tanıyor?
Next.js (App Router / Pages Router ve getServerSideProps / getStaticProps ayrımıyla), Nuxt 2 ve 3, Remix, React Router 7, Gatsby, Astro, Docusaurus, SvelteKit, SolidStart, Qwik, Angular (SSR'lı ya da SSR'sız), mount noktasından sade React ve Vue uygulamaları ve olağan sunucu taraflı platformlar: WordPress, Shopify, Wix, Webflow, Squarespace, Framer, HubSpot, Drupal, Joomla, Ghost, Magento, Hugo, Jekyll, Eleventy ve Türk e-ticaret altyapıları Ticimax, IdeaSoft ve T-Soft. Geri kalan her şey yalnızca HTML içeriğine göre değerlendirilir.
URL ya da sayfa içeriği saklanıyor mu?
Hayır. Sayfa belleğe çekilir, analiz edilir ve atılır; uç nokta no-store başlığı gönderir, URL günlüğü tutmaz ve yalnızca insighthackerz.com'dan gelen isteklere yanıt verir. Bu sayfada gördükleriniz — sayımlar, başlıklar, 500 karakterlik metin örneği — sunucudan çıkan her şeydir.