Panduan Penuh-Stack Meta-Kerangka kerja

Bagaimana Berikutnya.js, Nuxt, dan Remix memberikan Anda SSR, SSG, dan native metadata APIs untuk perbaiki SPA SEO masalah — dan mengapa route configuration masih decides apa sebenarnya ships.

Pertama kali diterbitkan: 26 Jun 2026 · Terakhir diperbarui: 3 Agu 2026 · Lanjutan

Meta-kerangka kerja (Berikutnya.js pada React, Nuxt pada Vue, Remix pada React) adalah dibangun pada top dari base UI libraries untuk tambahkan server rendering, static generation, file-based routing, dan dibangun-di metadata APIs. itu adalah primitives, tidak sebuah jaminan: saat ini Berikutnya.js, Nuxt, dan SvelteKit semua let Anda pick server, static, atau client-hanya output per route (atau per component boundary), so sebuah project dibangun dengan sebuah meta-kerangka kerja dapat masih ship sebuah empty shell pada sebuah route itu opts ke client-hanya rendering. Pick sebuah rendering mode itu ships konten di awal respons (SSR, SSG, atau ISR/hybrid), gunakan kerangka kerja's native metadata API, dan lalu verify — per route — itu respons sebenarnya berisi apa Anda expect.

TL;DR — Meta-kerangka kerja (Berikutnya.js pada React, Nuxt pada Vue, Remix pada React) wrap sebuah base UI library dengan server rendering, static generation, file-based routing, dan sebuah native metadata API. itu adalah primitives itu dapat hapus CSR masalah, tidak sebuah jaminan itu mereka melakukan: rendering mode, metadata pengiriman, data freshness, error status, hydration, dan production runtime adalah semua decided per route (atau per component boundary) di saat ini Berikutnya.js, Nuxt, SvelteKit, React Router, dan Astro — so sebuah meta-kerangka kerja project dapat masih ship sebuah route itu behaves persis like sebuah unrendered SPA. di seluruh semua three named kerangka kerja rendering choices adalah yang sama shape — SSR (per-permintaan), SSG (bangun-time), dan ISR/hybrid (cached + revalidated) — dan aturan adalah yang sama: konten itu harus peringkat memiliki untuk menjadi di respons dan survive streaming, hydration, dan production adapter, tidak hanya local bangun.

Library vs. kerangka kerja — mengapa pembedaan penting untuk SEO

ini adalah sebuah architectural pembedaan, tidak sebuah Google peringkat category. Bukti untuk klaim ini Primary standard or official documentation supporting the adjacent article claim. Cakupan: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Tingkat keyakinan: tinggi · Diverifikasi: web.dev: Rendering on the Web Evaluate sebenarnya respons HTML, tautan, kode status, dan metadata untuk setiap route. Bukti untuk klaim ini Primary standard or official documentation supporting the adjacent article claim. Cakupan: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Tingkat keyakinan: tinggi · Diverifikasi: Google: JavaScript SEO basics

React dan Vue adalah rendering libraries. oleh default mereka hydrate sebuah near-empty <div id="root"> di browser — canonical client-side-rendering setup, dan tepat pattern itu membuat JavaScript SEO risk: konten, tautan, dan meta tags jangan exist until bundle executes. Google dapat render itu, tetapi Anda’ve taken pada render queue, statelessness, dan parity masalah covered di JavaScript SEO.

sebuah meta-kerangka kerja adalah layer itu memberikan Anda sebuah cara untuk hapus itu risk. ini berjalan sama React/Vue components pada sebuah server (atau di bangun time) dan ships HTML itu sudah berisi konten — ketika sebuah route adalah configured untuk melakukan so. mental model worth mempertahankan: ** base library decides bagaimana hard Anda SEO adalah oleh default; meta-kerangka kerja decides bagaimana easy perbaiki adalah, pada sebuah per-route basis Anda masih memiliki untuk apply dan lalu verify.** Berikutnya.js tidak membuat React see-able oleh Google — ini membuat React able untuk render pada server so output dapat sudah menjadi see-able, disediakan route hasn’t opted back ke client-hanya rendering, metadata hasn’t telah diverted untuk sebuah client-hanya tulis, dan respons Anda’re memeriksa adalah satu sebuah crawler akan sebenarnya mendapatkan (Nuxt’s route aturan, SvelteKit’s hierarchical halaman options, dan Berikutnya’s server/Client Component split semua let sebuah single project mix modes route oleh route atau component oleh component). Bukti untuk klaim ini Rendering mode can be selected per route (or per component boundary) in current meta-frameworks, so one project can mix static, server, client, and hybrid output rather than a single project-wide mode. Cakupan: Current Nuxt route-rules and SvelteKit hierarchical page-options docs; version/terminology specific. Tingkat keyakinan: tinggi · Diverifikasi: Nuxt: Rendering Modes (route rules) SvelteKit: Page options

