Panduan Nuxt SEO
Nuxt ships rendering sisi server oleh default, tetapi itu's sebuah per-route setting, tidak sebuah jaminan — penuh HTML untuk crawler hanya pada routes itu pertahankan ini. rendering modes, useSeoMeta(), @nuxtjs/seo toolkit, hydration dan Nitro caveats, Core Web Vitals, dan mistakes itu diam-diam cost Anda.
1 sinyal bukti di halaman ini
- Alat aktif terkaitCore Web Vitals History & Competitor Comparison
Nuxt server-renders halaman oleh default, so sebuah route itu mempertahankan itu default memberikan crawler sebuah menyelesaikan HTML document alih-alih empty shell sebuah plain Vue SPA ships — tetapi ini adalah sebuah per-route setting: routeRules atau sebuah global ssr:salah dapat flip apa pun route untuk CSR, so verify sebenarnya route alih-alih assuming dari kerangka kerja name. foundational decision adalah rendering mode per route — SSR (default), SSG melalui nuxt generate, atau hybrid route aturan — karena meta tags, schema, dan sitemaps semua come setelah itu. gunakan useSeoMeta() untuk meta, treat Harlan Wilton's @nuxtjs/seo bundle sebagai sebuah opsional ketiga-party toolkit (tidak Nuxt core) untuk robots/sitemap/OG/schema/canonical, tidak pernah reach untuk dynamic rendering (Google deprecated ini), verify hydration/payload dan Nitro deployment-preset/cache perilaku independently dari server HTML, dan remember itu AI-crawler rendering contracts vary oleh provider — SSR/SSG puts konten di mentah HTML dan maximizes coverage.
TL;DR — Nuxt adalah kerangka kerja dibangun pada top dari Vue, dan ini adalah baik untuk SEO untuk satu main alasan: pada sebuah route itu mempertahankan default, ini membangun halaman pada server, so mesin pencari mendapatkan sebuah finished HTML halaman alih-alih sebuah blank satu mereka’d memiliki untuk fill di themselves. itu’s sebuah per-route setting, tidak sebuah situs-wide jaminan —
routeRulesatau sebuah globalssr: falsedapat turn apa pun diberikan route back ke sebuah plain-Vue-style empty shell. periksa sebenarnya route, tidak hanya project name. paling penting pilihan Anda’ll membuat adalah bagaimana setiap route mendapatkan dirender; semuanya else (meta tags, sitemaps) muncul setelah itu.
Mengapa Nuxt adalah baik untuk SEO — pada routes itu pertahankan default
Vue, pada -nya own, membangun sebuah single-halaman app: server mengirim sebuah hampir-empty HTML shell, dan JavaScript fills di konten setelah ini berjalan di browser. itu’s tricky untuk penelusuran, karena halaman looks empty until JavaScript executes.
Nuxt adalah Vue’s “meta-kerangka kerja” (terjemahan) “meta-kerangka kerja” — sebuah fuller toolkit dibangun sekitar Vue — dan -nya
default memperbaiki itu masalah. Nuxt renders Anda halaman pada server pertama
(rendering sisi server, atau SSR), so ketika Google atau sebuah pengunjung menanyakan untuk sebuah halaman
pada sebuah route itu hasn’t telah switched off SSR, mereka mendapatkan menyelesaikan HTML right
away. Bukti untuk klaim ini Nuxt universal rendering returns server-rendered HTML to the browser by default. Cakupan: Nuxt default universal rendering. Tingkat keyakinan: tinggi · Diverifikasi: Nuxt: Rendering modes Tidak menunggu untuk JavaScript. itu’s single
biggest alasan sebuah Nuxt situs dapat menjadi easier untuk mendapatkan terindeks daripada sebuah plain Vue app —
tetapi ini adalah sebuah route-oleh-route outcome, tidak sesuatu kerangka kerja name jaminan.
sebuah route dengan ssr: false, atau satu itu leans pada <ClientOnly> untuk -nya main
konten, memberikan up itu advantage dan ships yang sama empty-shell masalah plain
Vue memiliki.
satu decision itu penting sebagian besar: rendering, per route
Ketika seseorang menanyakan untuk sebuah spesifik halaman, di mana melakukan -nya HTML mendapatkan dibangun? itu’s sebuah
routeRules-tingkat pertanyaan, tidak sebuah project-wide satu — sebuah Nuxt app dapat mix modes
di seluruh routes. Nuxt memberikan Anda sebuah sedikit options:
«- Server-side rendering (SSR) — the default. The server builds the full page on every request. Great for SEO.
- Static generation (SSG) — run
nuxt generateand Nuxt builds all your pages into plain HTML files ahead of time. Also great for SEO, and perfect for blogs and docs that don’t change every minute. - SPA mode — the page is built in the browser, like plain Vue. Avoid this for anything you want found in search. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian sembilan, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
baik news adalah defaults adalah sudah pointed right cara. Anda mostly memiliki untuk hindari switching them off.
menambahkan judul dan meta tags
di Nuxt Anda set Anda halaman judul dan deskripsi meta dengan sebuah dibangun-di function called
useSeoMeta(). Bukti untuk klaim ini Nuxt provides useSeoMeta for defining SEO and social metadata. Cakupan: Current Nuxt composable. Tingkat keyakinan: tinggi · Diverifikasi: Nuxt: useSeoMeta Anda drop ini ke sebuah halaman dan lulus di Anda judul, deskripsi, dan
social-share image:
useSeoMeta({
title: 'My Page Title',
description: 'A concise, page-specific summary with the key information first',
})itu’s modern, recommended cara. (ada sebuah older function called useHead()
itu masih berfungsi dan adalah digunakan untuk lainnya hal di halaman’s <head>, tetapi untuk SEO
meta tags reach untuk useSeoMeta().) Google memiliki Tidak fixed meta-deskripsi character
limit; snippets adalah kueri-dependent dan truncated untuk fit device, so preview
penting halaman di mereka yang dimaksud language dan script alih-alih coding untuk sebuah quota.
opsional tambahkan-pada: Nuxt SEO modules
Nuxt core tidak generate sebuah robots.txt, sebuah sitemap XML, social-share images,
data terstruktur, atau canonical URLs — itu adalah jobs untuk terpisah, opsional
packages, tidak sesuatu nuxt.config.ts memberikan Anda oleh default. sebuah developer named
Harlan Wilton maintains sebuah free, community bundle dari itu packages — installed sebagai
@nuxtjs/seo — itu covers semua dari them di setelah. ini adalah sebuah ketiga-party toolkit, tidak
bagian dari Nuxt itself, so installing ini tidak secara otomatis membuat apa pun dari itu
output correct; Anda masih konfirmasi sitemap, robots aturan, dan schema ini
generates match apa Anda sebenarnya ingin.
hal orang mendapatkan wrong
Orang assume “Vue/Nuxt tidak dapat menjadi di Google.” (terjemahan) “Vue/Nuxt dapat’t menjadi di Google.” itu adalah sort dari benar untuk plain Vue apps tahun ago — ini tidak benar untuk Nuxt dengan -nya server rendering. nyata mistakes adalah hal like mengubah SSR off oleh accident, atau blocking Anda JavaScript files so Google dapat’t bangun halaman.
ingin deeper versi — penuh menu dari rendering modes, module ecosystem di detail, Core Web Vitals, dan umum mistakes dengan memperbaiki? Switch untuk Advanced tab.
TL;DR — Nuxt’s default adalah rendering sisi server, so sebuah route itu mempertahankan itu default mendapatkan sebuah menyelesaikan DOM alih-alih empty shell sebuah plain Vue SPA ships — tetapi itu’s sebuah per-route outcome:
ssr: falseatau sebuahrouteRulesoverride dapat turn apa pun route ke CSR atau hybrid, so test sebenarnya route, tidak project name. rendering strategy adalah foundational decision — SSR (default), SSG (nuxt generate), atau hybridrouteRules— karena meta, schema, dan sitemaps semua come setelah ini. gunakanuseSeoMeta()untuk meta tags (useHead()untuk rest dari head, server-hanya variants ketika Anda tidak perlu reactivity), dan treat Harlan Wilton’s@nuxtjs/seobundle sebagai sebuah opsional ketiga-party toolkit untuk robots/sitemap/OG/schema/canonical — tidak bagian dari Nuxt core, dan tidak proof -nya output adalah correct until Anda periksa ini. tidak pernah gunakan dynamic rendering (Google deprecated ini). AI-crawler rendering varies oleh provider — SSR/SSG maximizes mentah-HTML coverage. Beyond awal HTML, verify hydration/payload, Nitro deployment presets dan caching, dan direct HTTP status independently — server HTML alone tidak prove apa pun dari itu. biasa JS-SEO aturan masih apply: nyata<a href>tautan, jangan block JS/CSS, watch dirender vs. mentah HTML.
Nuxt adalah Vue’s jawaban untuk SPA masalah
Vue, oleh itself, ships sebuah single-halaman application: sebuah HTML shell plus JavaScript itu membangun DOM di browser. Nuxt adalah meta-kerangka kerja pada top dari Vue (berjalan pada Nitro server mesin di Nuxt 3, dengan Nuxt 4 berikut di 2025), dan -nya seluruh alasan untuk existing — dari sebuah SEO standpoint — adalah itu ini renders pada server oleh default. setiap halaman arrives sebagai sebuah fully-formed HTML document, yang adalah persis apa Googlebot ingin untuk baca tanpa memiliki untuk execute JavaScript pertama. Plain Vue SEO adalah -nya own topic dengan -nya own failure modes; di sini I’m assuming Anda’ve picked Nuxt precisely so Anda tidak memiliki untuk fight SPA masalah.
«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. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian dua puluh lima, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
rendering strategy adalah foundation — decided per route, tidak per project
sebelum meta tags, sebelum schema, sebelum sitemaps, pertanyaan itu decides
semuanya adalah bagaimana melakukan HTML mendapatkan produced untuk ini spesifik route? Nuxt
documents universal (server) rendering sebagai app-wide default, tetapi itu default
tidak sebuah route-tingkat jaminan: sebuah global ssr: false switches seluruh app untuk
client rendering, dan routeRules dapat assign sebuah berbeda mode untuk apa pun URL
pattern. “This is a Nuxt app” (terjemahan) “ini adalah sebuah Nuxt app” tells Anda tidak ada apa pun tentang bagaimana satu particular halaman
renders — Anda memiliki untuk periksa route. Nuxt memberikan Anda five strategies:
| Mode | Bagaimana Anda set ini | SEO impact | Best untuk |
|---|---|---|---|
| Universal / SSR | Default (ssr: true) | Excellent — penuh HTML setiap permintaan | Dynamic, personalized konten |
| Static / SSG | nuxt generate | Excellent — HTML dibangun di deploy time | Blogs, docs, marketing |
| Hybrid | routeRules per route | Excellent — mix per route | besar mixed-konten situs |
| SPA / CSR | ssr: false | Poor untuk terindeks konten | Dashboards, admin panels |
| Edge-side | Deployment target | Excellent — rendah TTFB | Global performa |
official Nuxt docs adalah blunt tentang mengapa rendering sisi klien adalah wrong pilihan
untuk konten: “Indexing and updating the content delivered via client-side rendering
takes more time” (terjemahan) “pengindeksan dan updating konten delivered melalui rendering sisi klien
takes lebih time”, whereas dengan server (universal) rendering “web crawlers can
directly index the page’s content.” (terjemahan) “web crawler dapat
secara langsung indeks halaman’s konten.” Bukti untuk klaim ini Nuxt documents that universal rendering delivers HTML content immediately and allows crawlers to index it directly. Cakupan: Nuxt rendering; no indexing guarantee. Tingkat keyakinan: tinggi · Diverifikasi: Nuxt: Rendering modes
(Nuxt rendering docs.) CSR
(ssr: false) adalah positioned untuk back-office, dashboards, dan games — tidak apa pun
Anda ingin terindeks.
Hybrid rendering adalah power move untuk besar situs. Route aturan di
nuxt.config.ts let Anda atur rendering dan caching mode per URL pattern:
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-sementara-revalidate) dan isr (incremental static regeneration) generate
sebuah halaman statically lalu refresh ini di background — ideal untuk tinggi halaman-count
e-commerce atau news di mana sebuah penuh rebuild pada setiap perubahan tidak practical. Nuxt
Islands (<NuxtIsland>) render components tanpa shipping client-side JavaScript,
cutting hydration cost dan helping INP — Core Web Vital itu’s sebagian besar sering
masalah pada Nuxt apps.
cara verify apa Anda sebenarnya shipped: View Sumber menampilkan mentah HTML server dikirim; jika Anda konten adalah di sana, Anda’re server-rendering. DevTools’ Elements panel menampilkan dirender DOM. dan GSC’s pemeriksaan URL alat menampilkan apa Google sebenarnya fetched dan dirender — sumber kebenaran. jangan trust “it looks fine in my browser.” (terjemahan) “ini looks fine di my browser.”
Bagaimana Googlebot menangani sebuah Nuxt app
Google memproses apa pun JavaScript app di three phases — crawl, render, indeks — dan catch adalah timing: rendering happens di sebuah queue, tidak instantly. sebagai I put ini di my JavaScript SEO guide, renderer adalah patient — “there is no fixed timeout for the renderer… It’s really patient, and you should not be concerned.” (terjemahan) “tidak ada fixed timeout untuk renderer… ini adalah benar-benar patient, dan Anda seharusnya tidak menjadi concerned.” tetapi patient tidak yang sama sebagai fast untuk fresh konten. jika Anda ship sebuah client-dirender halaman, Anda konten tidak exist untuk Google until itu render wave berjalan; SSR dan SSG close itu kesenjangan karena HTML adalah menyelesaikan pada pertama fetch.
Dua lebih hal penting di scale. rendering JavaScript adalah expensive — dari my 2019
JavaScript SEO talk (Ungagged), crawl costs go up oleh roughly 20× setelah Google memiliki untuk render
(directional, tetapi order dari magnitude masih holds). dan Google takes sebagian besar
restrictive directive di seluruh mentah dan dirender HTML — so sebuah noindex injected oleh
JavaScript akan win di atas sebuah index di mentah HTML, dan vice versa. sebuah canonical
injected melalui JavaScript adalah respected hanya jika ada Tidak canonical di mentah HTML
sudah. pertahankan robots dan canonical sinyal di server-dirender HTML, yang
Nuxt melakukan untuk Anda ketika SSR adalah pada.
AI-crawler reality
ini adalah 2026 wrinkle. AI crawler — GPTBot, ClaudeBot, PerplexityBot, dan rest — umumnya jangan execute JavaScript di semua. mereka indeks mentah HTML dan tidak ada apa pun else. So sebuah client-dirender Nuxt halaman adalah effectively invisible untuk AI jawaban mesin. SSR atau SSG tidak hanya better untuk Google di sini; ini adalah price dari entry untuk jawaban mesin optimization too. jika Anda ingin Anda konten cited oleh ChatGPT, Perplexity, atau Claude, ini memiliki untuk menjadi di HTML pada pertama fetch.
Beyond awal HTML: payload, hydration, dan kode status
Getting server HTML dengan Anda konten di ini adalah necessary tetapi tidak sufficient — several hal dapat masih go wrong downstream dari itu pertama respons, dan “I checked View Source” (terjemahan) “I diperiksa View Sumber” tidak cover them:
- Payload dan hydration. Universal rendering mengirim HTML dan sebuah serialized data payload client menggunakan untuk hydrate — attach event listeners dan pick up di mana server left off — tanpa re-fetching. server HTML looking right tidak prove hydration succeeded, itu client navigation reproduces yang sama konten, atau itu payload tidak stale. jika sebuah halaman feels fine pada pertama muat tetapi breaks setelah sebuah client-side route perubahan, itu’s sebuah hydration/payload masalah, tidak sebuah rendering-mode masalah.
<ClientOnly>dan browser-hanya konten. Wrapping sesuatu di<ClientOnly>— umum untuk browser-API-dependent widgets — berarti ini adalah absent dari server respons bahkan pada sebuah jika tidak-universal route. jika Anda main konten, sebuah key tautan, atau Anda meta tags end up di dalam sebuah client-hanya boundary, crawler dan AI bot itu hanya baca mentah HTML miss ini, regardless dari Anda rendering mode setting. Inspect sebenarnya respons, tidak hanya rendering mode config.- kode status dan redirects tidak self-certifying. sebuah Nuxt halaman error
rendering di browser, atau sebuah
navigateTo()/composable-driven redirect, tidak oleh itself prove apa HTTP status direct server respons dikirim. Google’s guidance adalah jelas itu bermakna kode status penting untuk crawling dan pengindeksan — konfirmasi sebenarnya header dengancurl -I, tidak apa client-dirender halaman error displays.
None dari ini adalah sebuah argument terhadap universal rendering — ini adalah reminder itu “the HTML is server-rendered” (terjemahan) “ HTML adalah server-dirender” adalah pertama periksa, tidak terakhir satu.
Nitro, deployment presets, dan cache boundaries
Nuxt’s server output adalah dibangun oleh Nitro, dan Nitro compiles differently depending pada deployment preset Anda target (Node server, Cloudflare, Vercel, Netlify, static, dan others). itu penting untuk SEO karena presets dan adapters dapat differ di runtime APIs tersedia, caching perilaku, streaming mendukung, regional deployment, dan filesystem access — sebuah route aturan atau server handler itu berfungsi di bawah satu preset tidak guaranteed untuk behave identically di bawah lainnya. Dua consequences worth testing explicitly alih-alih assuming:
- Cache keys dan invalidation adalah route-spesifik, tidak automatic.
swrdanisrroute aturan cache dan regenerate output, tetapi sebuah wrong cache key, missing invalidation, atau sebuah caching header set oleh Anda deployment platform dapat sajikan stale, personalized, atau inconsistent HTML untuk crawler. periksa sebenarnya respons age dan apa punCache-Control/Ageheaders pada sebuah langsung URL, tidak hanyarouteRulesconfig. - Production parity tidak guaranteed oleh staging perilaku. sebuah route rendering correctly di local dev atau sebuah preview deployment tidak konfirmasi production preset produces yang sama output — server routes, redirects, dan error menangani langsung di Nitro’s server layer, dan itu layer adalah bagian sebagian besar mungkin untuk differ oleh target. Test production URL secara langsung setelah apa pun deployment perubahan, yang sama cara Anda’d verify rendering mode.
Meta tags: useSeoMeta() dan useHead()
Nuxt’s head management berjalan pada Unhead, dan ini memberikan Anda dua composables untuk berbeda jobs.
useSeoMeta() adalah satu untuk reach untuk untuk SEO dan social meta tags. ini adalah sebuah flat,
jenis-safe API dengan typed parameters. Bukti untuk klaim ini useSeoMeta is a typed Nuxt API for SEO and social meta tags. Cakupan: Current Nuxt composable. Tingkat keyakinan: tinggi · Diverifikasi: Nuxt: useSeoMeta ini helps hindari classic Open Graph
bug dari menggunakan name di mana Anda needed property:
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() adalah umum-purpose head alat untuk semuanya else — scripts, tautan
tags, body attributes, dan judul templates:
useHead({
titleTemplate: '%s · My Site Name',
htmlAttrs: { lang: 'en' },
})reliable layering pattern adalah: static defaults (charset, viewport, favicon) di
nuxt.config.ts → situs-wide judul template dan global OG defaults di app.vue →
halaman-spesifik overrides melalui useSeoMeta() di halaman component. sebuah umum bug adalah
putting useSeoMeta() di sebuah layout alih-alih halaman, yang overwrites spesifik
halaman tags dengan generic ones. dan since mesin pencari baca awal muat, SEO meta
umumnya tidak perlu untuk menjadi reactive — useServerHead() skips client-side
re-execution.
Yang API, dan apa ini sebenarnya proves:
| API | Cakupan | Reactive? | Apa ini proves tentang output |
|---|---|---|---|
useSeoMeta() | Flat, typed SEO/social meta hanya | Ya (default) | Sets typed properties correctly — tidak itu route adalah unique, canonical, atau dapat diindeks; Anda masih own itu logic |
useHead() | Apa pun di <head> — scripts, tautan, attrs, judul template | Ya (default) | umum head control; sama caveat — API gunakan tidak proof dari sebuah correct server respons |
useServerHead() / server-hanya panggilan | sama sebagai di atas | Tidak — server hanya, skips client re-execution | Mengonfirmasi tag ships setelah di server HTML; tidak konfirmasi client navigation re-sets ini jika Anda rely pada ini di sana |
Calling satu dari ini composables tells Anda API ran — ini tidak oleh itself tell
Anda apa sebuah direct server respons atau sebuah client-side route perubahan sebenarnya emits.
Konfirmasi dengan View Sumber atau curl, tidak hanya “I called useSeoMeta().” (terjemahan) “I called tidak terdefinisi.”
@nuxtjs/seo module ecosystem (Harlan Wilton) — opsional, tidak core
Nuxt core tidak ship sebuah sitemap, sebuah robots.txt, OG image generation, atau
Schema.org out dari box — itu adalah di luar Nuxt’s own primitives (useHead,
useSeoMeta, route aturan, rendering modes). community fills itu kesenjangan dengan
Harlan Wilton’s @nuxtjs/seo — sebuah secara terpisah-installed, ketiga-party umbrella
package (nuxtseo.com, saat ini di v5.x, actively maintained, targeting Nuxt
3,16+ dan Nuxt 4) itu bundles six modules. Installing ini memberikan Anda sitemap,
robots, OG-image, dan schema generation — ini tidak oleh itself jaminan
output adalah correct untuk Anda routes; verify apa ini produces yang sama cara Anda’d
verify apa pun else:
| Module | Apa ini melakukan |
|---|---|
@nuxtjs/robots | robots.txt + meta robots + X-Robots-Tag headers |
@nuxtjs/sitemap | Auto sitemap XML dari halaman + dynamic routes |
nuxt-og-image | Dynamic OG images (sebuah Vue template → sebuah image) |
nuxt-schema-org | Schema.org JSON-LD data terstruktur |
nuxt-seo-utils | Canonical URLs, breadcrumbs, defaults |
nuxt-link-checker | bangun-time rusak-tautan detection |
Install seluruh bundle dengan npx nuxt module add seo, atau grab individual modules
(npx nuxt module add sitemap robots). sebuah sedikit behaviors worth knowing:
@nuxtjs/sitemapauto-generates dari Andapages/directory plus dynamic routes, splits ke sebuah sitemap indeks secara otomatis past 50 000 URLs, mendukung i18n multi-language sitemaps, dan memiliki dibangun-di IndexNow mendukung. Satu hal untuk mendapatkan right: Google ignoreschangefreqdanpriority; hanya sebuah accuratelastmodpenting, dan hanya ketika konten genuinely perubahan.@nuxtjs/robotsgeneratesrobots.txt, robots meta tag, danX-Robots-Tagheader — dan oleh default ini disallows semua crawler pada non-production environments, yang adalah persis staging-pengindeksan footgun itu bites headless membangun. ini juga memberikan Anda per-bot aturan, so Anda dapat block GPTBot secara khusus sementara leaving everyone else alone (menjadi intentional — block sebuah AI crawler dan ini tidak akan cite Anda).nuxt-seo-utilsmenangani canonical URLs dan, secara berguna, strips tracking parameters (utm_*,fbclid,gclid) dari canonicals secara otomatis.
nuxt/image dan Core Web Vitals
@nuxt/image adalah image module: automatic responsive srcset, modern formats
(WebP/AVIF), dibangun-di optimization melalui CDN providers, dan lazy memuat. Dua
aturan carry sebagian besar dari SEO nilai:
- tidak pernah lazy-muat LCP image. Anda hero image seharusnya muat eagerly; lazy-memuat ini delays Anda Largest Contentful Paint.
- selalu set
widthdanheightso browser reserves space dan Anda tidak take sebuah Cumulative Layout Shift hit.
<NuxtImg
src="/hero.jpg"
width="1200"
height="630"
alt="Descriptive alt text"
:loading="isHeroImage ? 'eager' : 'lazy'"
format="webp"
/>2026 targets untuk aim untuk (p75): LCP ≤ 2,5s, INP ≤ 200ms, CLS ≤ 0,1. pada Nuxt apps,
INP adalah satu itu tends untuk suffer karena hydration membuat input lag — yang adalah
persis apa Nuxt Islands dan <NuxtIsland> adalah untuk.
Nuxt konten + SEO
jika Anda’re menggunakan @nuxt/content ( markdown/MDX konten module), integration
dengan @nuxtjs/seo adalah straightforward tetapi memiliki satu ordering gotcha: muat @nuxtjs/seo
sebelum @nuxt/content di Anda modules array. Anda dapat lalu set SEO di konten
frontmatter (title, description, robots, ogImage, schemaOrg) dan pull ini
ke Anda [slug].vue template dengan useSeoMeta() setelah fetching konten. ini
adalah Nuxt-native versi dari headless-CMS pattern, dan yang sama “rebuild apa itu
plugin melakukan” (terjemahan) “rebuild apa
plugin melakukan” discipline applies.
umum Nuxt SEO mistakes
- menggunakan SPA mode (
ssr: false) untuk konten Anda ingin terindeks. paling expensive mistake — dan satu itu membuat Anda invisible untuk AI crawler. - Relative URLs untuk OG images.
ogImageharus menjadi sebuah absolute URL atau social previews break. useSeoMeta()di sebuah layout alih-alih halaman — generic tags overwrite halaman-spesifik ones.- Tidak verifying dirender HTML — View Sumber ≠ DevTools ≠ apa Google dirender. gunakan pemeriksaan URL.
- Blocking JS/CSS di
robots.txt— Google tidak akan render dari blocked files. - Leaving staging
noindex/disallow di place setelah launch (atau, conversely, forgetting@nuxtjs/robotsblocks non-prod oleh default dan wondering mengapa prod adalah fine tetapi sebuah custom env tidak). - Lazy-memuat LCP image — tanks Anda LCP.
- Missing
width/heightpada images — CLS. changefreq/prioritydi sitemaps — Google ignores them; hanyalastmodcounts.- Reaching untuk dynamic rendering. Google deprecated ini — “dynamic rendering adalah a workaround dan tidak a long-term solution” (terjemahan) “dynamic rendering adalah sebuah workaround dan tidak sebuah panjang-istilah solusi” — dan ini hanya menyajikan mesin Anda configure ini untuk, missing Bing dan setiap AI crawler. dengan Nuxt Anda tidak pernah perlu ini: SSR dan SSG sudah memberikan crawler menyelesaikan HTML.
llms.txt dan AEO
llms.txt adalah sebuah plain-text file — robots.txt’s cousin — itu helps AI alat navigate
Anda konten. nuxt-llms module auto-generates /llms.txt dan /llms-full.txt
dari Nuxt konten. sebagai dari late 2025 -nya utama consumers adalah MCP server dan AI coding
alat (Cursor, Claude Code) alih-alih ChatGPT atau Perplexity secara langsung, dan ini adalah sebagian besar
berguna untuk documentation situs dan teknis blogs — lebih sedikit so untuk e-commerce atau news.
Worth menambahkan jika Anda’re sebuah docs/dev situs; tidak sebuah priority jika tidak.
Di mana ini fits
Nuxt SEO adalah benar-benar sebuah concrete application dari JavaScript SEO melalui Nuxt’s own conventions — dan ini overlaps heavily dengan SEO untuk sebuah CMS headless topic ketika Anda Nuxt frontend pulls dari sebuah headless backend. principles jangan perubahan; Nuxt hanya memberikan Anda baik defaults dan sebuah strong module ecosystem untuk implement them dengan.
AI summary
sebuah condensed take pada Advanced versi:
- Nuxt adalah Vue’s meta-kerangka kerja, dan -nya SEO advantage adalah satu default:
rendering sisi server. sebuah route itu mempertahankan itu default ships menyelesaikan HTML,
tidak empty shell sebuah plain Vue SPA ships — tetapi ini adalah sebuah per-route outcome, tidak sebuah
project-wide jaminan.
ssr: falseatau sebuahrouteRulesoverride dapat flip apa pun route untuk CSR atau hybrid, so verify sebenarnya route. - rendering strategy adalah foundation, decided per route — ini decides
semuanya sebelum meta, schema, atau sitemaps. Modes: SSR (default), SSG
(
nuxt generate), hybrid (routeRules), SPA (ssr: false, hindari untuk terindeks konten), edge. - Hybrid
routeRulesmix modes per URL;swr/isrregenerate di background; Nuxt Islands cut hydration cost dan help INP. - Googlebot melakukan crawl → renders (queued, tidak instant) → indeks; takes sebagian besar restrictive directive di seluruh mentah vs. dirender HTML. rendering adalah ~20× crawl cost. SSR/SSG close timing kesenjangan.
- AI-crawler rendering adalah provider-spesifik — CSR bergantung pada client execution itu adalah tidak covered oleh satu shared contract, so SSR/SSG maximizes AI visibilitas.
- Beyond pertama-muat HTML: verify hydration/payload independently (server HTML
≠ proof dari successful hydration atau client-nav parity), watch untuk
<ClientOnly>hiding konten dari crawler bahkan pada universal routes, dan konfirmasi direct HTTP status/redirects dengancurl -Ialih-alih trusting sebuah client-dirender halaman error. - Nitro dan deployment presets (Node, Cloudflare, Vercel, Netlify, static) dapat differ di runtime APIs, caching, streaming, dan regions — test cache headers dan production parity per route, jangan assume presets behave identically.
- Meta tags:
useSeoMeta()untuk SEO/social (jenis-safe),useHead()untuk rest dari head, server-hanya variants ketika reactivity tidak needed. Layer:nuxt.config.ts→app.vue→ halaman. jangan putuseSeoMeta()di sebuah layout. OG images perlu absolute URLs. Calling sebuah API proves API ran, tidak apa sebuah direct respons emits — konfirmasi dengan View Sumber/curl. @nuxtjs/seo(Harlan Wilton) adalah sebuah opsional ketiga-party toolkit (v5.x, actively maintained, Nuxt 3,16+/4.x) — tidak bagian dari Nuxt core. ini bundles robots, sitemap, OG image, Schema.org, canonical, dan tautan-checker, tetapi installing ini tidak itself prove correct output. Sitemap: hanyalastmodpenting. Robots: blocks non-prod oleh default; per-bot AI aturan.@nuxt/image+ CWV: tidak pernah lazy-muat LCP image; selalu setwidth/height(CLS). Targets: LCP ≤ 2,5s, INP ≤ 200ms, CLS ≤ 0,1.- jangan gunakan dynamic rendering — Google deprecated ini; Nuxt’s SSR/SSG sudah sajikan penuh HTML.
Dokumentasi resmi
Utama-sumber documentation dari Nuxt dan mesin pencari.
Nuxt
- Nuxt — rendering Concepts — universal, client-side, dan hybrid (
routeRules) rendering, dan mengapa crawler prefer server-dirender routes. - Nuxt — SEO dan Meta (getting dimulai) —
useSeoMeta(),useHead(), dan head management. - Nuxt —
useSeoMetacomposable — jenis-safe meta API reference, including server-hanya usage. - Nuxt — server mesin (Nitro) — deployment presets, cross-platform output, dan di mana runtime/caching perilaku dapat diverge.
- Nuxt — Nuxt Lifecycle — server render, payload transfer, dan hydration sebagai distinct stages.
- Nuxt Image —
<NuxtImg>, responsive formats, dan provider config untuk Core Web Vitals. @nuxtjs/seopada Nuxt Modules — module catalog entry: saat ini versi, downloads, dan itu ini adalah sebuah secara terpisah-installed package.
- memahami JavaScript SEO basics — crawl → render → indeks pipeline dan dapat di-crawl tautan (kerangka kerja-agnostic; Google’s docs jangan mention Nuxt oleh name).
- Dynamic rendering (deprecated workaround) — mengapa Google deprecated ini dan apa untuk gunakan alih-alih (SSR, static rendering, hydration).
Quotes dari sumber
pada—record statements dari Nuxt, Google, dan my own writing. setiap penelusuran-mesin / Nuxt tautan adalah sebuah deep tautan itu jumps untuk quoted passage pada sumber halaman.
Nuxt — rendering untuk SEO
- “Indexing and updating the content delivered via client-side rendering takes more time.” (terjemahan) “pengindeksan dan updating konten delivered melalui rendering sisi klien takes lebih time.” — Nuxt rendering docs. Jump untuk quote
- “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.” (terjemahan) “Web crawler dapat secara langsung indeks halaman’s konten, yang membuat Universal rendering sebuah great pilihan untuk apa pun konten itu Anda ingin indeks quickly.” — Nuxt rendering docs. Jump untuk quote
«Google — JavaScript processing & dynamic rendering » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian sembilan puluh satu, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
«- “Google processes JavaScript web apps in three main phases: 1. Crawling 2. Rendering 3. Indexing.” — Google Search Central docs. Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian sembilan puluh dua, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.) «- “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.” — Google Search Central docs. Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian sembilan puluh dua, bagian kecil dua: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Patrick Stox (my own berfungsi — JavaScript SEO: sebuah Definitive Guide)
«- “Any kind of SSR, static rendering, and prerendering setup is going to be fine for search engines. Gatsby, Next, Nuxt, etc., are all great.”
- “There is no fixed timeout for the renderer… It’s really patient, and you should not be concerned.”
- “JavaScript is not bad for SEO, and it’s not evil. It’s just different from what many SEOs are used to.” » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian sembilan puluh empat, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Nuxt SEO checklist
sebuah quick lulus untuk konfirmasi sebuah Nuxt situs adalah siapkan untuk penelusuran dan AI crawler:
- konten Anda ingin terindeks adalah dirender pada server atau di bangun time (SSR atau
SSG) — tidak SPA mode (
ssr: false). - Confirmed melalui View Sumber itu penting konten adalah di mentah HTML, dan melalui pemeriksaan URL itu Google renders ini.
-
useSeoMeta()adalah di halaman components, tidak sebuah shared layout overwriting halaman tags. -
ogImagemenggunakan sebuah absolute URL (tidak relative). - sebuah judul template adalah set setelah di
app.vue; per-halaman judul/deskripsi adalah unique. -
@nuxtjs/sitemapadalah generating sebuah sitemap XML;lastmodadalah accurate dan Anda’re tidak relying padachangefreq/priority. -
@nuxtjs/robotsadalah configured; non-prod auto-disallow tidak accidentally applying untuk production. -
robots.txtmelakukan tidak block Anda JS/CSS. - Canonicals adalah absolute dan per-halaman (
nuxt-seo-utils). - LCP image memuat eagerly (tidak lazy); semua images memiliki
width/height(CLS). - nyata
<a href>tautan /<NuxtLink>untuk navigation — Tidak<div @click>routing. - jika menggunakan
@nuxt/content,@nuxtjs/seoadalah dimuat sebelum ini di modules array. - Dynamic rendering adalah tidak di gunakan anywhere.
mental models
1. rendering strategy muncul pertama. Meta tags, schema, dan sitemaps adalah downstream dari satu decision: bagaimana HTML mendapatkan produced. jawaban “adalah ini konten server-dirender, statically generated, atau client-dirender?” (terjemahan) “adalah ini konten server-dirender, statically generated, atau client-dirender?” sebelum debugging apa pun else.
2. SSR adalah default — Anda job adalah mostly tidak untuk break ini.
Nuxt poin defaults right cara. sebagian besar Nuxt SEO failures adalah seseorang setting
ssr: false, blocking JS/CSS, atau injecting sinyal melalui JavaScript itu conflict dengan
mentah HTML.
3. Pick rendering mode oleh konten jenis.
- Mostly-static (blog, docs, marketing) → SSG (
prerender: true). - selalu-fresh / dynamic → SSR.
- Hourly/daily konten wanting static speed →
swr/isr. - Behind sebuah login, tidak terindeks → SPA (
ssr: false) adalah fine. - Publik konten Anda ingin diperingkatkan atau cited oleh AI → tidak pernah SPA.
4. HTML-pertama, JS-kedua untuk setiap sinyal. konten, meta, canonical, robots directives, dan tautan semua belong di server-dirender HTML. Google takes paling restrictive directive di seluruh mentah vs. dirender; AI crawler see hanya mentah. JS-injected SEO adalah sebuah fallback, tidak plan.
5. gunakan modules, tetapi memahami apa mereka melakukan.
@nuxtjs/seo saves berfungsi, tetapi non-prod robots auto-disallow, lastmod-hanya
sitemap reality, dan absolute-URL canonicals adalah masih yours untuk mendapatkan right.
Nuxt SEO — cheat sheet
rendering modes
| Mode | Config | SEO | Best untuk |
|---|---|---|---|
| Universal / SSR | ssr: true (default) | ✅ Best | Dynamic / personalized |
| Static / SSG | nuxt generate | ✅ Best | Blogs, docs, marketing |
| Hybrid | routeRules | ✅ Best | besar mixed-konten situs |
| SPA / CSR | ssr: false | ⚠️ Poor untuk pengindeksan | Dashboards, admin |
| Edge-side | Deploy target | ✅ rendah TTFB | Global performa |
Composables
| gunakan | Reach untuk |
|---|---|
| SEO + social meta tags | useSeoMeta() (jenis-safe) |
| judul templates, scripts, tautan tags, html attrs | useHead() |
| Skip client re-execution untuk static meta | useServerHead() |
@nuxtjs/seo modules
| Module | Job |
|---|---|
@nuxtjs/robots | robots.txt + meta robots + X-Robots-Tag (blocks non-prod oleh default) |
@nuxtjs/sitemap | sitemap XML (hanya lastmod penting; auto indeks past 50k URLs) |
nuxt-og-image | Dynamic OG images |
nuxt-schema-org | JSON-LD data terstruktur |
nuxt-seo-utils | Canonical URLs (strips utm_*/fbclid/gclid), breadcrumbs |
nuxt-link-checker | bangun-time rusak tautan |
Fast aturan
- Install semuanya:
npx nuxt module add seo. - OG images: absolute URLs hanya.
- LCP image:
loading="eager"; semua images perluwidth/height(CLS). - CWV targets: LCP ≤ 2,5s, INP ≤ 200ms, CLS ≤ 0,1.
- tidak pernah block JS/CSS di robots.txt.
- Dynamic rendering: deprecated — Nuxt’s SSR/SSG replace ini.
- AI crawler: Tidak JavaScript → SPA konten adalah invisible untuk them.
See apa sebuah Nuxt halaman sebenarnya ships
seluruh Nuxt SEO pertanyaan reduces untuk satu periksa: adalah Anda konten di mentah HTML server mengirim, atau hanya setelah JavaScript berjalan? jika ini adalah di mentah HTML, Anda’re server-rendering dan crawler (dan AI bot) dapat baca ini.
Fetch mentah HTML dan cari Anda konten
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"jika Anda text menampilkan di browser tetapi adalah missing dari raw.html, halaman adalah
client-dirender — flip route untuk SSR atau prerender ini. (sebuah plain curl dapat’t jalankan JS;
untuk dirender DOM gunakan pemeriksaan URL atau sebuah headless-Chrome crawler.)
Konfirmasi Anda tidak blocking JS/CSS
macOS / Linux:
curl -sL https://example.com/robots.txt | grep -iE "disallow.*\.(js|css)|Disallow:\s*/(_nuxt|_ipx|assets)"sebuah Disallow matching /_nuxt/ (Nuxt’s bangun output) atau /_ipx/ ( @nuxt/image
optimizer) akan break rendering — hampir selalu sebuah mistake.
«Static config snippet (nuxt.config.ts) » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus tiga puluh, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
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)
},
}) alat untuk Nuxt SEO
«- URL Inspection (Google Search Console) — the source of truth. Run a live test and check the rendered HTML, screenshot, and page resources to confirm your Nuxt content actually rendered and nothing’s blocked.
@nuxtjs/seo/ nuxtseo.com — Harlan Wilton’s module bundle; the dev tools panel shows your generated robots, sitemap, schema, and OG images in development.- Nuxt DevTools — inspect head tags, route rules, and which rendering mode each route is using.
- Rich Results Test — confirm
nuxt-schema-orgJSON-LD is present in the rendered output after any rendering change. - Ahrefs Site Audit / Screaming Frog (JS-rendering mode) — crawl with JS rendering on vs. off to diff raw vs. rendered HTML across the whole Nuxt app and catch CSR gaps.
- Lighthouse / PageSpeed Insights — Core Web Vitals (LCP, INP, CLS) for the
@nuxt/imageand Nuxt Islands work. - Bing Webmaster Tools — Bing’s crawl/index view and where IndexNow submissions show up. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus tiga puluh lima, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Nuxt SEO mistakes untuk hindari
Concrete mistakes itu tampilkan up repeatedly pada nyata Nuxt situs — mencegah ini sebelum mereka ship, alih-alih diagnosing them setelah traffic drops.
Flipping ssr: false pada konten Anda ingin terindeks
single sebagian besar expensive Nuxt SEO mistake. SPA mode ships yang sama empty-shell masalah plain Vue memiliki — mesin pencari memiliki untuk tunggu untuk sebuah render queue untuk fill di konten. AI-crawler rendering contracts vary oleh provider, so sebuah crawler itu fetches hanya awal HTML akan miss halaman konten.
Mengapa ini adalah wrong: Anda’re voluntarily giving up satu default (SSR) itu membuat Nuxt easier untuk indeks daripada plain Vue.
Apa untuk melakukan alih-alih: leave ssr: true ( default) untuk apa pun publik dan
dapat diindeks. Reserve ssr: false untuk genuinely non-terindeks surfaces — logged-di
dashboards, admin panels — melalui routeRules, tidak sebuah global config flip.
Putting useSeoMeta() di sebuah shared layout
Setting judul/deskripsi di dalam sebuah layout component feels efficient — satu place,
applies di mana-mana — tetapi ini berarti setiap halaman itu menggunakan itu layout mendapatkan yang sama
generic tags, dan halaman-tingkat useSeoMeta() panggilan dapat mendapatkan overwritten depending pada
render order.
Mengapa ini adalah wrong: unique, halaman-spesifik judul dan deskripsi adalah basic relevance sinyal; sebuah layout-tingkat default collapses them semua untuk satu string.
Apa untuk melakukan alih-alih: set global fallbacks setelah di app.vue (judul template, OG
defaults), lalu panggil useSeoMeta() di dalam setiap halaman component dengan itu halaman’s
sebenarnya judul dan deskripsi.
Shipping sebuah relative ogImage URL
ogImage: '/social.png' looks fine di browser dan completely fails ketika
Facebook, LinkedIn, atau X try untuk fetch ini, karena social crawler jangan resolve
relative paths terhadap Anda situs.
Mengapa ini adalah wrong: social platforms perlu sebuah absolute URL untuk fetch image; sebuah relative path resolves untuk tidak ada apa pun dari mereka side.
Apa untuk melakukan alih-alih: selalu lulus sebuah penuh https:// URL, dan set site.url di
nuxt.config.ts so @nuxtjs/seo’s modules dapat bangun absolute URLs untuk Anda
secara otomatis.
Reaching untuk dynamic rendering
Serving sebuah prerendered snapshot untuk known bot dan SPA untuk everyone else adalah sebuah legitimate workaround tahun ago. Google memiliki since called ini out secara langsung: “dynamic rendering is a workaround and not a long-term solution.” (terjemahan) “dynamic rendering adalah sebuah workaround dan tidak sebuah panjang-istilah solusi.”
Mengapa ini adalah wrong: ini hanya menyajikan bot Anda configure, misses semuanya else (Bing, sebagian besar AI crawler), dan menambahkan nyata infrastructure untuk maintain — untuk sebuah masalah Nuxt’s own SSR/SSG sudah solves.
Apa untuk melakukan alih-alih: gunakan SSR atau nuxt generate dan skip dynamic rendering
entirely. ada Tidak scenario di mana sebuah Nuxt situs perlu ini.
Blocking /_nuxt/ atau /_ipx/ di robots.txt
sebuah blanket Disallow: /assets/ atau sebuah overzealous robots aturan dapat accidentally catch
Nuxt’s bangun output directory (/_nuxt/) atau @nuxt/image optimizer path
(/_ipx/).
Mengapa ini adalah wrong: jika Googlebot dapat’t fetch JS/CSS itu membangun halaman, ini dapat’t konfirmasi Anda SSR output adalah apa ini looks like — dan apa pun client-side enhancements silently berhenti rendering untuk ini.
Apa untuk melakukan alih-alih: tidak pernah disallow bangun-output atau image-optimizer paths. periksa
robots.txt setelah setiap deploy itu touches routing atau module config, tidak hanya setelah
di launch.
Leaving non-production robots block active setelah launch
@nuxtjs/robots disallows semua crawler pada non-production environments oleh default —
sebuah baik safety net untuk staging, tetapi ini membaca environment variables untuk decide, dan sebuah
misconfigured NODE_ENV atau preview-deploy setting dapat membuat ini fire di production
too.
Mengapa ini adalah wrong: situs looks completely fine di sebuah browser sementara robots.txt
diam-diam disallows semuanya, dan tidak ada apa pun mendapatkan terindeks until seseorang notices.
Apa untuk melakukan alih-alih: setelah apa pun deploy atau environment perubahan, fetch
https://yoursite.com/robots.txt secara langsung dan konfirmasi ini adalah tidak sebuah blanket
Disallow: /.
Standing KPIs untuk Nuxt SEO
ongoing angka untuk track setelah Anda rendering setup adalah correct — tidak satu-time memeriksa, tetapi recurring sinyal itu catch regressions sebagai app perubahan.
«### Core Web Vitals (LCP, INP, CLS) » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus enam puluh delapan, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Apa ini tells Anda: apakah nyata pengunjung adalah getting sebuah fast, stable halaman — secara langsung affected oleh Nuxt Islands/hydration cost (INP) dan image-memuat choices (LCP, CLS).
cara pull ini: data lapangan dari Chrome UX Report melalui /alat/crux-tracker/ atau /alat/cwv-checker/; data lab dari Lighthouse untuk pre-rilis memeriksa.
Benchmark / realistic range: Google’s published “good” (terjemahan) “baik” thresholds adalah LCP ≤ 2,5s, INP ≤ 200ms, CLS ≤ 0,1 di 75th percentile — itu adalah lulus/fail lines CrUX itself menggunakan, tidak sebuah angka I’m inventing. Di mana Anda land di dalam “good” (terjemahan) “baik” bergantung heavily pada Anda image weight dan bagaimana banyak Anda hydrate.
Cadence: CrUX data lapangan memperbarui pada sebuah rolling 28-day window — periksa monthly, dan immediately setelah apa pun perubahan untuk images, fonts, atau hydration.
Dirender-vs-mentah HTML parity
Apa ini tells Anda: apakah konten mesin pencari dan AI crawler dapat
sebenarnya see ( mentah HTML) matches apa sebuah pengunjung sees di browser ( dirender
DOM) — core Nuxt SEO risk jika ssr mendapatkan flipped atau sebuah route regresses untuk CSR.
cara pull ini: /alat/render-kesenjangan/ diffs mentah vs. dirender HTML untuk sebuah URL; untuk authoritative Google-side view, gunakan GSC’s pemeriksaan URL → “View Crawled Halaman.” (terjemahan) “View di-crawl halaman.”
Benchmark / realistic range: ini adalah sebuah binary periksa, tidak sebuah range — Anda key konten (headline, body copy, tautan internal) seharusnya menjadi present di mentah HTML, penuh berhenti. apa pun kesenjangan pada sebuah halaman Anda ingin terindeks atau cited adalah sebuah regression untuk perbaiki, tidak sebuah angka untuk tolerate.
Cadence: setelah setiap deploy itu touches routeRules, layouts, atau ssr
config; spot-periksa key templates monthly jika tidak.
indeks coverage (halaman pengindeksan report)
Apa ini tells Anda: bagaimana banyak dari Anda submitted URLs Google memiliki sebenarnya terindeks, dan mengapa rest adalah excluded (duplicate, di-crawl-tidak-terindeks, blocked, dan seterusnya.) — downstream sinyal itu rendering masalah eventually surface sebagai.
cara pull ini: Search Console → halaman pengindeksan report, filtered untuk Anda Nuxt situs’s URL patterns.
Benchmark / realistic range: ada Tidak universal healthy percentage — ini bergantung pada bagaimana banyak near-duplicate atau thin URLs Anda route structure generates. Watch trend dan exclusion alasan, tidak sebuah target angka.
Cadence: weekly selama dan setelah sebuah rendering-mode migration; monthly jika tidak.
AI crawler access
Apa ini tells Anda: apakah GPTBot, ClaudeBot, PerplexityBot, dan similar AI
crawler dapat sebenarnya fetch Anda halaman — terpisah dari Google, since ini bot
umumnya jangan execute JavaScript dan baca hanya mentah HTML Anda robots.txt
lets them reach.
cara pull ini: /alat/ai-crawler-checker/ untuk konfirmasi Tidak AI pengguna-agent adalah disallowed; server logs untuk konfirmasi bot adalah sebenarnya requesting halaman, tidak hanya permitted untuk.
Benchmark / realistic range: ada Tidak citation-rate benchmark I dapat memberikan Anda honestly — bagaimana sering sebuah AI jawaban mesin cites Anda bergantung pada kueri space dan competition, tidak sesuatu Nuxt configuration controls secara langsung. Track access (diizinkan vs. blocked), tidak sebuah dibuat-up citation percentage.
Cadence: setelah setiap robots.txt atau @nuxtjs/robots config perubahan; monthly log
spot-periksa jika tidak.
Uji pemahaman Anda: Nuxt SEO
Five quick pertanyaan pada optimizing sebuah Nuxt situs untuk penelusuran. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My related writing
- JavaScript SEO: sebuah Definitive Guide — my penuh guide untuk rendering, DOM parity, paling-restrictive-directive aturan, dan mengapa SSR/static/prerender (Nuxt disertakan) adalah semua fine untuk penelusuran.
- Beginner’s Guide untuk SEO teknis — di mana rendering dan crawling fit di bigger picture.
My speaking
- JavaScript SEO — Ungagged 2019 (SlideShare) — Googlebot’s evergreen Chromium, ~20× crawl cost dari rendering, History API di atas hash routing, dan bagaimana Google menangani JS-injected canonicals. (Standing disclaimer: dynamic-rendering advice di itu deck adalah now outdated — Google deprecated ini.)
dari sekitar industry
- Nuxt — rendering Concepts (official) — universal vs. rendering sisi klien dan mengapa crawler prefer SSR.
- Nuxt — SEO dan Meta (official) —
useSeoMeta()danuseHead(), getting-dimulai reference. - Learn SEO dengan Nuxt (Harlan Wilton / nuxtseo.com) — paling comprehensive developer-focused Nuxt SEO guide, dipertahankan saat ini.
- harlan-zw/nuxt-seo (GitHub) — sumber untuk
@nuxtjs/seomodule bundle. - Nuxt Image (official) —
<NuxtImg>dan Core Web Vitals optimization. - mengoptimalkan Nuxt performa (DebugBear) — sebuah practitioner walkthrough dari Nuxt Core Web Vitals memperbaiki.
- Nuxt 3 rendering Modes (RisingStack) — sebuah teknis perbandingan dari SSR, SSG, dan hybrid rendering.
- r/TechSEO — community untuk rendering/pengindeksan debugging.
Videos
- Google Search Central (YouTube) — Martin Splitt’s JavaScript SEO series adalah best official walkthrough dari bagaimana Google melakukan crawl, renders, dan indeks JS apps; ini adalah kerangka kerja-agnostic tetapi applies secara langsung untuk Nuxt. Channel
Log perubahan
Diperbarui 27 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.
Diperbarui 18 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.