SEO için Nuxt
Nuxt varsayılan olarak sunucu tarafı işleme sunar, ancak bu rota başına bir ayardır, bir garanti değildir — yalnızca bunu koruyan rotalarda tarayıcılara tam HTML gönderilir. İşleme modları, useSeoMeta(), @nuxtjs/seo araç seti, hidrasyon ve Nitro uyarıları, Core Web Vitals ve sessizce size maliyet çıkaran hatalar.
Diller
Bu sayfada 1 kanıt sinyali
- İlgili canlı araçCore Web Vitals History & Competitor Comparison
Nuxt sayfaları varsayılan olarak sunucu tarafında işler, bu nedenle bu varsayılanı koruyan bir rota, tarayıcılara düz bir Vue SPA'nın gönderdiği boş kabuk yerine eksiksiz bir HTML belgesi verir — ancak bu rota başına bir ayardır: routeRules veya global ssr:false herhangi bir rotayı CSR'ye çevirebilir, bu nedenle çerçeve adından varsaymak yerine gerçek rotayı doğrulayın. Temel karar, rota başına işleme modudur (SSR (varsayılan), nuxt generate ile SSG veya hibrit rota kuralları) çünkü meta etiketleri, şema ve site haritaları hepsi bundan sonra gelir. Meta için useSeoMeta() kullanın, Harlan Wilton'ın @nuxtjs/seo paketini robots/sitemap/OG/schema/canonical için isteğe bağlı üçüncü taraf bir araç seti olarak değerlendirin (Nuxt çekirdeği değil), dinamik işlemeye asla başvurmayın (Google bunu kullanımdan kaldırdı), hidrasyon/payload ve Nitro dağıtım-önayar/önbellek davranışını sunucu HTML'sinden bağımsız olarak doğrulayın ve AI tarayıcı işleme sözleşmelerinin sağlayıcıya göre değiştiğini unutmayın — SSR/SSG içeriği ham HTML'ye koyar ve kapsamı maksimize eder.
TL;DR — Nuxt, Vue üzerine inşa edilmiş framework’tür ve SEO için iyidir çünkü tek ana nedeni şudur: varsayılanı koruyan bir rotada, sayfaları sunucuda oluşturur, böylece arama motorları boş bir sayfa yerine bitmiş bir HTML sayfası alır. Bu, site genelinde bir garanti değil, rota bazlı bir ayardır —
routeRulesveya global birssr: false, herhangi bir rotayı düz Vue tarzı boş bir kabuğa geri döndürebilir. Sadece proje adına değil, gerçek rotaya bakın. Yapacağınız en önemli seçim, her rotanın nasıl oluşturulacağıdır; diğer her şey (meta etiketler, sitemap’ler) bundan sonra gelir.
Nuxt neden SEO için iyidir — varsayılanı koruyan rotalarda
Vue, tek başına bir tek sayfa uygulaması oluşturur: sunucu neredeyse boş bir HTML kabuğu gönderir ve JavaScript, tarayıcıda çalıştığında içeriği doldurur. Bu, arama için zordur çünkü sayfa, JavaScript çalışana kadar boş görünür.
Nuxt, Vue’nun “meta-framework”üdür — Vue etrafında inşa edilmiş daha kapsamlı bir araç seti — ve
varsayılanı bu sorunu çözer. Nuxt, sayfalarınızı önce sunucuda oluşturur
(sunucu tarafı oluşturma veya SSR), böylece Google veya bir ziyaretçi, SSR kapatılmamış bir rotada
bir sayfa istediğinde, eksiksiz HTML’i hemen alır. Evidence for this claim Nuxt universal rendering returns server-rendered HTML to the browser by default. Scope: Nuxt default universal rendering. Confidence: high · Verified: Nuxt: Rendering modes JavaScript beklemek yok. Bu, bir Nuxt sitesinin düz bir Vue uygulamasından daha kolay
indekslenebilir olmasının en büyük tek nedenidir — ancak bu, framework adının garanti ettiği bir şey değil,
rota bazlı bir sonuçtur. ssr: false olan bir rota veya ana içeriği için <ClientOnly> kullanan bir rota,
bu avantajı kaybeder ve düz Vue’un sahip olduğu aynı boş kabuk sorununu taşır.
En önemli karar: rota başına oluşturma
Birisi belirli bir sayfa istediğinde, HTML’i nerede oluşturulur? Bu bir
routeRules düzeyinde bir sorudur, proje genelinde değil — bir Nuxt uygulaması rotalar arasında modları
karıştırabilir. Nuxt size birkaç seçenek sunar:
- Sunucu tarafı oluşturma (SSR) — varsayılan. Sunucu, her istekte tam sayfayı oluşturur. SEO için harika.
- Statik oluşturma (SSG) —
nuxt generateçalıştırın ve Nuxt tüm sayfalarınızı önceden düz HTML dosyalarına oluşturur. SEO için de harika ve her dakika değişmeyen bloglar ve dokümanlar için mükemmel. - SPA modu — sayfa, düz Vue gibi tarayıcıda oluşturulur. Aramada bulunmasını istediğiniz her şey için bundan kaçının.
İyi haber şu ki varsayılanlar zaten doğru yöne işaret ediyor. Çoğunlukla onları kapatmaktan kaçınmanız gerekir.
Başlıklar ve meta etiketler ekleme
Nuxt’ta sayfa başlığınızı ve meta açıklamanızı useSeoMeta() adlı yerleşik bir işlevle
ayarlarsınız. Evidence for this claim Nuxt provides useSeoMeta for defining SEO and social metadata. Scope: Current Nuxt composable. Confidence: high · Verified: Nuxt: useSeoMeta Bunu bir sayfaya eklersiniz ve başlığınızı, açıklamanızı ve
sosyal paylaşım görselinizi iletirsiniz:
useSeoMeta({
title: 'My Page Title',
description: 'A concise, page-specific summary with the key information first',
})Bu modern, önerilen yoldur. (Hâlâ çalışan ve sayfanın useHead() bölümünde başka şeyler için kullanılan <head>
adlı daha eski bir işlev vardır, ancak SEO meta etiketleri için useSeoMeta()’ya başvurun.) Google’ın sabit bir meta açıklama karakter
sınırı yoktur; snippet’ler sorguya bağlıdır ve cihaza sığacak şekilde kısaltılır, bu nedenle önemli sayfaları bir kotaya göre kodlamak yerine
amaçlanan dil ve yazı sisteminde önizleyin.
İsteğe bağlı eklenti: Nuxt SEO modülleri
Nuxt çekirdeği bir robots.txt, XML sitemap, sosyal paylaşım görselleri,
yapılandırılmış veri veya kanonik URL’ler üretmez — bunlar ayrı, isteğe bağlı paketlerin işidir,
nuxt.config.ts’nin varsayılan olarak verdiği bir şey değildir. Harlan Wilton adlı bir geliştirici,
bu paketlerin ücretsiz, topluluk tabanlı bir paketini — @nuxtjs/seo olarak kurulan — sürdürür ve
hepsini aynı anda kapsar. Bu, Nuxt’un kendisinin bir parçası olmayan üçüncü taraf bir araç setidir, bu nedenle kurmak
bu çıktılardan herhangi birini otomatik olarak doğru yapmaz; yine de ürettiği sitemap, robots kuralları ve şemanın
gerçekten istediğinizle eşleştiğini doğrulamanız gerekir.
İnsanların yanlış yaptığı şey
İnsanlar “Vue/Nuxt Google’da olamaz” diye varsayar. Bu, yıllar önce düz Vue uygulamaları için bir nebze doğruydu — sunucu tarafı render eden Nuxt için geçerli değil. Gerçek hatalar, SSR’ı yanlışlıkla kapatmak veya JavaScript dosyalarınızı engelleyerek Google’ın sayfayı oluşturamaması gibi şeylerdir.
Daha derin versiyonu istiyor musunuz — tüm render modları menüsü, modül ekosistemi detaylı olarak, Core Web Vitals ve çözümleriyle birlikte yaygın hatalar? Gelişmiş sekmesine geçin.
TL;DR — Nuxt’un varsayılanı sunucu tarafı render’dır, bu nedenle bu varsayılanı koruyan bir rota, düz bir Vue SPA’nın gönderdiği boş kabuk yerine eksiksiz bir DOM alır — ancak bu rota bazlı bir sonuçtur:
ssr: falseveya birrouteRulesgeçersiz kılması herhangi bir rotayı CSR veya hibrit hale getirebilir, bu yüzden proje adını değil, gerçek rotayı test edin. Render stratejisi temel karardır — SSR (varsayılan), SSG (nuxt generate) veya hibritrouteRules— çünkü meta, şema ve sitemap’ler hepsi ondan sonra gelir. Meta etiketleri içinuseSeoMeta()kullanın (head’in geri kalanı içinuseHead(), reaktiviteye ihtiyacınız olmadığında sunucuya özel varyantlar) ve Harlan Wilton’un@nuxtjs/seopaketini robots/sitemap/OG/schema/canonical için isteğe bağlı bir üçüncü taraf araç seti olarak değerlendirin — Nuxt çekirdeğinin parçası değil ve kontrol edene kadar çıktısının doğru olduğunun kanıtı değil. Dinamik render’ı asla kullanmayın (Google bunu kullanımdan kaldırdı). AI tarayıcı render’ı sağlayıcıya göre değişir — SSR/SSG ham HTML kapsamını maksimize eder. İlk HTML’nin ötesinde, hidrasyon/payload, Nitro dağıtım ön ayarları ve önbellekleme ile doğrudan HTTP durumunu bağımsız olarak doğrulayın — sunucu HTML’si tek başına bunların hiçbirini kanıtlamaz. Olağan JS-SEO kuralları hâlâ geçerlidir: gerçek<a href>bağlantıları, JS/CSS’i engellemeyin, render edilmiş vs. ham HTML’i izleyin.
Nuxt, Vue’nun SPA sorununa cevabıdır
Vue, tek başına, tek sayfalık bir uygulama gönderir: bir HTML kabuğu artı tarayıcıda DOM’u oluşturan JavaScript. Nuxt, Vue’nun üzerindeki meta-çerçevedir (Nuxt 3’te Nitro sunucu motorunda çalışır, Nuxt 4 2025’te takip eder) ve var olma nedeni — SEO açısından — varsayılan olarak sunucuda render etmesidir. Her sayfa, Googlebot’un JavaScript’i çalıştırmadan önce okumak istediği tam oluşturulmuş bir HTML belgesi olarak gelir. Düz Vue SEO kendi başarısızlık modlarıyla kendi konusudur; burada Nuxt’u tam da SPA sorunuyla savaşmamak için seçtiğinizi varsayıyorum.
This is the same point I make about JavaScript generally: “any kind of SSR, static rendering, and prerendering setup is going to be fine for search engines. Gatsby, Next, Nuxt, etc., are all great.” Nuxt’s defaults are pointed the right way. Most Nuxt SEO problems are people turning those defaults off, or layering mistakes on top of them.
Render stratejisi temeldir — proje başına değil, rota başına karar verilir
Meta etiketlerinden önce, şemadan önce, sitemap’lerden önce, her şeye karar veren soru şudur: bu belirli rota için HTML nasıl üretilir? Nuxt, evrensel (sunucu) render’ı uygulama genelinde varsayılan olarak belgeler, ancak bu varsayılan rota düzeyinde bir garanti değildir: genel bir ssr: false tüm uygulamayı istemci render’ına geçirir ve routeRules herhangi bir URL desenine farklı bir mod atayabilir. “Bu bir Nuxt uygulaması” size belirli bir sayfanın nasıl render edildiği hakkında hiçbir şey söylemez — rotayı kontrol etmeniz gerekir. Nuxt size beş strateji sunar:
| Mod | Nasıl ayarlarsınız | SEO etkisi | En iyi olduğu yer |
|---|---|---|---|
| Evrensel / SSR | Varsayılan (ssr: true) | Mükemmel — her istekte tam HTML | Dinamik, kişiselleştirilmiş içerik |
| Statik / SSG | nuxt generate | Mükemmel — dağıtım zamanında oluşturulan HTML | Bloglar, dokümanlar, pazarlama |
| Hibrit | Rota başına routeRules | Mükemmel — rota başına karışım | Büyük karışık içerikli siteler |
| SPA / CSR | ssr: false | Dizine eklenen içerik için zayıf | Panolar, yönetim panelleri |
| Kenar tarafı | Dağıtım hedefi | Mükemmel — düşük TTFB | Küresel performans |
Resmi Nuxt belgeleri, içerik için istemci tarafı oluşturmanın neden yanlış seçim olduğu konusunda açık sözlüdür: “Indexing and updating the content delivered via client-side rendering takes more time” (çeviri) «İstemci tarafı oluşturma yoluyla sunulan içeriğin dizinlenmesi ve güncellenmesi daha fazla zaman alır», sunucu (evrensel) oluşturma ile ise “web crawlers can directly index the page’s content.” (çeviri) «web tarayıcıları sayfanın içeriğini doğrudan dizinleyebilir.» Evidence for this claim Nuxt documents that universal rendering delivers HTML content immediately and allows crawlers to index it directly. Scope: Nuxt rendering; no indexing guarantee. Confidence: high · Verified: Nuxt: Rendering modes
(Nuxt oluşturma belgeleri.) CSR
(ssr: false), arka ofis, panolar ve oyunlar için konumlandırılmıştır — dizinlenmesini istediğiniz hiçbir şey için değil.
Büyük siteler için hibrit oluşturma güçlü bir hamledir. nuxt.config.ts içindeki rota kuralları, URL deseni başına oluşturma ve önbelleğe alma modunu ayarlamanıza olanak tanır:
routeRules: {
'/blog/**': { prerender: true }, // SSG for the blog
'/product/**': { swr: 3600 }, // ISR-style: regenerate hourly
'/admin/**': { ssr: false }, // SPA for the admin area
'/checkout/**': { ssr: true }, // always-fresh SSR
}swr (stale-while-revalidate) ve isr (incremental static regeneration) bir sayfayı statik olarak oluşturur ve ardından arka planda yeniler — her değişiklikte tam yeniden oluşturmanın pratik olmadığı yüksek sayfa sayılı e-ticaret veya haber siteleri için idealdir. Nuxt Islands (<NuxtIsland>), istemci tarafı JavaScript göndermeden bileşenleri oluşturur, hidrasyon maliyetini azaltır ve Nuxt uygulamalarında en sık sorun olan Core Web Vital metriği INP’ye yardımcı olur.
Gerçekte ne yayınladığınızı nasıl doğrularsınız: View Source, sunucunun gönderdiği ham HTML’i gösterir; içeriğiniz oradaysa, sunucu tarafı oluşturuyorsunuz demektir. DevTools’un Elements paneli, oluşturulan DOM’u gösterir. Ve GSC’nin URL Inspection aracı, Google’ın gerçekte ne getirip oluşturduğunu gösterir — gerçeğin kaynağı budur. “Tarayıcımda iyi görünüyor” ifadesine güvenmeyin.
Googlebot bir Nuxt uygulamasını nasıl işler
Google, herhangi bir JavaScript uygulamasını üç aşamada işler — tarama, oluşturma, dizinleme — ve işin püf noktası zamanlamadır: oluşturma anında değil, bir kuyrukta gerçekleşir. JavaScript SEO rehberimde belirttiğim gibi, oluşturucu sabırlıdır — “there is no fixed timeout for the renderer… It’s really patient, and you should not be concerned.” (çeviri) «Oluşturucu için sabit bir zaman aşımı yoktur… Gerçekten sabırlıdır ve endişelenmemelisiniz.» Ancak sabırlı olmak, taze içerik için hızlı olmakla aynı şey değildir. İstemci tarafı oluşturulmuş bir sayfa yayınlarsanız, içeriğiniz o oluşturma dalgası çalışana kadar Google için mevcut değildir; SSR ve SSG bu boşluğu kapatır çünkü HTML ilk getirmede tamamlanmıştır.
Ölçekte iki şey daha önemlidir. JavaScript oluşturmak pahalıdır — 2019 tarihli JavaScript SEO konuşmamdan (Ungagged), Google’ın oluşturması gerektiğinde tarama maliyetleri yaklaşık 20 kat artar (yönlüdür, ancak büyüklük sırası hâlâ geçerlidir). Ve Google, ham ve oluşturulmuş HTML genelinde en kısıtlayıcı yönergeyi alır — bu nedenle JavaScript tarafından enjekte edilen bir noindex, ham HTML’deki bir index üzerinde kazanır ve bunun tersi de geçerlidir. JavaScript ile enjekte edilen bir canonical, yalnızca ham HTML’de zaten bir canonical yoksa dikkate alınır. Robots ve canonical sinyallerinizi sunucu tarafı oluşturulmuş HTML’de tutun; SSR açıkken Nuxt bunu sizin için yapar.
Yapay zekâ tarayıcı gerçeği
Bu, 2026’nın yeni durumu. Yapay zekâ tarayıcıları — GPTBot, ClaudeBot, PerplexityBot ve diğerleri — genellikle JavaScript’i hiç çalıştırmaz. Yalnızca ham HTML’i dizinlerler, başka hiçbir şeyi. Bu nedenle, istemci tarafı oluşturulmuş bir Nuxt sayfası, yapay zekâ yanıt motorları için etkili bir şekilde görünmezdir. Burada SSR veya SSG yalnızca Google için daha iyi değildir; yanıt motoru optimizasyonu için de bir giriş bedelidir. İçeriğinizin ChatGPT, Perplexity veya Claude tarafından alıntılanmasını istiyorsanız, ilk getirmede HTML’de olması gerekir.
İlk HTML’in ötesinde: payload, hidrasyon ve durum kodları
İçeriğinizle birlikte sunucu HTML’i almak gerekli ancak yeterli değildir — bu ilk yanıtın ardından birkaç şey hâlâ ters gidebilir ve “View Source’u kontrol ettim” bunları kapsamaz:
- Payload ve hidrasyon. Evrensel render, HTML’i ve istemcinin hidrasyon için kullandığı serileştirilmiş bir veri payload’unu gönderir — olay dinleyicilerini ekler ve sunucunun kaldığı yerden devam eder — yeniden getirme yapmadan. Sunucu HTML’inin doğru görünmesi, hidrasyonun başarılı olduğunu, istemci tarafı gezinmenin aynı içeriği yeniden ürettiğini veya payload’un bayat olmadığını kanıtlamaz. Bir sayfa ilk yüklemede iyi görünüyor ancak istemci tarafı rota değişikliğinden sonra bozuluyorsa, bu bir hidrasyon/payload sorunudur, render modu sorunu değildir.
<ClientOnly>ve yalnızca tarayıcıya özel içerik. Bir şeyi<ClientOnly>içine sarmak — tarayıcı API’sine bağımlı widget’lar için yaygındır — içeriğin, aksi halde evrensel bir rotada bile sunucu yanıtında bulunmaması anlamına gelir. Ana içeriğiniz, önemli bir bağlantınız veya meta etiketleriniz yalnızca istemciye özel bir sınırın içinde kalırsa, yalnızca ham HTML’i okuyan tarayıcılar ve yapay zeka botları bunu kaçırır, render modu ayarınızdan bağımsız olarak. Yalnızca render modu yapılandırmasına değil, gerçek yanıta bakın.- Durum kodları ve yönlendirmeler kendi kendini doğrulamaz. Tarayıcıda işlenen bir Nuxt hata sayfası veya
navigateTo()/composable tabanlı bir yönlendirme, doğrudan sunucu yanıtının gönderdiği HTTP durumunu tek başına kanıtlamaz. Google’ın rehberliği, anlamlı durum kodlarının tarama ve dizine ekleme için önemli olduğunu açıkça belirtir — istemci tarafı işlenen hata sayfasının gösterdiğini değil, gerçek başlığıcurl -Iile doğrulayın.
Bunların hiçbiri evrensel rendere karşı bir argüman değil — bu, “HTML sunucu tarafından işlenir” ifadesinin ilk kontrol olduğu, son kontrol olmadığı hatırlatmasıdır.
Nitro, dağıtım ön ayarları ve önbellek sınırları
Nuxt’un sunucu çıktısı Nitro tarafından oluşturulur ve Nitro, hedeflediğiniz dağıtım ön ayarına (Node sunucusu, Cloudflare, Vercel, Netlify, statik ve diğerleri) bağlı olarak farklı derlenir. Bu, SEO için önemlidir çünkü ön ayarlar ve bağdaştırıcılar, kullanılabilir çalışma zamanı API’leri, önbelleğe alma davranışı, akış desteği, bölgesel dağıtım ve dosya sistemi erişimi açısından farklılık gösterebilir — bir ön ayar altında çalışan bir rota kuralı veya sunucu işleyicisi, diğerinde aynı şekilde davranacağının garantisi değildir. Varsaymak yerine açıkça test etmeye değer iki sonuç:
- Önbellek anahtarları ve geçersiz kılma rota bazlıdır, otomatik değildir.
swrveisrrota kuralları çıktıyı önbelleğe alır ve yeniden üretir, ancak yanlış bir önbellek anahtarı, eksik geçersiz kılma veya dağıtım platformunuz tarafından ayarlanan bir önbellek başlığı, tarayıcılara bayat, kişiselleştirilmiş veya tutarsız HTML sunabilir. YalnızcaCache-Controlyapılandırmasına değil, canlı bir URL’deki gerçek yanıt yaşını veAge/routeRulesbaşlıklarını kontrol edin. - Üretim paritesi, hazırlık davranışıyla garanti edilmez. Yerel geliştirmede veya önizleme dağıtımında doğru şekilde işlenen bir rota, üretim ön ayarının aynı çıktıyı ürettiğini doğrulamaz — sunucu rotaları, yönlendirmeler ve hata işleme Nitro’nun sunucu katmanında yaşar ve bu katman, hedefe göre farklılık gösterme olasılığı en yüksek olan kısımdır. Herhangi bir dağıtım değişikliğinden sonra, render modunu doğruladığınız gibi, üretim URL’sini doğrudan test edin.
Meta etiketleri: useSeoMeta() ve useHead()
Nuxt’un başlık yönetimi Unhead üzerinde çalışır ve size farklı işler için iki composable sunar.
useSeoMeta(), SEO ve sosyal medya meta etiketleri için başvurmanız gereken yöntemdir. Düz, tip güvenli, yazılı parametrelere sahip bir API’dir. Evidence for this claim useSeoMeta is a typed Nuxt API for SEO and social meta tags. Scope: Current Nuxt composable. Confidence: high · Verified: Nuxt: useSeoMeta Klasik Open Graph hatası olan name yerine property kullanma sorununu önlemeye yardımcı olur:
useSeoMeta({
title: 'My Page Title',
ogTitle: 'My Page Title',
description: 'Concise page-specific description with the key information first',
ogDescription: 'Concise social description tailored to this page',
ogImage: 'https://mysite.com/og-image.png', // must be an absolute URL
twitterCard: 'summary_large_image',
})useHead(), diğer her şey için genel amaçlı başlık aracıdır — komut dosyaları, bağlantı etiketleri, gövde öznitelikleri ve başlık şablonları:
useHead({
titleTemplate: '%s · My Site Name',
htmlAttrs: { lang: 'en' },
})Güvenilir katmanlama deseni şudur: nuxt.config.ts içinde statik varsayılanlar (charset, viewport, favicon) → app.vue içinde site genelinde başlık şablonu ve global OG varsayılanları → sayfa bileşeninde useSeoMeta() ile sayfaya özel geçersiz kılmalar. Yaygın bir hata, useSeoMeta()’yı sayfa yerine bir layout içine koymaktır; bu, belirli sayfa etiketlerini genel olanlarla ezebilir. Ve arama motorları ilk yüklemeyi okuduğundan, SEO meta genellikle reaktif olmak zorunda değildir — useServerHead() istemci tarafı yeniden çalıştırmayı atlar.
Hangi API ve gerçekte neyi kanıtlıyor:
| API | Kapsam | Reaktif mi? | Çıktı hakkında neyi kanıtlıyor |
|---|---|---|---|
useSeoMeta() | Yalnızca düz, tipli SEO/sosyal meta | Evet (varsayılan) | Tipli özellikleri doğru ayarlar — rotanın benzersiz, canonical veya indexlenebilir olduğunu değil; bu mantığı yine de siz yönetirsiniz |
useHead() | <head> içindeki her şey — scriptler, linkler, nitelikler, başlık şablonu | Evet (varsayılan) | Genel head kontrolü; aynı uyarı — API kullanımı doğru bir sunucu yanıtının kanıtı değildir |
useServerHead() / yalnızca sunucu çağrıları | Yukarıdakiyle aynı | Hayır — yalnızca sunucu, istemci yeniden çalıştırmayı atlar | Etiketin sunucu HTML’inde bir kez gönderildiğini doğrular; orada ona güveniyorsanız istemci tarafı gezinmenin onu yeniden ayarladığını doğrulamaz |
Bu composable’lardan birini çağırmak, API’nin çalıştığını söyler — doğrudan bir sunucu yanıtının veya istemci tarafı rota değişikliğinin gerçekte ne yaydığını tek başına söylemez. Yalnızca “useSeoMeta() çağırdım” demek yerine View Source veya curl ile doğrulayın.
@nuxtjs/seo modül ekosistemi (Harlan Wilton) — isteğe bağlı, çekirdek değil
Nuxt çekirdeği, kutu dışında bir sitemap, robots.txt, OG görsel üretimi veya Schema.org ile gelmez — bunlar Nuxt’un kendi ilkellerinin (useHead, useSeoMeta, rota kuralları, render modları) dışındadır. Topluluk bu boşluğu Harlan Wilton’ın @nuxtjs/seo paketiyle doldurur — ayrıca kurulan, üçüncü taraf bir şemsiye paket (nuxtseo.com, şu anda v5.x, aktif olarak bakımı yapılıyor, Nuxt 3,16+ ve Nuxt 4’ü hedefliyor) altı modülü bir araya getirir. Kurulumu size sitemap, robots, OG-image ve schema üretimi sağlar — tek başına çıktının rotalarınız için doğru olduğunu garanti etmez; ürettiğini, başka her şeyi doğruladığınız gibi doğrulayın:
| Modül | Ne yapar |
|---|---|
@nuxtjs/robots | robots.txt + meta robots + X-Robots-Tag başlıkları |
@nuxtjs/sitemap | Sayfalardan + dinamik rotalardan otomatik XML sitemap’ler |
nuxt-og-image | Dinamik OG görselleri (bir Vue şablonu → bir görsel) |
nuxt-schema-org | Schema.org JSON-LD yapılandırılmış veri |
nuxt-seo-utils | Canonical URL’ler, breadcrumb’lar, varsayılanlar |
nuxt-link-checker | Derleme zamanı bozuk bağlantı tespiti |
Tüm paketi npx nuxt module add seo ile kurun veya tek tek modülleri alın (npx nuxt module add sitemap robots). Bilinmeye değer birkaç davranış:
@nuxtjs/sitemappages/dizininizden ve dinamik rotalardan otomatik üretir, 50 000 URL’nin üzerinde otomatik olarak bir sitemap index’ine böler, i18n çok dilli sitemap’leri destekler ve yerleşik IndexNow desteğine sahiptir. Doğru yapılması gereken bir şey: Googlechangefreqvepriority’yi yok sayar; yalnızca doğru birlastmodönemlidir ve yalnızca içerik gerçekten değiştiğinde.@nuxtjs/robotsrobots.txt, robots meta etiketi veX-Robots-Tagbaşlığını üretir — ve varsayılan olarak üretim dışı ortamlarda tüm tarayıcıları engeller, bu da headless build’leri etkileyen tam olarak staging-indexation tuzağıdır. Ayrıca size bot başına kurallar verir, böylece herkesi rahat bırakırken yalnızca GPTBot’u engelleyebilirsiniz (bilinçli olun — bir AI tarayıcısını engellerseniz sizi alıntılamaz).nuxt-seo-utilscanonical URL’leri yönetir ve kullanışlı bir şekilde, canonical’lerden izleme parametrelerini (utm_*,fbclid,gclid) otomatik olarak temizler.
nuxt/image ve Core Web Vitals
@nuxt/image görsel modülüdür: otomatik responsive srcset, modern formatlar (WebP/AVIF), CDN sağlayıcıları aracılığıyla yerleşik optimizasyon ve yavaş yükleme. SEO değerinin çoğunu taşıyan iki kural:
- LCP görselini asla tembel yükleme. Kahraman görseliniz hevesle yüklenmeli; tembel yükleme En Büyük İçerikli Boyamayı geciktirir.
- Her zaman
widthveheightayarlayın böylece tarayıcı yer ayırır ve Kümülatif Düzen Kayması riski almazsınız.
<NuxtImg
src="/hero.jpg"
width="1200"
height="630"
alt="Descriptive alt text"
:loading="isHeroImage ? 'eager' : 'lazy'"
format="webp"
/>The 2026 targets to aim for (p75): LCP ≤ 2,5s, INP ≤ 200ms, CLS ≤ 0,1. On Nuxt apps,
INP is the one that tends to suffer because hydration creates input lag — which is
exactly what Nuxt Islands and <NuxtIsland> are for.
Nuxt Content + SEO
Eğer @nuxt/content (markdown/MDX içerik modülü) kullanıyorsanız, @nuxtjs/seo ile
entegrasyon basittir ancak bir sıralama tuzağı vardır: modüller dizinizde @nuxtjs/seo’yu
@nuxt/content’tan önce yükleyin. Ardından içerik frontmatter’ında (title, description, robots, ogImage, schemaOrg) SEO ayarlayabilir ve içeriği getirdikten sonra [slug].vue şablonunuzda useSeoMeta() ile bunu çekebilirsiniz. Bu, headless-CMS deseninin Nuxt-native versiyonudur ve aynı “eklentinin yaptığını yeniden oluştur” disiplini geçerlidir.
Yaygın Nuxt SEO hataları
- Dizinlenmesini istediğiniz içerik için SPA modu (
ssr: false) kullanmak. En pahalı hata — ve sizi AI tarayıcılarına görünmez yapan hata. - OG görselleri için göreli URL’ler.
ogImagemutlak bir URL olmalıdır, aksi takdirde sosyal önizlemeler bozulur. useSeoMeta()’yı sayfa yerine bir layout’ta kullanmak — genel etiketler sayfaya özgü olanları ezer.- İşlenmiş HTML’i doğrulamamak — Kaynağı Görüntüle ≠ DevTools ≠ Google’ın işlediği. URL Inspection kullanın.
robots.txtiçinde JS/CSS’i engellemek — Google engellenen dosyalardan işleme yapmaz.- Yayın sonrası staging
noindex/disallow’u yerinde bırakmak (veya tersine,@nuxtjs/robots’un varsayılan olarak prod dışını engellediğini unutup prod’un sorunsuz olduğunu ama özel bir ortamın olmadığını merak etmek). - LCP görselini tembel yüklemek — LCP’nizi düşürür.
- Görsellerde
width/heighteksikliği — CLS. - Sitemap’lerde
changefreq/priority— Google bunları yok sayar; yalnızcalastmodönemlidir. - Dinamik işlemeye başvurmak. Google bunu kullanımdan kaldırdı — “dynamic rendering is a workaround and not a long-term solution” — ve yalnızca yapılandırdığınız motorlara hizmet eder, Bing’i ve her AI tarayıcısını kaçırır. Nuxt ile buna asla ihtiyacınız olmaz: SSR ve SSG zaten tarayıcılara eksiksiz HTML verir.
llms.txt ve AEO
llms.txt, robots.txt’in kuzeni olan ve AI araçlarının içeriğinizde gezinmesine yardımcı olan
düz metin bir dosyadır. nuxt-llms modülü, Nuxt Content’ten /llms.txt ve /llms-full.txt
otomatik olarak üretir. 2025 sonu itibarıyla birincil tüketicileri MCP sunucuları ve AI kodlama
araçlarıdır (Cursor, Claude Code) — doğrudan ChatGPT veya Perplexity değil — ve en çok
dokümantasyon siteleri ve teknik bloglar için faydalıdır; e-ticaret veya haber için daha az. Dokümantasyon/geliştirici siteniz varsa eklemeye değer; aksi takdirde öncelik değildir.
Bu nereye uyuyor
Nuxt SEO aslında JavaScript SEO konusunun Nuxt’un kendi kuralları aracılığıyla somut bir uygulamasıdır — ve Nuxt ön uçunuz headless bir arka uçtan veri çektiğinde headless CMS için SEO konusuyla büyük ölçüde örtüşür. İlkeler değişmez; Nuxt yalnızca iyi varsayılanlar ve bunları uygulamak için güçlü bir modül ekosistemi sunar.
AI özeti
Gelişmiş sürümün yoğunlaştırılmış bir değerlendirmesi:
- Nuxt is Vue’s meta-framework, and its SEO advantage is one default:
server-side rendering. A route that keeps that default ships complete HTML,
not the empty shell a plain Vue SPA ships — but it’s a per-route outcome, not a
project-wide guarantee.
ssr: falseor arouteRulesoverride can flip any route to CSR or hybrid, so verify the actual route. - Rendering strategy is the foundation, decided per route — it decides
everything before meta, schema, or sitemaps. Modes: SSR (default), SSG
(
nuxt generate), hybrid (routeRules), SPA (ssr: false, avoid for indexed content), edge. - Hybrid
routeRulesmix modes per URL;swr/isrregenerate in the background; Nuxt Islands cut hydration cost and help INP. - Googlebot crawls → renders (queued, not instant) → indexes; takes the most restrictive directive across raw vs. rendered HTML. Rendering is ~20× crawl cost. SSR/SSG close the timing gap.
- AI-crawler rendering is provider-specific — CSR depends on client execution that is not covered by one shared contract, so SSR/SSG maximizes AI visibility.
- Beyond first-load HTML: verify hydration/payload independently (server HTML
≠ proof of successful hydration or client-nav parity), watch for
<ClientOnly>hiding content from crawlers even on universal routes, and confirm direct HTTP status/redirects withcurl -Irather than trusting a client-rendered error page. - Nitro and deployment presets (Node, Cloudflare, Vercel, Netlify, static) can differ in runtime APIs, caching, streaming, and regions — test cache headers and production parity per route, don’t assume presets behave identically.
- Meta tags:
useSeoMeta()for SEO/social (type-safe),useHead()for the rest of the head, server-only variants when reactivity isn’t needed. Layer:nuxt.config.ts→app.vue→ page. Don’t putuseSeoMeta()in a layout. OG images need absolute URLs. Calling an API proves the API ran, not what a direct response emits — confirm with View Source/curl. @nuxtjs/seo(Harlan Wilton) is an optional third-party toolkit (v5.x, actively maintained, Nuxt 3,16+/4.x) — not part of Nuxt core. It bundles robots, sitemap, OG image, Schema.org, canonical, and link-checker, but installing it doesn’t itself prove correct output. Sitemap: onlylastmodmatters. Robots: blocks non-prod by default; per-bot AI rules.@nuxt/image+ CWV: never lazy-load the LCP image; always setwidth/height(CLS). Targets: LCP ≤ 2,5s, INP ≤ 200ms, CLS ≤ 0,1.- Don’t use dynamic rendering — Google deprecated it; Nuxt’s SSR/SSG already serve full HTML.
Resmi dokümantasyon
Nuxt ve arama motorlarından birincil kaynak dokümantasyon.
Nuxt
- Nuxt — Oluşturma Kavramları — evrensel, istemci tarafı ve hibrit (
routeRules) oluşturma ve tarayıcıların neden sunucu tarafından oluşturulan rotaları tercih ettiği. - Nuxt — SEO ve Meta (başlangıç) —
useSeoMeta(),useHead()ve head yönetimi. - Nuxt —
useSeoMetacomposable — sunucuya özel kullanım dahil tip güvenli meta API referansı. - Nuxt — Sunucu Motoru (Nitro) — dağıtım ön ayarları, platformlar arası çıktı ve çalışma zamanı/önbelleğe alma davranışının farklılaşabileceği yerler.
- Nuxt — Nuxt Yaşam Döngüsü — sunucu oluşturma, payload aktarımı ve hidrasyon ayrı aşamalar olarak.
- Nuxt Image —
<NuxtImg>, duyarlı formatlar ve Core Web Vitals için sağlayıcı yapılandırması. - Nuxt Modülleri’nde
@nuxtjs/seo— modül kataloğu girişi: güncel sürüm, indirmeler ve ayrıca kurulan bir paket olduğu.
- JavaScript SEO temellerini anlayın — tarama → işleme → dizine ekleme hattı ve taranabilir bağlantılar (framework’ten bağımsız; Google’ın belgeleri Nuxt’u ismen belirtmez).
- Dinamik İşleme (kullanımdan kaldırılmış geçici çözüm) — Google’ın bunu neden kullanımdan kaldırdığı ve bunun yerine ne kullanılacağı (SSR, statik işleme, hidrasyon).
Kaynaktan alıntılar
Nuxt, Google ve kendi yazılarımdan kayıtlı ifadeler. Her arama motoru / Nuxt bağlantısı, kaynak sayfadaki alıntılanan pasaja atlayan derin bir bağlantıdır.
Nuxt — SEO için işleme
- “Indexing and updating the content delivered via client-side rendering takes more time.” (çeviri) «İstemci tarafı işleme yoluyla sunulan içeriğin dizine eklenmesi ve güncellenmesi daha fazla zaman alır.» Alıntıya git
- “Web crawlers can directly index the page’s content, which makes Universal rendering a great choice for any content that you want to index quickly.” (çeviri) «Web tarayıcıları sayfanın içeriğini doğrudan dizine ekleyebilir; bu da Universal işlemeyi hızlıca dizine eklemek istediğiniz herhangi bir içerik için harika bir seçim haline getirir.» Alıntıya git
Google — JavaScript işleme ve dinamik işleme
- “Google processes JavaScript web apps in three main phases: 1. Crawling 2. Rendering 3. Indexing.” (çeviri) «Google, JavaScript web uygulamalarını üç ana aşamada işler: 1. Tarama 2. İşleme 3. Dizine ekleme.» Alıntıya git
- “Dynamic rendering is a workaround and not a long-term solution for problems with JavaScript-generated content in search engines. Instead, we recommend that you use server-side rendering, static rendering, or hydration as a solution.” (çeviri) «Dinamik işleme, arama motorlarında JavaScript ile üretilen içerik sorunları için geçici bir çözümdür ve uzun vadeli bir çözüm değildir. Bunun yerine, çözüm olarak sunucu tarafı işleme, statik işleme veya hidrasyon kullanmanızı öneririz.» Alıntıya git
Patrick Stox (kendi çalışmam — JavaScript SEO: Kesin Rehber)
- “Any kind of SSR, static rendering, and prerendering setup is going to be fine for search engines. Gatsby, Next, Nuxt, etc., are all great.” (çeviri) «Her türlü SSR, statik işleme ve ön işleme kurulumu arama motorları için sorunsuz olacaktır. Gatsby, Next, Nuxt vb. hepsi harika.»
- “There is no fixed timeout for the renderer… It’s really patient, and you should not be concerned.” (çeviri) «İşleyici için sabit bir zaman aşımı yoktur… Gerçekten sabırlıdır ve endişelenmemelisiniz.»
- “JavaScript is not bad for SEO, and it’s not evil. It’s just different from what many SEOs are used to.” (çeviri) «JavaScript SEO için kötü değildir ve kötü de değildir. Sadece birçok SEO uzmanının alıştığından farklıdır.»
Nuxt SEO kontrol listesi
Bir Nuxt sitesinin arama ve yapay zeka tarayıcıları için ayarlandığını doğrulamak için hızlı bir geçiş:
- İndekslenmesini istediğiniz içerik sunucuda veya derleme zamanında (SSR veya
SSG) işlenir — SPA modunda değil (
ssr: false). - Kaynak Görünümü ile önemli içeriğin ham HTML’de olduğu ve URL İnceleme ile Google’ın bunu işlediği doğrulandı.
-
useSeoMeta()sayfa bileşenlerinde kullanılıyor; sayfa etiketlerini geçersiz kılan paylaşılan bir düzende değil. -
ogImagemutlak bir URL kullanır (göreli değil). -
app.vueiçinde bir başlık şablonu bir kez ayarlanır; sayfa başına başlıklar/açıklamalar benzersizdir. -
@nuxtjs/sitemapbir XML site haritası oluşturuyor;lastmoddoğru vechangefreq/priority’ye güvenmiyorsunuz. -
@nuxtjs/robotsyapılandırıldı; üretim dışı otomatik engelleme yanlışlıkla üretime uygulanmıyor. -
robots.txtJS/CSS’inizi engellemiyor. - Kanonik URL’ler mutlak ve sayfa başına (
nuxt-seo-utils). - LCP görseli hızlı yüklenir (tembel değil); tüm görsellerde
width/height(CLS) var. - Gezinme için gerçek
<a href>bağlantıları /<NuxtLink>—<div @click>yönlendirme yok. -
@nuxt/contentkullanılıyorsa,@nuxtjs/seomodüller dizisinde ondan önce yüklenir. - Dinamik işleme hiçbir yerde kullanılmıyor.
Zihinsel modeller
1. İşleme stratejisi her şeyden önce gelir. Meta etiketleri, şema ve site haritaları tek bir kararın sonucudur: HTML’in nasıl üretildiği. Başka bir şeyi hata ayıklamadan önce “bu içerik sunucuda işleniyor mu, statik olarak mı üretiliyor, yoksa istemcide mi işleniyor?” sorusunu yanıtlayın.
2. SSR varsayılandır — göreviniz çoğunlukla onu bozmamaktır.
Nuxt varsayılanları doğru yöne işaret eder. Çoğu Nuxt SEO hatası, birinin
ssr: false ayarlaması, JS/CSS’i engellemesi veya ham HTML ile çakışan JavaScript
yoluyla sinyal enjekte etmesidir.
3. İşleme modunu içerik türüne göre seçin.
- Çoğunlukla statik (blog, dokümantasyon, pazarlama) → SSG (
prerender: true). - Her zaman taze / dinamik → SSR.
- Statik hız isteyen saatlik/günlük içerik →
swr/isr. - Giriş arkasında, indekslenmeyen → SPA (
ssr: false) uygundur. - Sıralanmasını veya AI tarafından alıntılanmasını istediğiniz herkese açık içerik → asla SPA.
4. Her sinyal için HTML önce, JS sonra. İçerik, meta, kanonik, robots yönergeleri ve bağlantıların tümü sunucuda işlenen HTML’de olmalıdır. Google, ham ve işlenmiş arasında en kısıtlayıcı yönergeyi alır; AI tarayıcıları yalnızca ham olanı görür. JS ile enjekte edilen SEO bir yedek plan, asıl plan değil.
5. Modülleri kullanın, ancak ne yaptıklarını anlayın.
@nuxtjs/seo işten tasarruf sağlar, ancak üretim dışı robots otomatik engelleme,
lastmod-yalnızca site haritası gerçeği ve mutlak URL kanonikleri hâlâ sizin
sorumluluğunuzdadır.
Nuxt SEO — kopya kağıdı
İşleme modları
| Mod | Yapılandırma | SEO | En uygun |
|---|---|---|---|
| Evrensel / SSR | ssr: true (varsayılan) | ✅ En iyi | Dinamik / kişiselleştirilmiş |
| Statik / SSG | nuxt generate | ✅ En iyi | Bloglar, dokümantasyon, pazarlama |
| Hibrit | routeRules | ✅ En iyi | Büyük karışık içerikli siteler |
| SPA / CSR | ssr: false | ⚠️ İndeksleme için zayıf | Panolar, yönetim |
| Uç tarafı | Dağıtım hedefi | ✅ Düşük TTFB | Küresel performans |
Composable’lar
| Kullanım | Başvurulan |
|---|---|
| SEO + sosyal meta etiketleri | useSeoMeta() (tip güvenli) |
| Başlık şablonları, script’ler, link etiketleri, html öznitelikleri | useHead() |
| Statik meta için istemci yeniden yürütmesini atla | useServerHead() |
@nuxtjs/seo modülleri
| Modül | Görev |
|---|---|
@nuxtjs/robots | robots.txt + meta robots + X-Robots-Tag (varsayılan olarak üretim dışını engeller) |
@nuxtjs/sitemap | XML site haritası (yalnızca lastmod önemlidir; 50 bin URL üzerinde otomatik indeks) |
nuxt-og-image | Dinamik OG görselleri |
nuxt-schema-org | JSON-LD yapılandırılmış veri |
nuxt-seo-utils | Kanonik URL’ler (utm_*/fbclid/gclid’i kaldırır), breadcrumb’lar |
nuxt-link-checker | Derleme zamanında bozuk bağlantılar |
Fast rules
- Install everything:
npx nuxt module add seo. - OG images: absolute URLs only.
- LCP image:
loading="eager"; all images needwidth/height(CLS). - CWV targets: LCP ≤ 2,5s, INP ≤ 200ms, CLS ≤ 0,1.
- Never block JS/CSS in robots.txt.
- Dynamic rendering: deprecated — Nuxt’s SSR/SSG replace it.
- AI crawlers: no JavaScript → SPA content is invisible to them.
Bir Nuxt sayfasının gerçekte ne gönderdiğini görün
Nuxt SEO sorununun tamamı tek bir kontrole indirgenir: içeriğiniz sunucunun gönderdiği ham HTML’de mi, yoksa yalnızca JavaScript çalıştıktan sonra mı? Ham HTML’deyse, sunucu tarafında oluşturuyorsunuz demektir ve tarayıcılar (ve yapay zeka botları) bunu okuyabilir.
Ham HTML’i getirin ve içeriğinizi arayın
macOS / Linux:
# Raw HTML as the server sends it — before any client JS runs
curl -sL -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
https://example.com/page/ -o raw.html
# Is your headline actually in the server HTML? (empty = client-rendered)
grep -o "Your headline text" raw.htmlWindows (PowerShell):
$ua = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Invoke-WebRequest -Uri "https://example.com/page/" -UserAgent $ua -OutFile raw.html
Select-String -Path raw.html -Pattern "Your headline text"Metniniz tarayıcıda görünüyor ancak raw.html içinde yoksa, sayfa istemci tarafında oluşturuluyor demektir — rotayı SSR’a çevirin veya önceden oluşturun. (Düz bir curl JS çalıştıramaz; oluşturulmuş DOM için URL Inspection veya başsız-Chrome tarayıcısı kullanın.)
JS/CSS’i engellemediğinizi doğrulayın
macOS / Linux:
curl -sL https://example.com/robots.txt | grep -iE "disallow.*\.(js|css)|Disallow:\s*/(_nuxt|_ipx|assets)"Disallow (Nuxt’un derleme çıktısı) veya /_nuxt/ (/_ipx/
optimize edici) ile eşleşen bir @nuxt/image, oluşturmayı bozar — neredeyse her zaman bir hatadır.
Statik yapılandırma parçacığı (nuxt.config.ts)
export default defineNuxtConfig({
modules: ['@nuxtjs/seo'], // robots, sitemap, og-image, schema-org, utils
site: { url: 'https://mysite.com' }, // required for absolute canonicals + sitemap
routeRules: {
'/blog/**': { prerender: true }, // SSG for content
'/admin/**': { ssr: false }, // SPA for the dashboard (won't be indexed)
},
}) Nuxt SEO için Araçlar
- URL Inspection (Google Search Console) — gerçeğin kaynağı. Canlı bir test çalıştırın ve oluşturulmuş HTML, ekran görüntüsü ve sayfa kaynaklarını kontrol ederek Nuxt içeriğinizin gerçekten oluşturulduğunu ve hiçbir şeyin engellenmediğini doğrulayın.
@nuxtjs/seo/ nuxtseo.com — Harlan Wilton’ın modül paketi; geliştirici araçları paneli geliştirme sırasında oluşturulan robots, sitemap, schema ve OG görsellerinizi gösterir.- Nuxt DevTools — head etiketlerini, rota kurallarını ve her rotanın hangi oluşturma modunu kullandığını inceleyin.
- Rich Results Test — herhangi bir oluşturma değişikliğinden sonra
nuxt-schema-orgJSON-LD’nin oluşturulan çıktıda mevcut olduğunu doğrulayın. - Ahrefs Site Audit / Screaming Frog (JS oluşturma modu) — tüm Nuxt uygulamasında ham ve oluşturulmuş HTML’i karşılaştırmak için JS oluşturma açık ve kapalıyken tarayın ve CSR boşluklarını yakalayın.
- Lighthouse / PageSpeed Insights —
@nuxt/imageve Nuxt Islands çalışması için Core Web Vitals (LCP, INP, CLS). - Bing Webmaster Tools — Bing’in tarama/dizin görünümü ve IndexNow gönderimlerinin göründüğü yer.
Kaçınılması gereken Nuxt SEO hataları
Gerçek Nuxt sitelerinde tekrar tekrar ortaya çıkan somut hatalar — trafik düştükten sonra teşhis etmek yerine, bunları yayınlamadan önce önleyin.
Dizine eklenmesini istediğiniz içerikte ssr: false kullanmak
En maliyetli Nuxt SEO hatası. SPA modu, düz Vue’un sahip olduğu aynı boş kabuk sorununu gönderir — arama motorlarının içeriği doldurmak için bir oluşturma kuyruğunun tamamlanmasını beklemesi gerekir. Yapay zeka tarayıcı oluşturma sözleşmeleri sağlayıcıya göre değişir, bu nedenle yalnızca ilk HTML’i getiren bir tarayıcı sayfa içeriğini kaçıracaktır.
Neden yanlış: Nuxt’u düz Vue’dan daha kolay dizine eklenebilir yapan tek varsayılandan (SSR) gönüllü olarak vazgeçiyorsunuz.
Bunun yerine ne yapmalı: herkese açık ve dizine eklenebilir her şey için ssr: true (varsayılan) bırakın. ssr: false’ı gerçekten dizine eklenmeyen yüzeyler için ayırın — oturum açılmış
panolar, yönetim panelleri — genel bir yapılandırma değişikliği yerine routeRules aracılığıyla.
useSeoMeta()’yı paylaşılan bir yerleşime koymak
Bir layout bileşeni içinde başlık/açıklama ayarlamak verimli görünür — tek bir yer,
her yere uygulanır — ancak bu, o layout’u kullanan her sayfanın aynı genel etiketleri
alması ve sayfa düzeyindeki useSeoMeta() çağrılarının işleme sırasına bağlı olarak
ez gelebilmesi anlamına gelir.
Neden yanlış: benzersiz, sayfaya özgü başlıklar ve açıklamalar temel alaka sinyalleridir; layout düzeyindeki bir varsayılan, hepsini tek bir dizeye indirger.
Bunun yerine ne yapmalı: genel geri dönüşleri app.vue içinde bir kez ayarlayın
(başlık şablonu, OG varsayılanları), ardından her sayfa bileşeninin içinde o sayfanın
gerçek başlığı ve açıklamasıyla useSeoMeta() çağırın.
Göreli bir ogImage URL’si göndermek
ogImage: '/social.png' tarayıcıda iyi görünür ve Facebook, LinkedIn veya X onu
almaya çalıştığında tamamen başarısız olur, çünkü sosyal tarayıcılar göreli yolları
sitenize göre çözümlemez.
Neden yanlış: sosyal platformlar görseli almak için mutlak bir URL’ye ihtiyaç duyar; göreli bir yol onların tarafından hiçbir şeye çözümlenmez.
Bunun yerine ne yapmalı: her zaman tam bir https:// URL’si iletin ve
site.url içinde nuxt.config.ts ayarlayın, böylece @nuxtjs/seo modülleri sizin
için otomatik olarak mutlak URL’ler oluşturabilir.
Dinamik işlemeye başvurmak
Bilinen botlara önceden oluşturulmuş bir anlık görüntü ve diğer herkese SPA sunmak yıllar önce meşru bir geçici çözümdü. Google o zamandan beri bunu doğrudan dile getirdi: “dynamic rendering is a workaround and not a long-term solution.”
Neden yanlış: yalnızca yapılandırdığınız botlara hizmet eder, diğer her şeyi (Bing, çoğu AI tarayıcısı) kaçırır ve bakımı yapılacak gerçek bir altyapı ekler — Nuxt’un kendi SSR/SSG’sinin zaten çözdüğü bir sorun için.
Bunun yerine ne yapmalı: SSR veya nuxt generate kullanın ve dinamik işlemeyi
tamamen atlayın. Bir Nuxt sitesinin buna ihtiyaç duyduğu bir senaryo yoktur.
/_nuxt/ içinde /_ipx/ veya robots.txt yolunu engellemek
Kapsamlı bir Disallow: /assets/ veya aşırı hevesli bir robots kuralı yanlışlıkla
Nuxt’un derleme çıktı dizinini (/_nuxt/) veya @nuxt/image optimize edici yolunu
(/_ipx/) yakalayabilir.
Neden yanlış: Googlebot sayfayı oluşturan JS/CSS’i getiremezse, SSR çıktınızın göründüğü gibi olduğunu doğrulayamaz — ve istemci tarafı iyileştirmeler onun için sessizce işlenmeyi durdurur.
Bunun yerine ne yapmalı: derleme çıktısı veya görsel optimize edici yollarını asla
engellemeyin. Yönlendirme veya modül yapılandırmasına dokunan her dağıtımdan sonra
robots.txt dosyasını yalnızca başlangıçta değil, kontrol edin.
Üretim dışı robots bloğunu lansmandan sonra etkin bırakmak
@nuxtjs/robots varsayılan olarak üretim dışı ortamlarda tüm tarayıcıları engeller —
hazırlık için iyi bir güvenlik ağıdır, ancak karar vermek için ortam değişkenlerini
okur ve yanlış yapılandırılmış bir NODE_ENV veya önizleme dağıtım ayarı, üretimde
de tetiklenmesine neden olabilir.
Neden yanlış: site tarayıcıda tamamen iyi görünürken robots.txt sessizce her
şeyi engeller ve birisi fark edene kadar hiçbir şey dizine eklenmez.
Bunun yerine ne yapmalı: herhangi bir dağıtım veya ortam değişikliğinden sonra
https://yoursite.com/robots.txt adresini doğrudan getirin ve kapsamlı bir
Disallow: / olmadığını doğrulayın.
Nuxt SEO için Sürekli KPI’lar
İşleme kurulumunuz doğru olduğunda takip edilecek devam eden sayılar — tek seferlik kontroller değil, uygulama değiştikçe gerilemeleri yakalayan yinelenen sinyaller.
Temel Web Verileri (LCP, INP, CLS)
Size ne söyler: gerçek ziyaretçilerin hızlı ve istikrarlı bir sayfa alıp almadığını — Nuxt Islands/hidrasyon maliyetinden (INP) ve görsel yükleme seçimlerinden (LCP, CLS) doğrudan etkilenir.
Nasıl çekilir: Chrome UX Report’tan saha verileri /tools/crux-tracker/ veya /tools/cwv-checker/ aracılığıyla; sürüm öncesi kontroller için Lighthouse’tan laboratuvar verileri.
Kıyaslama / gerçekçi aralık: Google’ın yayınladığı “iyi” eşikler 75. yüzdelik dilimde LCP ≤ 2,5s, INP ≤ 200ms, CLS ≤ 0,1’dir — bunlar CrUX’un kendisinin kullandığı geçer/kalır çizgileridir, benim uydurduğum bir sayı değil. “İyi” içinde nerede olduğunuz büyük ölçüde görsel ağırlığınıza ve ne kadar hidrasyon yaptığınıza bağlıdır.
Sıklık: CrUX saha verileri 28 günlük kayan bir pencerede güncellenir — aylık kontrol edin ve görseller, yazı tipleri veya hidrasyonda herhangi bir değişiklikten hemen sonra kontrol edin.
İşlenmiş ve ham HTML eşitliği
Size ne söyler: arama motorlarının ve yapay zeka tarayıcılarının gerçekten
görebildiği içeriğin (ham HTML) bir ziyaretçinin tarayıcıda gördüğüyle (işlenmiş
DOM) eşleşip eşleşmediğini — ssr değiştirilirse veya bir rota CSR’ye geri dönerse
oluşan temel Nuxt SEO riski.
Nasıl çekilir: /tools/render-gap/ bir URL için ham ve işlenmiş HTML’i karşılaştırır; Google tarafından yetkili görünüm için GSC’nin URL İnceleme → “Taranan Sayfayı Görüntüle” özelliğini kullanın.
Kıyaslama / gerçekçi aralık: bu ikili bir kontrol, bir aralık değil — ana anahtar içeriğiniz (başlık, gövde metni, iç bağlantılar) ham HTML’de bulunmalı, kesinlikle. Dizine eklenmesini veya alıntılanmasını istediğiniz bir sayfadaki herhangi bir boşluk, tolere edilecek bir sayı değil, düzeltilmesi gereken bir gerilemedir.
Sıklık: routeRules, düzenler veya ssr yapılandırmasına dokunan her
dağıtımdan sonra; aksi takdirde aylık olarak ana şablonları spot kontrol edin.
Dizin kapsamı (Sayfa Dizinleme raporu)
Size ne söyler: gönderdiğiniz URL’lerin kaçını Google’ın gerçekten dizine aldığını ve geri kalanının neden hariç tutulduğunu (yinelenen, taranmış-ancak- dizinlenmemiş, engellenmiş vb.) — işleme sorunlarının sonunda ortaya çıktığı aşağı yönlü sinyal.
Nasıl çekilir: Search Console → Sayfa Dizinleme raporu, Nuxt sitenizin URL desenlerine göre filtrelenmiş.
Kıyaslama / gerçekçi aralık: evrensel bir sağlıklı yüzde yok — bu, rota yapınızın kaç tane neredeyse yinelenen veya ince URL ürettiğine bağlıdır. Hedef bir sayıyı değil, eğilimi ve hariç tutma nedenlerini izleyin.
Sıklık: işleme modu geçişi sırasında ve sonrasında haftalık; aksi takdirde aylık.
Yapay zeka tarayıcı erişimi
Size ne söyler: GPTBot, ClaudeBot, PerplexityBot ve benzeri yapay zeka
tarayıcılarının sayfalarınızı gerçekten getirip getiremediğini — Google’dan ayrı,
çünkü bu botlar genellikle JavaScript çalıştırmaz ve yalnızca robots.txt dosyanızın
erişmelerine izin verdiği ham HTML’i okur.
Nasıl çekilir: /tools/ai-crawler-checker/ ile hiçbir yapay zeka kullanıcı aracısının engellenmediğini doğrulayın; botların yalnızca izinli değil, gerçekten sayfa istediğini doğrulamak için sunucu günlükleri.
Kıyaslama / gerçekçi aralık: size dürüstçe verebileceğim bir alıntı oranı kıyaslaması yok — bir yapay zeka yanıt motorunun sizi ne sıklıkla alıntıladığı, sorgu alanına ve rekabete bağlıdır, Nuxt yapılandırmasının doğrudan kontrol ettiği bir şey değil. Uydurma bir alıntı yüzdesini değil, erişimi (izin verilen vs. engellenen) izleyin.
Sıklık: her robots.txt veya @nuxtjs/robots yapılandırma değişikliğinden sonra;
aksi takdirde aylık günlük spot kontrolü.
Kendinizi test edin: Nuxt SEO
Bir Nuxt sitesini arama için optimize etme hakkında beş hızlı soru. Her biri için bir yanıt seçin, ardından kontrol edin.
Zaman ayırmaya değer kaynaklar
İlgili yazılarım
- JavaScript SEO: Kesin Bir Kılavuz — işleme, DOM eşitliği, en kısıtlayıcı yönerge kuralı ve SSR/statik/ön işlemenin (Nuxt dahil) arama için neden uygun olduğuna dair tam kılavuzum.
- Teknik SEO Başlangıç Kılavuzu — işleme ve taramanın daha büyük resimde nereye oturduğu.
Konuşmalarım
- JavaScript SEO — Ungagged 2019 (SlideShare) — Googlebot’un sürekli güncellenen Chromium’u, işlemenin yaklaşık 20 katı tarama maliyeti, karma yönlendirme yerine History API ve Google’ın JS ile eklenen kanonikleri nasıl ele aldığı. (Kalıcı feragat: bu sunumdaki dinamik işleme tavsiyesi artık güncel değil — Google bunu kullanımdan kaldırdı.)
Sektörden
- Nuxt — Rendering Concepts (resmî) — evrensel ve istemci tarafı render ile tarayıcıların neden SSR’ı tercih ettiği.
- Nuxt — SEO and Meta (resmî) —
useSeoMeta()veuseHead(), başlangıç referansı. - Learn SEO with Nuxt (Harlan Wilton / nuxtseo.com) — geliştirici odaklı en kapsamlı Nuxt SEO rehberi, güncel tutulur.
- harlan-zw/nuxt-seo (GitHub) —
@nuxtjs/seomodül paketinin kaynağı. - Nuxt Image (resmî) —
<NuxtImg>ve Core Web Vitals optimizasyonu. - Optimize Nuxt Performance (DebugBear) — Nuxt Core Web Vitals düzeltmeleri üzerine uygulayıcı bir anlatım.
- Nuxt 3 Rendering Modes (RisingStack) — SSR, SSG ve hibrit render’ın teknik karşılaştırması.
- r/TechSEO — render/dizinleme hata ayıklama topluluğu.
Videolar
- Google Search Central (YouTube) — Martin Splitt’in JavaScript SEO serisi, Google’ın JS uygulamalarını nasıl taradığını, render ettiğini ve dizinlediğini anlatan en iyi resmî anlatımdır; çerçeveden bağımsızdır ancak doğrudan Nuxt için geçerlidir. Kanal
Değişiklik günlüğü
8 Ağu 2026 tarihinde güncellendi.
Editoryal özet ve kaydedilen değişiklik ayrıntıları.Değişiklik ayrıntıları
-
Ayrıntılı değişiklik notları şu anda İngilizce olarak mevcut.
Tam karşılaştırma kullanılamıyor — bu sürüm için önceki anlık görüntü arşivlenmemiş.
8 Ağu 2026 tarihinde güncellendi.
Editoryal özet ve kaydedilen değişiklik ayrıntıları.Değişiklik ayrıntıları
-
Ayrıntılı değişiklik notları şu anda İngilizce olarak mevcut.
Tam karşılaştırma kullanılamıyor — bu sürüm için önceki anlık görüntü arşivlenmemiş.
3 Ağu 2026 tarihinde güncellendi.
Editoryal özet ve kaydedilen değişiklik ayrıntıları.Değişiklik ayrıntıları
-
Ayrıntılı değişiklik notları şu anda İngilizce olarak mevcut.
Tam karşılaştırma kullanılamıyor — bu sürüm için önceki anlık görüntü arşivlenmemiş.
27 Tem 2026 tarihinde güncellendi.
Editoryal özet ve kaydedilen değişiklik ayrıntıları.Değişiklik ayrıntıları
-
Ayrıntılı değişiklik notları şu anda İngilizce olarak mevcut.
Tam karşılaştırma kullanılamıyor — bu sürüm için önceki anlık görüntü arşivlenmemiş.
18 Tem 2026 tarihinde güncellendi.
Editoryal özet ve kaydedilen değişiklik ayrıntıları.Değişiklik ayrıntıları
-
Ayrıntılı değişiklik notları şu anda İngilizce olarak mevcut.
-
Ayrıntılı değişiklik notları şu anda İngilizce olarak mevcut.
-
Ayrıntılı değişiklik notları şu anda İngilizce olarak mevcut.
-
Ayrıntılı değişiklik notları şu anda İngilizce olarak mevcut.
-
Ayrıntılı değişiklik notları şu anda İngilizce olarak mevcut.
Tam karşılaştırma kullanılamıyor — bu sürüm için önceki anlık görüntü arşivlenmemiş.