Panduan Nuxt SEO
Nuxt ships rendering sisi server oleh default, tetapi itu's sebuah per-route setting, not sebuah guarantee — full 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 quietly cost Anda.
Bahasa
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 gives crawler sebuah complete 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 actual route alih-alih assuming dari framework name. foundational decision adalah rendering mode per route — SSR (default), SSG via nuxt generate, atau hybrid route aturan — because meta tags, schema, dan sitemaps semua come setelah itu. gunakan useSeoMeta() untuk meta, treat Harlan Wilton's @nuxtjs/seo bundle sebagai sebuah optional ketiga-party toolkit (not 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 raw HTML dan maximizes coverage.
TL;DR — Nuxt adalah framework dibangun pada top dari Vue, dan ini adalah baik untuk SEO untuk one main alasan: pada sebuah route itu mempertahankan default, ini membangun halaman pada server, so mesin pencari get sebuah finished HTML halaman alih-alih sebuah blank one mereka’d memiliki untuk fill di themselves. itu’s sebuah per-route setting, not sebuah situs-wide guarantee —
routeRulesatau sebuah globalssr: falsedapat turn apa pun given route back ke sebuah plain-Vue-style empty shell. periksa actual route, not hanya project name. paling penting choice Anda’ll membuat adalah how setiap route gets rendered; everything else (meta tags, sitemaps) comes setelah itu.
Why Nuxt adalah baik untuk SEO — pada routes itu pertahankan default
Vue, pada -nya own, membangun sebuah single-halaman app: server mengirim sebuah almost-empty HTML shell, dan JavaScript fills di konten once ini runs di browser. itu’s tricky untuk search, because halaman looks empty until JavaScript executes.
Nuxt adalah Vue’s “meta-framework” (terjemahan) “meta-framework” — sebuah fuller toolkit dibangun sekitar Vue — dan -nya
default fixes itu masalah. Nuxt renders Anda halaman pada server pertama
(rendering sisi server, atau SSR), so when Google atau sebuah pengunjung menanyakan untuk sebuah halaman
pada sebuah route itu hasn’t telah switched off SSR, mereka get complete HTML right
away. 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 No waiting untuk JavaScript. itu’s single
biggest alasan sebuah Nuxt situs dapat menjadi easier untuk get terindeks daripada sebuah plain Vue app —
tetapi ini adalah sebuah route-oleh-route outcome, not something framework name guarantees.
sebuah route dengan ssr: false, atau one itu leans pada <ClientOnly> untuk -nya main
konten, gives up itu advantage dan ships yang sama empty-shell masalah plain
Vue memiliki.
one decision itu penting sebagian besar: rendering, per route
When someone menanyakan untuk sebuah spesifik halaman, where melakukan -nya HTML get dibangun? itu’s sebuah
routeRules-tingkat pertanyaan, not sebuah project-wide one — sebuah Nuxt app dapat mix modes
di seluruh routes. Nuxt gives Anda sebuah few options:
- rendering sisi server (SSR) — default. server membangun full halaman pada setiap permintaan. Great untuk SEO.
- Static generation (SSG) — run
nuxt generatedan Nuxt membangun semua Anda halaman ke plain HTML files ahead dari time. juga great untuk SEO, dan perfect untuk blogs dan docs itu don’t perubahan setiap minute. - SPA mode — halaman adalah dibangun di browser, like plain Vue. hindari ini untuk anything Anda ingin ditemukan di search.
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(). Evidence for this claim Nuxt provides useSeoMeta for defining SEO and social metadata. Scope: Current Nuxt composable. Confidence: high · Verified: Nuxt: useSeoMeta Anda drop ini ke sebuah halaman dan pass 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. (There’s sebuah older function called useHead()
itu masih berfungsi dan adalah digunakan untuk lainnya things di halaman’s <head>, tetapi untuk SEO
meta tags reach untuk useSeoMeta().) Google memiliki no fixed meta-deskripsi character
limit; snippets adalah kueri-dependent dan truncated untuk fit device, so preview
penting halaman di mereka intended language dan script alih-alih coding untuk sebuah quota.
optional tambahkan-pada: Nuxt SEO modules
Nuxt core doesn’t generate sebuah robots.txt, sebuah sitemap XML, social-share images,
data terstruktur, atau canonical URLs — itu adalah jobs untuk separate, optional
packages, not something nuxt.config.ts gives 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 once. ini adalah sebuah ketiga-party toolkit, not
bagian dari Nuxt itself, so installing ini doesn’t automatically membuat apa pun dari itu
output correct; Anda masih confirm sitemap, robots aturan, dan schema ini
generates match what Anda actually ingin.
thing people get wrong
People assume “Vue/Nuxt can’t be in Google.” (terjemahan) “Vue/Nuxt dapat’t menjadi di Google.” itu adalah sort dari benar untuk plain Vue apps years ago — ini isn’t benar untuk Nuxt dengan -nya server rendering. nyata mistakes adalah things like turning SSR off oleh accident, atau blocking Anda JavaScript files so Google dapat’t bangun halaman.
ingin deeper versi — full menu dari rendering modes, module ecosystem di detail, Core Web Vitals, dan umum mistakes dengan fixes? Switch untuk Advanced tab.
TL;DR — Nuxt’s default adalah rendering sisi server, so sebuah route itu mempertahankan itu default gets sebuah complete 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 actual route, not project name. rendering strategy adalah foundational decision — SSR (default), SSG (nuxt generate), atau hybridrouteRules— because meta, schema, dan sitemaps semua come setelah ini. gunakanuseSeoMeta()untuk meta tags (useHead()untuk rest dari head, server-hanya variants when Anda tidak perlu reactivity), dan treat Harlan Wilton’s@nuxtjs/seobundle sebagai sebuah optional ketiga-party toolkit untuk robots/sitemap/OG/schema/canonical — not bagian dari Nuxt core, dan not 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 raw-HTML coverage. Beyond initial HTML, verify hydration/payload, Nitro deployment presets dan caching, dan direct HTTP status independently — server HTML alone doesn’t prove apa pun dari itu. usual JS-SEO aturan masih apply: nyata<a href>tautan, don’t block JS/CSS, watch rendered vs. raw 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-framework pada top dari Vue (running pada Nitro server mesin di Nuxt 3, dengan Nuxt 4 following di 2025), dan -nya whole alasan untuk existing — dari sebuah SEO standpoint — adalah itu ini renders pada server oleh default. setiap halaman arrives sebagai sebuah fully-formed HTML document, which adalah exactly what Googlebot ingin untuk read without having untuk execute JavaScript pertama. Plain Vue SEO adalah -nya own topic dengan -nya own failure modes; here I’m assuming Anda’ve picked Nuxt precisely so Anda tidak memiliki untuk fight SPA masalah.
ini adalah yang sama poin I membuat tentang JavaScript umumnya: “any kind of SSR, static rendering, and prerendering setup is going to be fine for search engines. Gatsby, Next, Nuxt, etc., are all great.” (terjemahan) “apa pun jenis dari SSR, static rendering, dan prerendering setup adalah going untuk menjadi fine untuk mesin pencari. Gatsby, Next, Nuxt, etc., adalah semua great.” Nuxt’s defaults adalah pointed right cara. sebagian besar Nuxt SEO masalah adalah people turning itu defaults off, atau layering mistakes pada top dari them.
rendering strategy adalah foundation — decided per route, not per project
sebelum meta tags, sebelum schema, sebelum sitemaps, pertanyaan itu decides
everything adalah how melakukan HTML get produced untuk ini spesifik route? Nuxt
documents universal (server) rendering sebagai app-wide default, tetapi itu default
isn’t sebuah route-tingkat guarantee: sebuah global ssr: false switches whole 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 nothing tentang how one particular halaman
renders — Anda memiliki untuk periksa route. Nuxt gives Anda five strategies:
| Mode | How Anda set ini | SEO impact | Best untuk |
|---|---|---|---|
| Universal / SSR | Default (ssr: true) | Excellent — full 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 why rendering sisi klien adalah wrong choice
untuk konten: “Indexing and updating the content delivered via client-side rendering
takes more time” (terjemahan) “pengindeksan dan updating konten delivered via rendering sisi klien
takes more time”, whereas dengan server (universal) rendering “web crawlers can
directly index the page’s content.” (terjemahan) “web crawler dapat
directly indeks halaman’s konten.” 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 rendering docs.) CSR
(ssr: false) adalah positioned untuk back-office, dashboards, dan games — not anything
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-while-revalidate) dan isr (incremental static regeneration) generate
sebuah halaman statically lalu refresh ini di background — ideal untuk tinggi halaman-count
e-commerce atau news where sebuah full rebuild pada setiap perubahan isn’t practical. Nuxt
Islands (<NuxtIsland>) render components without shipping client-side JavaScript,
cutting hydration cost dan helping INP — Core Web Vital itu’s sebagian besar sering
masalah pada Nuxt apps.
cara verify what Anda actually shipped: View Source menampilkan raw HTML server dikirim; jika Anda konten adalah there, Anda’re server-rendering. DevTools’ Elements panel menampilkan rendered DOM. dan GSC’s pemeriksaan URL alat menampilkan what Google actually fetched dan rendered — sumber kebenaran. Don’t trust “it looks fine in my browser.” (terjemahan) “ini looks fine di my browser.”
How Googlebot handles sebuah Nuxt app
Google processes apa pun JavaScript app di three phases — crawl, render, indeks — dan catch adalah timing: rendering happens di sebuah queue, not 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 really patient, dan Anda seharusnya not menjadi concerned.” tetapi patient isn’t yang sama sebagai fast untuk fresh konten. jika Anda ship sebuah client-rendered halaman, Anda konten doesn’t exist untuk Google until itu render wave runs; SSR dan SSG close itu gap because HTML adalah complete pada pertama fetch.
Two more things penting di scale. rendering JavaScript adalah expensive — dari my 2019
JavaScript SEO talk (Ungagged), crawl costs go up oleh roughly 20× once Google memiliki untuk render
(directional, tetapi order dari magnitude masih holds). dan Google takes sebagian besar
restrictive directive di seluruh raw dan rendered HTML — so sebuah noindex injected oleh
JavaScript akan win di atas sebuah index di raw HTML, dan vice versa. sebuah canonical
injected via JavaScript adalah respected hanya jika there’s no canonical di raw HTML
sudah. pertahankan robots dan canonical signals di server-rendered HTML, which
Nuxt melakukan untuk Anda when SSR adalah pada.
AI-crawler reality
ini adalah 2026 wrinkle. AI crawler — GPTBot, ClaudeBot, PerplexityBot, dan rest — umumnya don’t execute JavaScript di semua. mereka indeks raw HTML dan nothing else. So sebuah client-rendered Nuxt halaman adalah effectively invisible untuk AI jawaban mesin. SSR atau SSG isn’t hanya better untuk Google here; 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 initial HTML: payload, hydration, dan kode status
Getting server HTML dengan Anda konten di ini adalah necessary tetapi not sufficient — several things dapat masih go wrong downstream dari itu pertama respons, dan “I checked View Source” (terjemahan) “I diperiksa View Source” doesn’t cover them:
- Payload dan hydration. Universal rendering mengirim HTML dan sebuah serialized data payload client menggunakan untuk hydrate — attach event listeners dan pick up where server left off — without re-fetching. server HTML looking right doesn’t prove hydration succeeded, itu client navigation reproduces yang sama konten, atau itu payload isn’t stale. jika sebuah halaman feels fine pada pertama muat tetapi breaks setelah sebuah client-side route perubahan, itu’s sebuah hydration/payload masalah, not sebuah rendering-mode masalah.
<ClientOnly>dan browser-hanya konten. Wrapping something di<ClientOnly>— umum untuk browser-API-dependent widgets — berarti ini adalah absent dari server respons bahkan pada sebuah otherwise-universal route. jika Anda main konten, sebuah key tautan, atau Anda meta tags end up inside sebuah client-hanya boundary, crawler dan AI bot itu hanya read raw HTML miss ini, regardless dari Anda rendering mode setting. Inspect actual respons, not hanya rendering mode config.- kode status dan redirects aren’t self-certifying. sebuah Nuxt halaman error
rendering di browser, atau sebuah
navigateTo()/composable-driven redirect, doesn’t oleh itself prove what HTTP status direct server respons dikirim. Google’s guidance adalah explicit itu meaningful kode status penting untuk crawling dan pengindeksan — confirm actual header dengancurl -I, not what client-rendered 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-rendered” adalah pertama periksa, not last one.
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 because presets dan adapters dapat differ di runtime APIs available, caching perilaku, streaming mendukung, regional deployment, dan filesystem access — sebuah route aturan atau server handler itu berfungsi di bawah one preset isn’t guaranteed untuk behave identically di bawah lainnya. Two consequences worth testing explicitly alih-alih assuming:
- Cache keys dan invalidation adalah route-spesifik, not 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 actual respons age dan apa punCache-Control/Ageheaders pada sebuah live URL, not hanyarouteRulesconfig. - Production parity isn’t guaranteed oleh staging perilaku. sebuah route rendering correctly di local dev atau sebuah preview deployment doesn’t confirm production preset produces yang sama output — server routes, redirects, dan error handling live di Nitro’s server layer, dan itu layer adalah bagian sebagian besar mungkin untuk differ oleh target. Test production URL directly setelah apa pun deployment perubahan, yang sama cara Anda’d verify rendering mode.
Meta tags: useSeoMeta() dan useHead()
Nuxt’s head management runs pada Unhead, dan ini gives Anda two composables untuk berbeda jobs.
useSeoMeta() adalah one untuk reach untuk untuk SEO dan social meta tags. ini adalah sebuah flat,
jenis-safe API dengan typed parameters. 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 ini helps hindari classic Open Graph
bug dari menggunakan name where 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 everything 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 via useSeoMeta() di halaman component. sebuah umum bug adalah
putting useSeoMeta() di sebuah layout alih-alih halaman, which overwrites spesifik
halaman tags dengan generic ones. dan since mesin pencari read initial muat, SEO meta
umumnya doesn’t perlu untuk menjadi reactive — useServerHead() skips client-side
re-execution.
Which API, dan what ini actually proves:
| API | Scope | Reactive? | What ini proves tentang output |
|---|---|---|---|
useSeoMeta() | Flat, typed SEO/social meta hanya | Yes (default) | Sets typed properties correctly — not itu route adalah unique, canonical, atau dapat diindeks; Anda masih own itu logic |
useHead() | Anything di <head> — scripts, tautan, attrs, judul template | Yes (default) | umum head control; sama caveat — API gunakan isn’t proof dari sebuah correct server respons |
useServerHead() / server-hanya panggilan | sama sebagai above | No — server hanya, skips client re-execution | Confirms tag ships once di server HTML; doesn’t confirm client navigation re-sets ini jika Anda rely pada ini there |
Calling one dari ini composables tells Anda API ran — ini doesn’t oleh itself tell
Anda what sebuah direct server respons atau sebuah client-side route perubahan actually emits.
Confirm dengan View Source atau curl, not hanya “I called useSeoMeta().” (terjemahan) “I called undefined.”
@nuxtjs/seo module ecosystem (Harlan Wilton) — optional, not core
Nuxt core doesn’t ship sebuah sitemap, sebuah robots.txt, OG image generation, atau
Schema.org out dari box — itu adalah outside Nuxt’s own primitives (useHead,
useSeoMeta, route aturan, rendering modes). community fills itu gap dengan
Harlan Wilton’s @nuxtjs/seo — sebuah separately-installed, ketiga-party umbrella
package (nuxtseo.com, currently di v5.x, actively maintained, targeting Nuxt
3,16+ dan Nuxt 4) itu bundles six modules. Installing ini gives Anda sitemap,
robots, OG-image, dan schema generation — ini doesn’t oleh itself guarantee
output adalah correct untuk Anda routes; verify what ini produces yang sama cara Anda’d
verify anything else:
| Module | What 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 broken-tautan detection |
Install whole bundle dengan npx nuxt module add seo, atau grab individual modules
(npx nuxt module add sitemap robots). sebuah few behaviors worth knowing:
@nuxtjs/sitemapauto-generates dari Andapages/directory plus dynamic routes, splits ke sebuah sitemap indeks automatically past 50 000 URLs, mendukung i18n multi-language sitemaps, dan memiliki dibangun-di IndexNow mendukung. One thing untuk get right: Google ignoreschangefreqdanpriority; hanya sebuah accuratelastmodpenting, dan hanya when konten genuinely perubahan.@nuxtjs/robotsgeneratesrobots.txt, robots meta tag, danX-Robots-Tagheader — dan oleh default ini disallows semua crawler pada non-production environments, which adalah exactly staging-pengindeksan footgun itu bites headless membangun. ini juga gives Anda per-bot aturan, so Anda dapat block GPTBot specifically while leaving everyone else alone (menjadi intentional — block sebuah AI crawler dan ini won’t cite Anda).nuxt-seo-utilshandles canonical URLs dan, secara berguna, strips tracking parameters (utm_*,fbclid,gclid) dari canonicals automatically.
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. Two
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 one itu tends untuk suffer because hydration membuat input lag — which adalah
exactly what 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 one 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 what the
plugin did” (terjemahan) “rebuild what
plugin melakukan” discipline applies.
umum Nuxt SEO mistakes
- menggunakan SPA mode (
ssr: false) untuk konten Anda ingin terindeks. paling expensive mistake — dan one 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.- Not verifying rendered HTML — View Source ≠ DevTools ≠ what Google rendered. gunakan pemeriksaan URL.
- Blocking JS/CSS di
robots.txt— Google won’t render dari blocked files. - Leaving staging
noindex/disallow di place setelah launch (atau, conversely, forgetting@nuxtjs/robotsblocks non-prod oleh default dan wondering why prod adalah fine tetapi sebuah custom env isn’t). - 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 is a workaround and not a long-term solution” (terjemahan) “dynamic rendering adalah sebuah workaround dan not 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 give crawler complete 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 primary consumers adalah MCP server dan AI coding
alat (Cursor, Claude Code) alih-alih ChatGPT atau Perplexity directly, dan ini adalah sebagian besar
berguna untuk documentation situs dan technical blogs — less so untuk e-commerce atau news.
Worth menambahkan jika Anda’re sebuah docs/dev situs; not sebuah priority otherwise.
Where ini fits
Nuxt SEO adalah really sebuah concrete application dari JavaScript SEO melalui Nuxt’s own conventions — dan ini overlaps heavily dengan SEO untuk sebuah CMS headless topic when Anda Nuxt frontend pulls dari sebuah headless backend. principles don’t perubahan; Nuxt hanya gives 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-framework, dan -nya SEO advantage adalah one default:
rendering sisi server. sebuah route itu mempertahankan itu default ships complete HTML,
not empty shell sebuah plain Vue SPA ships — tetapi ini adalah sebuah per-route outcome, not sebuah
project-wide guarantee.
ssr: falseatau sebuahrouteRulesoverride dapat flip apa pun route untuk CSR atau hybrid, so verify actual route. - rendering strategy adalah foundation, decided per route — ini decides
everything 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, not instant) → indeks; takes sebagian besar restrictive directive di seluruh raw vs. rendered HTML. rendering adalah ~20× crawl cost. SSR/SSG close timing gap.
- AI-crawler rendering adalah provider-spesifik — CSR depends pada client execution itu adalah not covered oleh one 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 confirm direct HTTP status/redirects dengancurl -Ialih-alih trusting sebuah client-rendered 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, don’t assume presets behave identically.
- Meta tags:
useSeoMeta()untuk SEO/social (jenis-safe),useHead()untuk rest dari head, server-hanya variants when reactivity isn’t needed. Layer:nuxt.config.ts→app.vue→ halaman. Don’t putuseSeoMeta()di sebuah layout. OG images perlu absolute URLs. Calling sebuah API proves API ran, not what sebuah direct respons emits — confirm dengan View Source/curl. @nuxtjs/seo(Harlan Wilton) adalah sebuah optional ketiga-party toolkit (v5.x, actively maintained, Nuxt 3,16+/4.x) — not bagian dari Nuxt core. ini bundles robots, sitemap, OG image, Schema.org, canonical, dan tautan-checker, tetapi installing ini doesn’t 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.- Don’t gunakan dynamic rendering — Google deprecated ini; Nuxt’s SSR/SSG sudah sajikan full HTML.
Official documentation
Primary-source documentation dari Nuxt dan mesin pencari.
Nuxt
- Nuxt — rendering Concepts — universal, client-side, dan hybrid (
routeRules) rendering, dan why crawler prefer server-rendered routes. - Nuxt — SEO dan Meta (getting started) —
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 where 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 separately-installed package.
- memahami JavaScript SEO basics — crawl → render → indeks pipeline dan dapat di-crawl tautan (framework-agnostic; Google’s docs don’t mention Nuxt oleh name).
- Dynamic rendering (deprecated workaround) — why Google deprecated ini dan what untuk gunakan instead (SSR, static rendering, hydration).
Quotes dari source
pada—record statements dari Nuxt, Google, dan my own writing. setiap search-mesin / Nuxt tautan adalah sebuah deep tautan itu jumps untuk quoted passage pada source halaman.
Nuxt — rendering untuk SEO
- “Indexing and updating the content delivered via client-side rendering takes more time.” (terjemahan) “pengindeksan dan updating konten delivered via rendering sisi klien takes more 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 directly indeks halaman’s konten, which membuat Universal rendering sebuah great choice untuk apa pun konten itu Anda ingin indeks quickly.” — Nuxt rendering docs. Jump untuk quote
Google — JavaScript processing & dynamic rendering
- “Google processes JavaScript web apps in three main phases: 1. Crawling 2. Rendering 3. Indexing.” (terjemahan) “Google processes JavaScript web apps di three main phases: 1. crawling 2. rendering 3. pengindeksan.” — Google Search Central docs. Jump untuk quote
- “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.” (terjemahan) “Dynamic rendering adalah sebuah workaround dan not sebuah panjang-istilah solusi untuk masalah dengan JavaScript-generated konten di mesin pencari. Instead, kami recommend itu Anda gunakan rendering sisi server, static rendering, atau hydration sebagai sebuah solusi.” — Google Search Central docs. Jump untuk quote
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.” (terjemahan) “apa pun jenis dari SSR, static rendering, dan prerendering setup adalah going untuk menjadi fine untuk mesin pencari. Gatsby, Next, Nuxt, etc., adalah semua great.”
- “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 really patient, dan Anda harus not menjadi concerned.”
- “JavaScript is not bad for SEO, and it’s not evil. It’s just different from what many SEOs are used to.” (terjemahan) “JavaScript adalah not buruk untuk SEO, dan ini adalah not evil. ini adalah hanya berbeda dari what banyak SEOs adalah digunakan untuk.”
Nuxt SEO checklist
sebuah quick pass untuk confirm sebuah Nuxt situs adalah siapkan untuk search dan AI crawler:
- konten Anda ingin terindeks adalah rendered pada server atau di bangun time (SSR atau
SSG) — not SPA mode (
ssr: false). - Confirmed via View Source itu penting konten adalah di raw HTML, dan via pemeriksaan URL itu Google renders ini.
-
useSeoMeta()adalah di halaman components, not sebuah shared layout overwriting halaman tags. -
ogImagemenggunakan sebuah absolute URL (not relative). - sebuah judul template adalah set once di
app.vue; per-halaman judul/deskripsi adalah unique. -
@nuxtjs/sitemapadalah generating sebuah sitemap XML;lastmodadalah accurate dan Anda’re not relying padachangefreq/priority. -
@nuxtjs/robotsadalah configured; non-prod auto-disallow isn’t accidentally applying untuk production. -
robots.txtmelakukan not block Anda JS/CSS. - Canonicals adalah absolute dan per-halaman (
nuxt-seo-utils). - LCP image memuat eagerly (not lazy); semua images memiliki
width/height(CLS). - nyata
<a href>tautan /<NuxtLink>untuk navigation — no<div @click>routing. - jika menggunakan
@nuxt/content,@nuxtjs/seoadalah dimuat sebelum ini di modules array. - Dynamic rendering adalah not di gunakan anywhere.
mental models
1. rendering strategy comes pertama. Meta tags, schema, dan sitemaps adalah downstream dari one decision: how HTML gets produced. jawaban “is this content server-rendered, statically generated, or client-rendered?” (terjemahan) “adalah ini konten server-rendered, statically generated, atau client-rendered?” sebelum debugging anything else.
2. SSR adalah default — Anda job adalah mostly not untuk break ini.
Nuxt poin defaults right cara. sebagian besar Nuxt SEO failures adalah someone setting
ssr: false, blocking JS/CSS, atau injecting signals via JavaScript itu conflict dengan
raw 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, not terindeks → SPA (
ssr: false) adalah fine. - Public konten Anda ingin diperingkatkan atau cited oleh AI → tidak pernah SPA.
4. HTML-pertama, JS-kedua untuk setiap signal. konten, meta, canonical, robots directives, dan tautan semua belong di server-rendered HTML. Google takes paling restrictive directive di seluruh raw vs. rendered; AI crawler see hanya raw. JS-injected SEO adalah sebuah fallback, not plan.
5. gunakan modules, tetapi memahami what mereka melakukan.
@nuxtjs/seo saves berfungsi, tetapi non-prod robots auto-disallow, lastmod-hanya
sitemap reality, dan absolute-URL canonicals adalah masih yours untuk get 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 broken tautan |
Fast aturan
- Install everything:
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: no JavaScript → SPA konten adalah invisible untuk them.
See what sebuah Nuxt halaman actually ships
whole Nuxt SEO pertanyaan reduces untuk one periksa: adalah Anda konten di raw HTML server mengirim, atau hanya setelah JavaScript runs? jika ini adalah di raw HTML, Anda’re server-rendering dan crawler (dan AI bot) dapat read ini.
Fetch raw 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-rendered — flip route untuk SSR atau prerender ini. (sebuah plain curl dapat’t run JS;
untuk rendered DOM gunakan pemeriksaan URL atau sebuah headless-Chrome crawler.)
Confirm Anda aren’t 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 — almost selalu sebuah mistake.
Static config snippet (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)
},
}) alat untuk Nuxt SEO
- pemeriksaan URL (Google Search Console) — sumber kebenaran. Run sebuah live test dan periksa rendered HTML, screenshot, dan halaman resources untuk confirm Anda Nuxt konten actually rendered dan nothing’s blocked.
@nuxtjs/seo/ nuxtseo.com — Harlan Wilton’s module bundle; dev alat panel menampilkan Anda generated robots, sitemap, schema, dan OG images di development.- Nuxt DevTools — inspect head tags, route aturan, dan which rendering mode setiap route adalah menggunakan.
- Rich hasil Test — confirm
nuxt-schema-orgJSON-LD adalah present di rendered output setelah apa pun rendering perubahan. - Ahrefs situs Audit / Screaming Frog (JS-rendering mode) — crawl dengan JS rendering pada vs. off untuk diff raw vs. rendered HTML di seluruh whole Nuxt app dan catch CSR gaps.
- Lighthouse / PageSpeed Insights — Core Web Vitals (LCP, INP, CLS) untuk
@nuxt/imagedan Nuxt Islands berfungsi. - Bing Webmaster alat — Bing’s crawl/indeks view dan where IndexNow submissions tampilkan up.
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 wait untuk sebuah render queue untuk fill di konten. AI-crawler rendering contracts vary oleh provider, so sebuah crawler itu fetches hanya initial HTML akan miss halaman konten.
Why ini adalah wrong: Anda’re voluntarily giving up one default (SSR) itu membuat Nuxt easier untuk indeks daripada plain Vue.
What untuk melakukan instead: leave ssr: true ( default) untuk anything public dan
dapat diindeks. Reserve ssr: false untuk genuinely non-terindeks surfaces — logged-di
dashboards, admin panels — via routeRules, not sebuah global config flip.
Putting useSeoMeta() di sebuah shared layout
Setting judul/deskripsi inside sebuah layout component feels efficient — one place,
applies everywhere — tetapi ini berarti setiap halaman itu menggunakan itu layout gets yang sama
generic tags, dan halaman-tingkat useSeoMeta() panggilan dapat get overwritten depending pada
render order.
Why ini adalah wrong: unique, halaman-spesifik judul dan deskripsi adalah basic relevance signals; sebuah layout-tingkat default collapses them semua untuk one string.
What untuk melakukan instead: set global fallbacks once di app.vue (judul template, OG
defaults), lalu panggil useSeoMeta() inside setiap halaman component dengan itu halaman’s
actual judul dan deskripsi.
Shipping sebuah relative ogImage URL
ogImage: '/social.png' looks fine di browser dan completely fails when
Facebook, LinkedIn, atau X try untuk fetch ini, because social crawler don’t resolve
relative paths terhadap Anda situs.
Why ini adalah wrong: social platforms perlu sebuah absolute URL untuk fetch image; sebuah relative path resolves untuk nothing dari mereka side.
What untuk melakukan instead: selalu pass sebuah full https:// URL, dan set site.url di
nuxt.config.ts so @nuxtjs/seo’s modules dapat bangun absolute URLs untuk Anda
automatically.
Reaching untuk dynamic rendering
Serving sebuah prerendered snapshot untuk known bot dan SPA untuk everyone else adalah sebuah legitimate workaround years ago. Google memiliki since called ini out directly: “dynamic rendering is a workaround and not a long-term solution.” (terjemahan) “dynamic rendering adalah sebuah workaround dan not sebuah panjang-istilah solusi.”
Why ini adalah wrong: ini hanya menyajikan bot Anda configure, misses everything else (Bing, sebagian besar AI crawler), dan menambahkan nyata infrastructure untuk maintain — untuk sebuah masalah Nuxt’s own SSR/SSG sudah solves.
What untuk melakukan instead: gunakan SSR atau nuxt generate dan skip dynamic rendering
entirely. There’s no scenario where 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/).
Why ini adalah wrong: jika Googlebot dapat’t fetch JS/CSS itu membangun halaman, ini dapat’t confirm Anda SSR output adalah what ini looks like — dan apa pun client-side enhancements silently stop rendering untuk ini.
What untuk melakukan instead: tidak pernah disallow bangun-output atau image-optimizer paths. periksa
robots.txt setelah setiap deploy itu touches routing atau module config, not hanya once
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 reads environment variables untuk decide, dan sebuah
misconfigured NODE_ENV atau preview-deploy setting dapat membuat ini fire di production
too.
Why ini adalah wrong: situs looks completely fine di sebuah browser while robots.txt
quietly disallows everything, dan nothing gets terindeks until someone notices.
What untuk melakukan instead: setelah apa pun deploy atau environment perubahan, fetch
https://yoursite.com/robots.txt directly dan confirm ini adalah not sebuah blanket
Disallow: /.
Standing KPIs untuk Nuxt SEO
ongoing angka untuk track once Anda rendering setup adalah correct — not one-time memeriksa, tetapi recurring signals itu catch regressions sebagai app perubahan.
Core Web Vitals (LCP, INP, CLS)
What ini tells Anda: whether nyata pengunjung adalah getting sebuah fast, stable halaman — directly affected oleh Nuxt Islands/hydration cost (INP) dan image-memuat choices (LCP, CLS).
cara pull ini: data lapangan dari Chrome UX Report via /alat/crux-tracker/ atau /alat/cwv-checker/; data lab dari Lighthouse untuk pre-release 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 pass/fail lines CrUX itself menggunakan, not sebuah angka I’m inventing. Where Anda land di dalam “good” (terjemahan) “baik” depends heavily pada Anda image weight dan how much Anda hydrate.
Cadence: CrUX data lapangan updates pada sebuah rolling 28-day window — periksa monthly, dan immediately setelah apa pun perubahan untuk images, fonts, atau hydration.
Rendered-vs-raw HTML parity
What ini tells Anda: whether konten mesin pencari dan AI crawler dapat
actually see ( raw HTML) matches what sebuah pengunjung sees di browser ( rendered
DOM) — core Nuxt SEO risk jika ssr gets flipped atau sebuah route regresses untuk CSR.
cara pull ini: /alat/render-gap/ diffs raw vs. rendered HTML untuk sebuah URL; untuk authoritative Google-side view, gunakan GSC’s pemeriksaan URL → “View Crawled Page.” (terjemahan) “View di-crawl halaman.”
Benchmark / realistic range: ini adalah sebuah binary periksa, not sebuah range — Anda key konten (headline, body copy, tautan internal) seharusnya menjadi present di raw HTML, full stop. apa pun gap pada sebuah halaman Anda ingin terindeks atau cited adalah sebuah regression untuk fix, not sebuah angka untuk tolerate.
Cadence: setelah setiap deploy itu touches routeRules, layouts, atau ssr
config; spot-periksa key templates monthly otherwise.
indeks coverage (halaman pengindeksan report)
What ini tells Anda: how banyak dari Anda submitted URLs Google memiliki actually terindeks, dan why rest adalah excluded (duplicate, di-crawl-not-terindeks, blocked, etc.) — downstream signal 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: there’s no universal healthy percentage — ini depends pada how banyak near-duplicate atau thin URLs Anda route structure generates. Watch trend dan exclusion alasan, not sebuah target angka.
Cadence: weekly selama dan setelah sebuah rendering-mode migration; monthly otherwise.
AI crawler access
What ini tells Anda: whether GPTBot, ClaudeBot, PerplexityBot, dan similar AI
crawler dapat actually fetch Anda halaman — separate dari Google, since ini bot
umumnya don’t execute JavaScript dan read hanya raw HTML Anda robots.txt
lets them reach.
cara pull ini: /alat/ai-crawler-checker/ untuk confirm no AI pengguna-agent adalah disallowed; server logs untuk confirm bot adalah actually requesting halaman, not hanya permitted untuk.
Benchmark / realistic range: there’s no citation-rate benchmark I dapat give Anda honestly — how sering sebuah AI jawaban mesin cites Anda depends pada kueri space dan competition, not something Nuxt configuration controls directly. Track access (allowed vs. blocked), not sebuah dibuat-up citation percentage.
Cadence: setelah setiap robots.txt atau @nuxtjs/robots config perubahan; monthly log
spot-periksa otherwise.
Test yourself: Nuxt SEO
Five quick pertanyaan pada optimizing sebuah Nuxt situs untuk search. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My related writing
- JavaScript SEO: sebuah Definitive Guide — my full guide untuk rendering, DOM parity, paling-restrictive-directive aturan, dan why SSR/static/prerender (Nuxt disertakan) adalah semua fine untuk search.
- Beginner’s Guide untuk SEO teknis — where 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 how Google handles 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 why crawler prefer SSR.
- Nuxt — SEO dan Meta (official) —
useSeoMeta()danuseHead(), getting-started reference. - Learn SEO dengan Nuxt (Harlan Wilton / nuxtseo.com) — paling comprehensive developer-focused Nuxt SEO guide, dipertahankan saat ini.
- harlan-zw/nuxt-seo (GitHub) — source 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 fixes.
- Nuxt 3 rendering Modes (RisingStack) — sebuah technical comparison 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 how Google melakukan crawl, renders, dan indeks JS apps; ini adalah framework-agnostic tetapi applies directly 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.