Apa setiap meta-kerangka kerja memberikan Anda

three differ di detail, tetapi SEO-relevant fitur set adalah shared:

  • rendering sisi server (SSR) — components execute pada server per permintaan; respons adalah menyelesaikan HTML.
  • Static situs generation (SSG) — halaman adalah pre-dirender untuk HTML di bangun time dan disajikan sebagai files (sering dari sebuah CDN).
  • File-based routing — file tree maps untuk URLs, so setiap route adalah sebuah nyata, linkable, dapat di-crawl URL oleh construction (Tidak client-hanya route registry).
  • sebuah native metadata API — sebuah pertama-party cara untuk set <title>, deskripsi meta, canonical, Open Graph, dan robots tags itu render ke server HTML.
  • Sitemap & robots conventions — sebuah terdokumentasi file/route convention untuk generating sitemap.xml dan robots.txt sebagai bagian dari bangun.

itu terakhir dua poin penting lebih daripada mereka look: file-based routing berarti penemuan rides pada nyata URLs, dan sebuah server-dirender metadata API berarti Anda judul/deskripsi/ canonical adalah di mentah HTML — tidak injected client-side di mana Google takes sebagian besar-restrictive directive di seluruh mentah dan dirender.

three kerangka kerja, compared

Berikutnya.jsNuxtRemix
Base libraryReactVueReact
Default renderingSSR/SSG (hybrid; per-route)Universal (SSR) oleh defaultSSR oleh default
RoutingFile-based (App Router / halaman Router)File-based (pages/, app/)Nested routes (now React Router)
Metadata APImetadata export / generateMetadata (App Router); next/head (halaman)useSeoMeta() / useHead()meta export per route
Static exportYa (output: 'export')Ya (nuxi generate / prerendering)Melalui prerendering / SSG adapters
Incremental/hybridISR (revalidate)Route aturan / ISR-style cachingCache-Control + edge caching
Image optimizationnext/image<NuxtImg> (@nuxt/image)Bring-Anda-own / adapter
Status quosebagian besar popular; App Router defaultVue jawaban untuk Berikutnya.jsDigabungkan ke React Router v7

sebuah sedikit notes itu jangan fit sebuah table cell:

  • Berikutnya.js adalah paling widely digunakan dan App Router’s metadata export membuat server-dirender tags path dari least resistance. -nya distinctive fitur adalah ISR — statically generate, lalu revalidate pada sebuah timer atau pada demand.
  • Nuxt adalah “Next.js for Vue” (terjemahan) “Berikutnya.js untuk Vue” di spirit: SSR oleh default, plus @nuxtjs/seo module ecosystem (sitemap, robots, schema.org, OG image) itu bundles sebagian besar SEO chores. useSeoMeta() adalah idiomatic metadata API.
  • Remix adalah server-pertama oleh design — ini leans pada web standards (forms, fetch, HTTP caching) alih-alih sebuah terpisah static layer, dan exposes SEO melalui sebuah per-route meta export. sebagai dari React Router v7, Remix’s model adalah React Router, so baru berfungsi sering dimulai di sana.

rendering modes dan apa setiap berarti untuk crawler

labels repeat di seluruh kerangka kerja; SEO consequence adalah apa penting:

  • SSR (rendering sisi server) — HTML dibangun per permintaan. crawler view: penuh konten di pertama respons; freshest data; costs server time per hit. rendah SEO risk.
  • SSG (static situs generation) — HTML dibangun setelah di deploy, disajikan sebagai files. crawler view: fastest mungkin respons, konten fully present; data adalah sebagai fresh sebagai Anda terakhir bangun. Lowest SEO risk.
  • ISR / hybrid (incremental static regeneration, route aturan, dan seterusnya.) — sajikan static halaman, lalu regenerate ini di background setelah sebuah revalidate window atau pada demand. crawler view: static-fast dengan near-fresh konten — tetapi menjadi aware sebuah crawler dapat menjadi disajikan sebuah slightly stale cached versi until berikutnya revalidation, so atur window untuk match bagaimana fast konten sebenarnya perubahan.
  • CSR (rendering sisi klien) — base-library default meta-kerangka kerja ada untuk hindari. crawler view: empty-ish shell itu bergantung pada rendering. Highest risk; reserve ini untuk genuinely non-dapat diindeks, behind-login UI.

decision aturan adalah yang sama di seluruh semua three kerangka kerja: apa pun itu harus peringkat seharusnya ship -nya konten di awal HTML — so SSR, SSG, atau ISR, tidak pernah pure CSR. penuh kerangka kerja-agnostic rendering menu (hydration, edge, streaming, dynamic rendering) lives pada JavaScript SEO.

Mode pilihan adalah per route, tidak per project

«Current Next.js, Nuxt, and SvelteKit all apply rendering mode at the route (or component) level rather than as a single project-wide setting — so “this site runs Nuxt” tells you nothing about what any one URL does. Nuxt’s route rules let one project mix prerendered, server-rendered (with caching), and client-only (ssr: false) routes in the same config; SvelteKit’s ssr/csr/prerender page options apply hierarchically, so a child route can override what a parent layout set; Next’s Server/Client Component boundary works the same way inside a single route. Weigh each route on: » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tiga puluh tujuh, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)

DimensionStatic (SSG)server (SSR)Client-hanya (CSR)
Freshnesssebagai dari terakhir bangunsaat ini pada setiap permintaansaat ini, tetapi hanya setelah JS berjalan
PersonalizationNone (sama HTML untuk everyone)Per-permintaan, server-sideClient-side, setelah hydration
bangun/server costbangun-time hanyaPer-permintaan server costLowest server cost, highest client cost
CacheabilityTrivially cacheable di edgeperlu jelas cache/revalidate aturanCacheable shell, tidak konten
JS dependency untuk kontenNoneNone untuk awal responskonten bergantung entirely pada JS executing
Failure perilakuStale until berikutnya bangun/revalidate5xx atau fallback jika server permintaan failsEmpty shell jika JS fails atau adalah blocked

None dari ini adalah sebuah universal winner — sebuah route itu perubahan per signed-di pengguna adalah sebuah poor fit untuk SSG regardless dari apa rest dari project menggunakan, dan sebuah route itu tidak pernah perubahan tidak perlu per-permintaan server cost.

mistakes itu survive move untuk sebuah meta-kerangka kerja

sebuah kerangka kerja menghapus default CSR risk; ini tidak membuat Anda immune:

  • Opting back ke client-hanya rendering — e.g. SvelteKit’s ssr = false (yang docs say “renders an empty ‘shell’ page instead” (terjemahan) “renders sebuah empty ‘shell’ halaman alih-alih”), atau fetching critical konten di sebuah client-hanya effect so ini adalah absent dari server HTML. ini adalah sebuah per-route atau per-component decision, so satu halaman opting out tidak tampilkan up oleh testing sebuah berbeda halaman.
  • Skipping metadata API — writing document.title di sebuah client effect alih-alih dari kerangka kerja’s server-dirender metadata export, so judul tidak di mentah HTML.
  • Assuming metadata pengiriman adalah satu universal path — saat ini Berikutnya.js (App Router, v16.2,10 docs, terakhir diperbarui 2026-06-23) streams metadata secara terpisah untuk dynamically dirender halaman oleh default, injecting ini setelah generateMetadata resolves. ini disables itu streaming — serving metadata di awal <head> alih-alih — untuk crawler dan bot ini detects oleh pengguna agent itu expect metadata up front (Berikutnya names Twitterbot, Slackbot, dan Bingbot sebagai contoh), configurable melalui htmlLimitedBots option. Bukti untuk klaim ini Metadata delivery is not one universal path: Next.js streams metadata for ordinary clients but disables streaming for detected HTML-limited bots (e.g. Twitterbot, Slackbot, Bingbot), serving it in the initial head instead. Cakupan: Current Next.js App Router docs (v16.2.10, docs last updated 2026-06-23); bot list and mechanism are configurable and release-specific. Tingkat keyakinan: tinggi · Diverifikasi: Next.js: Metadata and OG images (streaming metadata) Yang bot mendapatkan yang path, dan apakah streaming adalah digunakan di semua, adalah sebuah versi- dan config-spesifik detail worth memeriksa terhadap docs untuk rilis Anda’re pada, tidak assumed dari kerangka kerja name.
  • ISR revalidation windows too panjang — serving stale prices/stock/konten untuk crawler; lebih broadly, apa pun data/cache/revalidation misconfiguration (wrong cache key, missed invalidation, sebuah rusak preview/draft state) dapat produce missing, stale, atau personalized-looking output bahkan pada sebuah route itu adalah jika tidak dirender correctly.
  • Assuming error component atau sebuah redirect memperbaiki HTTP status — setelah streaming memiliki begun, apa kode status dan headers sebuah crawler sebenarnya menerima pada sebuah direct permintaan, sebuah tidak-ditemukan path, sebuah thrown server error, sebuah redirect, atau sebuah client-navigation failure perlu untuk menjadi tested secara terpisah untuk setiap case; sebuah kerangka kerja’s error boundary tidak jaminan apa pun satu dari them resolves cara UI suggests. Bukti untuk klaim ini Framework error components and redirects do not guarantee the HTTP status a crawler sees once streaming has begun; test direct requests, not-found paths, thrown errors, redirects, and client-navigation failures separately. Cakupan: General Google Search crawling guidance, not framework-specific. Tingkat keyakinan: tinggi · Diverifikasi: Google: Understand JavaScript SEO basics (status codes, testing)
  • Treating dirender HTML sebagai proof dari berfungsi interactivity — hydration dapat masih fail dari nondeterministic server output, browser-hanya APIs digunakan too early, tidak valid markup, atau ketiga-party scripts mutating DOM sebelum React/Vue attaches; halaman dapat look menyelesaikan di view-sumber dan masih ship rusak controls.
  • Sending lebih untuk client daripada kerangka kerja memerlukan — data lulus dari sebuah server-dirender component untuk sebuah client component memiliki untuk menjadi serializable, dan (di Berikutnya.js) hanya environment variables prefixed NEXT_PUBLIC_ ship untuk client bundle oleh default — tetapi neither protection berhenti Anda dari manually passing secrets atau excess per-pengguna data sebagai sebuah prop; awal halaman menjadi SEO-terlihat tidak berarti semuanya serialized ke ini adalah dimaksudkan untuk menjadi publik.
  • Trusting sebuah local bangun untuk predict production output — deployment adapters dan runtimes differ di apa mereka mendukung. Berikutnya.js’s own docs mark static export (output: 'export') sebagai “Limited” (terjemahan) “Limited” fitur mendukung dan say ini “melakukan tidak dukung Berikutnya.js features itu require a server” (terjemahan) “melakukan tidak mendukung Berikutnya.js fitur itu memerlukan sebuah server”; Astro’s pada-demand rendering “memerlukan an adapter” (terjemahan) “perlu sebuah adapter” cocok untuk target runtime sebelum apa pun pada-demand route berfungsi di semua. Bukti untuk klaim ini Deployment target changes what a meta-framework can actually do in production: a Next.js static export does not support features that require a server, and Astro's on-demand rendering requires an adapter matched to the host runtime. Cakupan: Current Next.js deployment docs (v16.2.10) and Astro rendering-modes docs; adapter support varies by platform and release. Tingkat keyakinan: tinggi · Diverifikasi: Next.js: Deploying Astro: On-demand rendering (adapters) Streaming, regional/edge execution, filesystem access, dan cache/revalidation perilaku dapat semua differ oleh host — verify deployed route, tidak hanya local bangun.
  • Comparing direct-muat output untuk client-navigated output sebagai jika mereka’re yang sama test — sebuah client-side route transition dapat exercise sebuah berbeda metadata-perbarui dan data-fetch path daripada sebuah fresh permintaan; test keduanya, tidak hanya satu.
  • Blocking kerangka kerja’s asset directory (/_next/, /_nuxt/) di robots.txt, yang breaks hydration dan rendering.
  • Treating “it berfungsi di my browser” (terjemahan) “ini berfungsi di my browser” sebagai proof — masih verify dengan pemeriksaan URL’s dirender HTML, persis sebagai Anda akan untuk apa pun JS situs.

Di mana untuk go berikutnya: kerangka kerja guides

ini halaman adalah concept overview; setiap kerangka kerja memiliki -nya own deep dive:

  • Berikutnya.js SEO — halaman Router vs App Router, Metadata API dan generateMetadata, next/image dan Core Web Vitals, ISR timing dan bagaimana Googlebot sees revalidation, sitemap/robots conventions, dan paling umum Berikutnya.js SEO mistakes.
  • Nuxt SEO — SSR oleh default, useSeoMeta() dan useHead(), Nuxt’s rendering modes dan route aturan, @nuxtjs/seo module ecosystem (sitemap, robots, schema, OG image), dan bagaimana Nuxt compares untuk plain Vue untuk indexability.
  • Remix SEO — server-pertama rendering, per-route meta export, loaders dan HTTP caching untuk crawler, React Router v7 gabungkan, dan bagaimana Remix differs dari Berikutnya.js’s static-pertama instincts.

untuk base libraries underneath ini kerangka kerja (React SEO, Vue SEO) dan kerangka kerja-agnostic rendering dan parity aturan, see JavaScript SEO.

Tambahkan catatan pakar

Sematkan kutipan pakar

Orang baru? Buat profilnya yang belum diklaim di /admin/experts/ → Sematkan kutipan pakar terlebih dahulu.