Panduan Svelte SEO
Svelte alone adalah client-side dirender — konten tidak di mentah HTML. SvelteKit memperbaiki itu dengan SSR oleh default. rendering modes, svelte:head, muat functions, adapters, sitemaps, dan SPA-mode trap.
«Svelte SEO hinges on one distinction: plain Svelte is client-side rendered (a blank HTML shell), while SvelteKit renders on the server by default and ships full HTML. Use SvelteKit for anything that needs to rank. Manage metadata with svelte:head, fetch SEO data in +page.server.js load functions, pick the right adapter, and never ship SPA fallback mode (ssr: false) — the SvelteKit docs themselves warn it has large negative SEO impacts.» _(Terjemahan)_ (Ringkasan bahasa Indonesia untuk bidang tldr: teks sumber dipertahankan untuk tinjauan penutur asli.)
Bukti untuk klaim ini The article's described svelte-seo capabilities must be evaluated against the platform's current documentation rather than assumed to be search-engine behavior. Cakupan: Platform-specific capability documentation. Tingkat keyakinan: tinggi · Diverifikasi: SvelteKit page options Bukti untuk klaim ini Regardless of platform, Google needs crawlable URLs, accessible rendered content, descriptive metadata, and valid search directives. Cakupan: Google requirements independent of platform. Tingkat keyakinan: tinggi · Diverifikasi: Google Search Central: SEO Starter GuideTL;DR — paling penting hal untuk know tentang Svelte SEO adalah itu Svelte dan SvelteKit adalah tidak yang sama hal. Plain Svelte membangun halaman di pengunjung’s browser, so mesin pencari pertama see sebuah blank shell. SvelteKit — Svelte’s official kerangka kerja — membangun halaman pada server dan mengirim finished HTML. gunakan SvelteKit untuk apa pun Anda ingin peringkat.
Svelte vs. SvelteKit
Svelte adalah sebuah alat untuk membangun pengguna interfaces. ini adalah clever: alih-alih shipping sebuah big JavaScript library untuk browser, ini compiles Anda components down untuk kecil, plain JavaScript di bangun time. itu membuat Svelte halaman fast.
tetapi “fast” (terjemahan) “fast” dan “search-friendly” (terjemahan) “penelusuran-friendly” tidak yang sama hal. sebuah plain Svelte app adalah client-side dirender — server mengirim sebuah nearly empty halaman, dan JavaScript fills di konten setelah ini memuat di browser. jika sebuah crawler looks di mentah HTML, ada hampir tidak ada apa pun di sana.
SvelteKit adalah official kerangka kerja dibangun pada top dari Svelte. ini melakukan hal itu penting sebagian besar untuk SEO: ini renders Anda halaman pada server pertama, so HTML itu arrives sudah memiliki Anda konten, Anda heading, dan Anda tautan di ini. ini adalah default perilaku. jika Anda’re membangun sebuah situs itu perlu untuk tampilkan up di Google, Anda ingin SvelteKit, tidak bare Svelte.
Mengapa ini penting untuk penelusuran
- Google dapat jalankan JavaScript, so ini akan eventually see sebuah client-dirender Svelte halaman — tetapi ada sebuah delay, dan delay hurts fresh konten.
- Bing dan lainnya mesin pencari adalah lebih sedikit reliable di berjalan JavaScript.
- AI crawler (GPTBot, ClaudeBot, PerplexityBot, dan similar) umumnya fetch static HTML, dan rendering perilaku varies oleh provider dan perubahan di atas time — saat ini provider documentation tidak establish satu shared render langkah Anda dapat count pada filling di sebuah blank shell.
SvelteKit’s rendering sisi server sidesteps semua dari ini. konten adalah di HTML dari mulai, so setiap jenis dari crawler dapat baca ini tanpa depending pada sebuah render langkah ini dapat atau dapat tidak perform.
sederhana checklist
- bangun dengan SvelteKit, tidak plain Svelte, untuk konten itu perlu untuk peringkat.
- Memberikan setiap halaman sebuah unique
<title>dan<meta name="description">menggunakan SvelteKit’s<svelte:head>element. - jangan turn off rendering sisi server (jangan gunakan “SPA mode” (terjemahan) “SPA mode”) untuk halaman Anda ingin ditemukan.
- buat sitemap dan sebuah
robots.txt(SvelteKit tidak membuat ini untuk Anda). - jangan block Anda JavaScript atau CSS files di
robots.txt.
ingin deeper versi — four rendering modes, adapter trade-offs,
ssr: false trap, dan muat-function pattern untuk metadata? Switch untuk
Advanced tab.
Bukti untuk klaim ini The article's described svelte-seo capabilities must be evaluated against the platform's current documentation rather than assumed to be search-engine behavior. Cakupan: Platform-specific capability documentation. Tingkat keyakinan: tinggi · Diverifikasi: SvelteKit page options Bukti untuk klaim ini Regardless of platform, Google needs crawlable URLs, accessible rendered content, descriptive metadata, and valid search directives. Cakupan: Google requirements independent of platform. Tingkat keyakinan: tinggi · Diverifikasi: Google Search Central: SEO Starter GuideTL;DR — Svelte SEO adalah benar-benar sebuah SvelteKit conversation. Bare Svelte adalah CSR-hanya — konten tidak di mentah HTML. SvelteKit defaults untuk SSR, mendukung prerendering (SSG) per route, dan lets Anda mix modes. Manage metadata dengan
<svelte:head>dan feed ini dari+page.server.jsmuat functions so ini lands di awal HTML. sharpest trap:adapter-staticdenganssr: falsemelakukan tidak prerender — ini produces empty shells; SSR harus stay pada selama bangun. SvelteKit’s own docs warn SPA fallback memiliki “large negative performance dan SEO impacts.” (terjemahan) “besar negative performa dan SEO impacts.” gunakan History API routing ( default), configuretrailingSlash, dan pick sebuah adapter untuk match — static untuk konten, node/vercel/cloudflare untuk SSR.
Svelte adalah tidak SvelteKit — dan untuk SEO itu’s semuanya
Svelte adalah sebuah compiler. ini turns Anda .svelte components ke lean vanilla
JavaScript dengan Tidak virtual DOM dan Tidak runtime library shipped untuk browser. itu
memberikan Svelte sebuah nyata performa edge — tetapi ini adalah sebuah bundle-size optimization, tidak sebuah
rendering satu. sebuah plain Svelte app (Vite-bundled, Tidak meta-kerangka kerja) adalah masih sebuah
client-side-dirender SPA: server mengembalikan sebuah blank HTML shell dan browser
constructs halaman. View sumber pada satu dan Anda konten tidak di sana.
ini adalah #1 sumber dari confusion ketika orang penelusuran “Svelte SEO.” (terjemahan) “Svelte SEO.” compile langkah tidak put konten di HTML. SvelteKit melakukan. SvelteKit adalah Svelte’s official meta-kerangka kerja — equivalent dari Berikutnya.js untuk React atau Nuxt untuk Vue — dan ini renders halaman pada server oleh default, shipping fully populated HTML sebelum apa pun JavaScript berjalan. ini menambahkan SSR, static prerendering, file-based routing, muat functions, dan deployment adapters. headline: bare Svelte = CSR-hanya; SvelteKit = SSR-pertama. Semuanya else di ini guide assumes SvelteKit.
Dua scoping notes worth stating precisely, karena mereka’re di mana generic “Svelte
SEO” (terjemahan) “Svelte
SEO” advice goes wrong: SvelteKit’s rendering options (ssr, csr, prerender,
trailingSlash) adalah set per route dan inherit hierarchically — sebuah +layout.js
atau +layout.server.js dapat set sebuah default untuk semuanya beneath ini, dan sebuah child
route dapat override ini. So “adalah ini SvelteKit site SEO-friendly” (terjemahan) “adalah ini SvelteKit situs SEO-friendly” tidak sebuah
project-tingkat pertanyaan; periksa spesifik route. dan dari SvelteKit’s rendering
options, ini adalah secara khusus ssr: false — tidak SSR menjadi merely absent, dan tidak
“menggunakan SvelteKit” (terjemahan) “menggunakan SvelteKit” di umum — itu docs tie untuk sebuah empty output: “Jika Anda set
ssr untuk false, it renders an empty ‘shell’ halaman alih-alih.” (terjemahan) “jika Anda set
tidak terdefinisi untuk tidak terdefinisi, ini renders sebuah empty ‘shell’ halaman alih-alih.” ini guide adalah saat ini
untuk Svelte 5.x dan SvelteKit 2.x ( saat ini majors sebagai dari ini perbarui); Svelte 5
dibuat runes default reactivity model, tetapi runes adalah sebuah component-authoring
concern, tidak sebuah rendering mode — mereka jangan perubahan apa pun dari SEO guidance di bawah.
«Why the rendering mode matters comes straight from how search engines work. Google
processes JavaScript in three phases — crawling, rendering, and indexing — and
“all pages with a 200 HTTP status code are sent to the rendering queue, no matter
whether JavaScript is present on the page.” The render queue adds a delay, and as
Google’s own guidance puts it, “server-side or pre-rendering is still a great idea
because it makes your website faster for users and crawlers, and not all bots can
run JavaScript.” That last clause is doing a lot of work in 2026 — see the
AI-crawler section.
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian dua puluh tiga, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
four rendering modes di SvelteKit
SvelteKit’s strength adalah itu rendering adalah sebuah per-route decision melalui halaman options.
ini options adalah hierarchical: set sebuah default di sebuah +layout.js/+layout.server.js
dan setiap nested route inherits ini, unless sebuah child route exports -nya own nilai untuk
override ini. periksa option itu sebenarnya applies untuk spesifik route Anda care
tentang — tidak hanya nilai set di top dari project.
- SSR ( default). halaman adalah dirender server-side dan penuh HTML adalah di awal respons. Best untuk dynamic, personalized, atau frequently mengubah konten. ini adalah pada unless Anda turn ini off.
- Prerender (
export const prerender = true). halaman adalah generated sebagai static HTML di bangun time. Maximum speed dan maximum crawlability — ideal untuk blog posts, docs, dan marketing halaman. Crucially, prerendering adalah SSR jalankan di bangun time, so SSR harus tetap enabled untuk ini untuk berfungsi. - SPA fallback (
ssr: false). sebuah single-halaman-app shell dengan Tidak server rendering. SvelteKit docs adalah blunt itu ini mode “memiliki large negative performance dan SEO impacts” (terjemahan) “memiliki besar negative performa dan SEO impacts” dan adalah benar-benar dimaksudkan untuk hal like wrapping di sebuah mobile app — tidak untuk konten Anda ingin terindeks. - Hybrid. Mix modes per route: prerender Anda marketing halaman, SSR Anda product halaman, jalankan sebuah SPA-style admin behind sebuah login. ini adalah SvelteKit’s killer fitur — Anda tidak pick satu rendering mode untuk seluruh situs.
ssr: false trap ( mistake untuk hindari)
ini adalah paling expensive misunderstanding di SvelteKit SEO, so ini mendapatkan -nya own
bagian. Orang reach untuk adapter-static untuk “membuat a static site,” (terjemahan) “membuat sebuah static situs,” dan lalu set
ssr: false thinking mereka’re getting prerendered HTML. mereka tidak.
Prerendering adalah rendering sisi server executed di bangun time. jika Anda disable SSR,
ada tidak ada apa pun untuk render — docs adalah jelas itu ssr: false “renders an
empty ‘shell’ halaman alih-alih,” (terjemahan) “renders sebuah
empty ‘shell’ halaman alih-alih,” dan itu’s persis apa adapter-static lalu ships sebagai
Anda prerendered output. konten hanya muncul setelah client-side JavaScript berjalan,
yang puts Anda right back di CSR territory (dengan semua -nya crawler masalah) despite
memiliki sebuah “static” (terjemahan) “static” bangun. aturan: dengan adapter-static, leave ssr pada (-nya
default) so prerendering outputs nyata HTML. gunakan ssr: false hanya ketika Anda
genuinely ingin sebuah SPA shell dan accept SEO cost.
Managing metadata dengan <svelte:head>
SvelteKit memiliki sebuah special element, <svelte:head>, itu injects konten ke
document <head> — dan Anda tidak perlu sebuah ketiga-party library untuk manage Anda judul
dan meta tags. setiap halaman seharusnya memiliki sebuah unique <title> dan
<meta name="description">, plus canonical, Open Graph, Twitter Card, hreflang,
robots directives, dan JSON-LD sebagai needed.
pattern official docs merekomendasikan untuk dynamic metadata:
- kembalikan SEO metadata dari sebuah
+page.server.jsload()function. - Access ini melalui
page.datadi Anda layout. - Render ini di
<svelte:head>di root+layout.svelte.
<!-- +layout.svelte -->
<script>
import { page } from '$app/state';
</script>
<svelte:head>
<title>{page.data.title}</title>
<meta name="description" content={page.data.description} />
<link rel="canonical" href={page.data.canonical} />
</svelte:head>jika Anda’d rather gunakan component wrapper, ketiga-party
svelte-seo package wraps <svelte:head>
dengan props untuk umum tags — tetapi ini adalah sebuah convenience, tidak sebuah requirement.
<svelte:head> mendapatkan Anda tags ke head; ini tidak verify Anda mendapat them right.
itu’s masih Anda job: konfirmasi setiap route renders sebuah unique judul dan
deskripsi (tidak satu inherited dari layout oleh accident), itu canonical
Anda emit adalah consistent antara direct-permintaan HTML dan apa sebuah client-side
navigation renders, dan itu robots directives dan JSON-LD adalah present di mentah
respons — tidak hanya terlihat setelah hydration.
muat functions: di mana Anda fetch SEO data penting
ini adalah metadata bug itu bites orang. +page.server.js load() berjalan pada
server, so -nya data adalah di awal HTML respons. +page.js load() berjalan pada
server untuk pertama render dan pada client selama client-side navigation.
mistake adalah fetching Anda judul/deskripsi/canonical di sebuah <script> block dengan
onMount() — itu berjalan client-side hanya, so awal HTML ships dengan Tidak
metadata dan crawler sees tidak ada apa pun pada pertama fetch. Fetch SEO-critical data di
sebuah load function (server muat untuk apa pun itu harus menjadi di pertama respons), tidak
di onMount.
jangan assume file name alone proves boundary, though — +page.js load()
juga berjalan pada server untuk pertama permintaan, lalu re-berjalan client-side pada
navigation, dan -nya kembalikan nilai memiliki untuk survive serialization untuk menjadi reused safely
pada client. jika SEO-critical data ever bergantung pada sebuah nilai itu tidak safely
serializable, verify keduanya direct-permintaan HTML dan sebuah client-navigated view dari
yang sama route, tidak hanya satu atau lainnya.
Routing dan struktur URL
- File-based routing dengan
[param]untuk dynamic segments memberikan Anda bersih, predictable URLs. - History API routing adalah default — SvelteKit tidak gunakan hash/fragment
routing, dan itu’s persis apa Anda ingin. Google dapat’t reliably resolve
hash-based (
#/page) URLs, so History API routing adalah SEO-safe pilihan dan SvelteKit membuat ini default. trailingSlashdisvelte.config.jsaccepts'always','never', atau'ignore'. SvelteKit menangani canonical redirect untuk Anda, tetapi leaving ini misconfigured (terutama'ignore') dapat buat duplicate-konten variants. Pick satu dan menjadi consistent.- Dynamic routes Anda ingin prerendered perlu sebuah
entriesfunction untuk enumerate paths di bangun time, atau SvelteKit tidak akan know yang URLs untuk generate.
Choosing sebuah adapter untuk SEO
adapter decides bagaimana dan di mana Anda SvelteKit app adalah deployed, dan itu memiliki SEO consequences (mostly melalui TTFB, yang feeds LCP):
| Adapter | rendering | SEO implication |
|---|---|---|
adapter-static | Penuh SSG | benar static HTML untuk setiap halaman; Tidak server needed; ideal untuk konten-berat situs (pertahankan ssr pada!) |
adapter-node | SSR pada sebuah Node server | Dynamic SSR, penuh flexibility; Anda jalankan sebuah server |
adapter-vercel | SSR + edge | SSR dengan opsional edge functions; edge TTFB helps LCP |
adapter-cloudflare | SSR pada Workers | Edge SSR globally — potentially fastest TTFB/LCP |
adapter-netlify | SSR + CDN | Similar profile untuk Vercel |
untuk sebuah blog atau docs situs, adapter-static dengan prerendering memberikan Anda maximum speed
dan crawlability. untuk dynamic situs, adapter-cloudflare atau adapter-vercel put SSR
di edge, yang dapat shrink TTFB dan help Largest Contentful Paint — tetapi
adapter hanya picks deployment shape. Sebenarnya TTFB bergantung pada Anda data fetching,
caching, dan runtime’s cold-mulai perilaku, so mengukur deployed halaman rather
daripada assuming adapter alone delivers win.
sebuah adapter adalah sebuah boundary, tidak hanya sebuah deploy target: streaming, filesystem,
caching, edge/runtime APIs, redirects, dan error menangani dapat semua behave differently
antara adapters. sebuah route itu looks correct dengan local dev server atau
adapter-node tidak guaranteed untuk behave identically setelah deployed melalui
adapter-cloudflare atau adapter-vercel — test production bangun pada sebenarnya
target, tidak hanya npm run preview.
Sitemaps dan robots.txt
SvelteKit memiliki Tidak dibangun-di sitemap atau robots.txt — like sebuah headless setup, Anda bangun them explicitly.
- Sitemap, manual: buat
src/routes/sitemap.xml/+server.jsitu mengembalikan XML. tambahkanexport const prerender = truejika Anda’re padaadapter-static. - Sitemap, dynamic: sebuah server-dirender endpoint itu kueri Anda CMS/database dan mengembalikan fresh XML pada setiap permintaan — best untuk besar atau fast-mengubah situs.
- Sitemap, packages:
svelte-sitemapscans routes post-bangun (untuk SSG), dansveltekit-static-sitemapgenerates dari prerendered routes. - robots.txt: drop sebuah static file di
static/(disajikan di/robots.txtsecara otomatis) atau generate ini dari sebuahsrc/routes/robots.txt/+server.jsendpoint. Whichever Anda choose, jangan block Anda.js/.css— Google tidak akan render dari blocked files.
performa dan Core Web Vitals
SvelteKit’s compiler dan kerangka kerja mechanics memberikan Anda sebuah structural head mulai pada
performa, dan Core Web Vitals adalah sebuah peringkat input — tetapi mechanics themselves
jangan jaminan sebuah score. compiler outputs vanilla JS dengan Tidak virtual DOM dan Tidak
runtime library, so sebuah typical SvelteKit halaman ships lebih sedikit JavaScript daripada sebuah
equivalent React-based app; automatic per-route code splitting, dibangun-di asset dan
tautan preloading, file-hashing untuk panjang-lived caching, dan edge deployment melalui
several adapters adalah semua tersedia. Apa Anda bangun dengan itu mechanics — halaman
weight, image menangani, ketiga-party scripts, hydration cost, dan deployment
target Anda sebenarnya choose — masih decides Anda diukur CWV dan Anda rankings.
Treat kerangka kerja sebagai menghapus obstacles, tidak sebagai delivering hasil.
SvelteKit docs poin Anda di right pengukuran alat:
“Google’s PageSpeed Insights and WebPageTest are excellent ways to understand the
performance characteristics of a site.” (terjemahan) “Google’s PageSpeed Insights dan WebPageTest adalah excellent cara untuk memahami
performa characteristics dari sebuah situs.” Image optimization adalah tersedia melalui
@sveltejs/enhanced-img.
AI crawler dan SSR imperative
Di sini’s 2026 wrinkle older SvelteKit SEO guides miss. rendering perilaku untuk
GPTBot (OpenAI), ClaudeBot (Anthropic), PerplexityBot, dan Bingbot fetch behind
Copilot adalah provider- dan versi-spesifik, dan saat ini provider documentation
tidak establish satu shared render langkah Anda dapat rely pada. Treat “generally fetches
static HTML tanpa executing JavaScript” (terjemahan) “umumnya fetches
static HTML tanpa executing JavaScript” sebagai safe planning assumption, tidak sebuah
jaminan tentang setiap provider forever. sebuah CSR route (bare Svelte, atau SvelteKit dengan
ssr: false) ships setiap satu dari ini crawler yang sama empty shell sebuah pertama-fetch
Googlebot permintaan sees; SvelteKit’s default SSR puts Anda konten di mentah HTML
so Tidak crawler memiliki untuk bergantung pada sebuah render langkah di semua. itu’s argument untuk mempertahankan
SSR pada untuk apa pun Anda ingin AI sistem untuk see — tidak sebuah promise itu SSR jaminan
inclusion di sebuah AI jawaban, yang bergantung pada factors well beyond rendering.
umum SvelteKit SEO mistakes
- Fetching SEO data di
onMount()alih-alih sebuah server muat function — metadata tidak di awal HTML. - Shipping SPA fallback mode (
ssr: false) untuk konten Anda ingin diperingkatkan. adapter-staticdenganssr: false— empty shells, tidak prerendered halaman.- Blocking JS/CSS di
robots.txt— breaks rendering. - Skipping
trailingSlashconfiguration — duplicate-konten variants. - menggunakan hash/fragment routing — Googlebot dapat’t resolve itu URLs (SvelteKit’s History API default sudah melindungi Anda di sini).
jika Anda’re coming di ini dari lebih luas kerangka kerja angle, Svelte/SvelteKit adalah satu dari decoupled frontends sebuah CMS headless pairs dengan, dan rendering-mode logic di sini adalah yang sama logic itu governs JavaScript SEO umumnya — itu topics langsung alongside ini satu di cluster.
AI summary
sebuah condensed take pada Advanced versi:
«- Svelte ≠ SvelteKit. Bare Svelte compiles to lean vanilla JS but is CSR-only — content isn’t in the raw HTML. SvelteKit renders SSR by default and ships full HTML. Use SvelteKit for anything that must rank.
- Why rendering mode matters: Google queues all
200pages for rendering (delay); Bing is less reliable at JS; AI-crawler rendering (GPTBot, ClaudeBot, PerplexityBot) is provider-specific and generally treated as fetch-only. SSR/prerender puts content in the first response so no crawler depends on a render step. - Four modes: SSR (default), prerender/SSG (
prerender = true, build-time HTML), SPA fallback (ssr: false, docs warn “large negative performance and SEO impacts”), and hybrid (mix per route — SvelteKit’s killer feature). - The trap:
adapter-static+ssr: falseproduces empty shells, not prerendered HTML. Prerendering is SSR at build time — keep SSR on. - Metadata: manage
<title>/meta with<svelte:head>(no library needed). Feed it from a+page.server.jsload function, notonMount()(client-only). - Routing: History API by default (good — hash routing is bad for SEO);
configure
trailingSlash; prerendered dynamic routes need anentriesfunction. - Adapters:
adapter-static(SSG, content sites) vs.adapter-node/vercel/cloudflare(SSR; edge adapters can cut TTFB, which helps LCP — but measure the » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian enam puluh satu, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.) « deployed route, since adapters differ in streaming, caching, and runtime behavior). - No built-in sitemap/robots.txt — build them (manual
+server.jsroute, dynamic endpoint, or a package). Never block.js/.css. - CWV head start: compiler output ships less JS than React; code splitting, preloading, caching, edge deployment are all available — but page weight, images, third-party scripts, and your deployment choice still decide the measured score. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian enam puluh satu, bagian kecil dua: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Dokumentasi resmi
Utama-sumber documentation dari SvelteKit dan mesin pencari.
SvelteKit
- SEO • SvelteKit Docs — SSR-oleh-default,
<svelte:head>untuk metadata, trailing-slash normalization, performa, dan sitemap endpoint pattern. - halaman options (prerender, ssr, csr) • SvelteKit Docs — cara set rendering mode per route, dan SPA-mode warning.
- Static situs generation (adapter-static) • SvelteKit Docs — prerendering untuk static files dan
ssrrequirement. - memuat data • SvelteKit Docs — server vs. universal muat functions (di mana Anda SEO data seharusnya menjadi fetched).
- performa • SvelteKit Docs — code splitting, preloading, caching, dan pengukuran alat.
- memahami JavaScript SEO Basics — three-phase proses, render queue, History API routing, dan “tidak all bots dapat jalankan JavaScript” (terjemahan) “tidak semua bot dapat jalankan JavaScript” guidance.
- baru evergreen Googlebot — Googlebot’s move untuk evergreen Chromium dan apa ini masih tidak mendukung.
- SEO Guide untuk Web Developers — SSR/prerendering recommendation untuk dapat diindeks konten.
Quotes dari sumber
pada—record statements dari SvelteKit docs dan Google. setiap tautan adalah sebuah deep tautan itu jumps untuk quoted passage pada sumber halaman.
SvelteKit docs — rendering & SEO
- “This option has large negative performance and SEO impacts” (terjemahan) “ini option memiliki besar negative performa dan SEO impacts” — pada berjalan sebuah app
sebagai sebuah client-side-dirender SPA (
ssr: falsefallback). Jump untuk quote - “Google’s PageSpeed Insights and WebPageTest are excellent ways to understand the performance characteristics of a site.” (terjemahan) “Google’s PageSpeed Insights dan WebPageTest adalah excellent cara untuk memahami performa characteristics dari sebuah situs.” Jump untuk quote
Google — JavaScript & rendering
«- “All pages with a 200 HTTP status code are sent to the rendering queue, no matter whether JavaScript is present on the page.” Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tujuh puluh lima, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.) «- “Server-side or pre-rendering is still a great idea because it makes your website faster for users and crawlers, and not all bots can run JavaScript.” Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tujuh puluh lima, bagian kecil dua: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.) «- “Google Search won’t render JavaScript from blocked files or on blocked pages.” Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tujuh puluh lima, bagian kecil tiga: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Patrick Stox (my own berfungsi — JavaScript SEO: sebuah Definitive Guide)
- “JavaScript adalah tidak bad untuk SEO, dan ini tidak evil. ini sekadar berbeda dari apa banyak SEOs adalah digunakan untuk, dan ada a bit dari a learning curve.” (terjemahan) “JavaScript adalah tidak buruk untuk SEO, dan ini adalah tidak evil. ini adalah hanya berbeda dari apa banyak SEOs adalah digunakan untuk, dan ada sebuah bit dari sebuah learning curve.”
- pada rendering modes: “Any kind of SSR, static rendering, and prerendering setup is going to be fine for search engines.” (terjemahan) “apa pun jenis dari SSR, static rendering, dan prerendering setup adalah going untuk menjadi fine untuk mesin pencari.”
- pada CSR: “The most problematic one is going to be full client-side rendering where all of the rendering happens in the browser. While Google will probably be OK client-side rendering, it’s best to choose a different rendering option to support other search engines.” (terjemahan) “paling problematic satu adalah going untuk menjadi penuh rendering sisi klien di mana semua dari rendering happens di browser. Sementara Google akan probably menjadi OK rendering sisi klien, ini adalah best untuk choose sebuah berbeda rendering option untuk mendukung lainnya mesin pencari.”
SvelteKit SEO checklist
sebuah quick lulus untuk konfirmasi mesin pencari dan AI crawler dapat see Anda SvelteKit konten:
- Anda’re menggunakan SvelteKit, tidak bare Svelte, untuk apa pun itu perlu untuk peringkat.
- SSR adalah pada ( default) untuk dapat diindeks routes — Tidak accidental
ssr: false. - konten-berat halaman gunakan prerender (
export const prerender = true) di mana mereka dapat. - dengan
adapter-static,ssradalah left pada so prerendering outputs nyata HTML (tidak empty shells). - setiap halaman memiliki sebuah unique
<title>dan<meta name="description">melalui<svelte:head>. - SEO metadata adalah fetched di sebuah
+page.server.jsmuat function, tidak dionMount(). - Canonical, Open Graph, dan JSON-LD adalah dirender server-side, tidak injected client-side.
-
trailingSlashadalah set explicitly disvelte.config.js. - Prerendered dynamic routes memiliki sebuah
entriesfunction enumerating paths. - sebuah sitemap ada (
+server.jsroute atau package) dan sebuah robots.txt adalah distatic/atau sebuah route. -
robots.txtmelakukan tidak block.jsatau.css. - Routing adalah History API (SvelteKit default) — Tidak hash/fragment routes.
- Anda verified dirender HTML di GSC pemeriksaan URL (konten + metadata present pada pertama fetch).
mental models
«1. The Svelte-vs-SvelteKit fork. Before anything else, answer: bare Svelte or SvelteKit? Bare Svelte is CSR-only — content isn’t in the HTML. SvelteKit is SSR-first. Nearly every “Svelte SEO problem” traces back to someone using plain Svelte (or disabling SvelteKit’s SSR) for content that needs to rank. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh tujuh, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
2. Prerendering = SSR di bangun time.
“Static” (terjemahan) “Static” tidak berarti “Tidak rendering.” (terjemahan) “Tidak rendering.” Prerendering berjalan Anda server render di bangun
time dan saves HTML. itu’s mengapa ssr: false dapat’t prerender — ada tidak ada apa pun untuk
render. pertahankan SSR pada; choose ketika ini berjalan (permintaan time = SSR, bangun time =
prerender).
3. rendering-mode-per-route decision. SvelteKit lets Anda choose per route, so match mode untuk konten:
- Static-ish konten (blog, docs, marketing) → prerender (SSG).
- Fresh/dynamic konten (listings, personalized halaman) → SSR.
- Behind-sebuah-login, tidak-terindeks UI → SPA fallback adalah acceptable di sana hanya.
4. HTML-pertama metadata.
Apa pun sebuah crawler perlu — judul, deskripsi, canonical, JSON-LD — belongs di
server-dirender HTML melalui <svelte:head> fed oleh sebuah server muat function. onMount()
metadata adalah seen late oleh Google, dan providers itu treat AI crawler sebagai fetch-hanya
tidak akan see ini di semua.
5. adapter = deployment shape. adapter decides di mana SSR berjalan (atau apakah ini adalah semua static). Static untuk konten situs; node/vercel/cloudflare untuk SSR. Edge adapters dapat shrink TTFB, yang dapat help LCP — tetapi adapter adalah satu input; Anda data fetching, caching, dan runtime’s cold-mulai perilaku decide apa Anda sebenarnya mengukur. Adapters juga differ di streaming, filesystem access, dan error menangani, so verify production perilaku per adapter alih-alih assuming fitur parity.
«6. Plan for crawlers that don’t run your JavaScript. Rendering behavior for AI crawlers is provider- and version-specific, and current provider documentation doesn’t guarantee a shared render step. The safe planning assumption is fetch-only: if content isn’t in the initial HTML, treat it as invisible to that class of crawler. SSR/prerender removes the dependency on any crawler’s rendering capability at all — the strongest lever you have, not a guarantee about what any one AI system does with the result. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian sembilan puluh dua, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
SvelteKit SEO — cheat sheet
rendering modes (set per route melalui halaman options)
| Mode | Bagaimana | SEO | gunakan untuk |
|---|---|---|---|
| SSR | default | ✅ Penuh HTML pada pertama permintaan | Dynamic / fresh konten |
| Prerender (SSG) | export const prerender = true | ✅ Best — static HTML di bangun | Blog, docs, marketing |
| SPA fallback | export const ssr = false | ⚠️ “Large negative … SEO impacts” (terjemahan) “besar negative … SEO impacts” | App shells behind sebuah login hanya |
| Hybrid | mix per route | ✅ Best dari setiap | sebagian besar nyata situs |
** trap**
adapter-static+ssr: false→ empty shells, tidak prerendered HTML. pertahankanssrpada denganadapter-static.
Adapters
| Adapter | rendering | Note |
|---|---|---|
adapter-static | SSG | benar static; Tidak server; pertahankan SSR pada |
adapter-node | SSR | Node server; penuh flexibility |
adapter-vercel | SSR + edge | Edge dapat cut TTFB → mengukur LCP impact |
adapter-cloudflare | SSR pada Workers | sering rendah TTFB; test deployed route |
adapter-netlify | SSR + CDN | Similar profile untuk Vercel |
Fast aturan
- Metadata →
<svelte:head>(Tidak library needed); feed dari+page.server.jsmuat, tidak pernahonMount(). Konfirmasi setiap route’s judul/deskripsi adalah unique. - Routing → History API (default). tidak pernah hash/fragment routes.
- Set
trailingSlashexplicitly. - Prerendered dynamic routes → tambahkan sebuah
entriesfunction. - Tidak dibangun-di sitemap/robots.txt — bangun them (
+server.jsroute atau package). - tidak pernah block
.js/.cssdi robots.txt. - AI crawler → umumnya fetch-hanya, provider-spesifik → pertahankan SSR pada so konten tidak bergantung pada sebuah render langkah.
- Options (
ssr/csr/prerender/trailingSlash) adalah hierarchical — periksa nilai itu applies untuk spesifik route, tidak hanya project default.
Plain Svelte atau SvelteKit?
Choose rendering path
Svelte SEO mistakes
- menggunakan plain client-hanya Svelte untuk penelusuran landing halaman. Move rankable routes untuk SvelteKit SSR atau prerendering.
- Setting
ssr = falseglobally. itu turns situs ke sebuah SPA dan menghapus menyelesaikan awal HTML. Cakupan client-hanya perilaku untuk routes itu melakukan tidak perlu penelusuran visibilitas. - Updating
<svelte:head>hanya setelah browser fetches. muat metadata dengan yang sama server/bangun data itu renders halaman. - menggunakan hash-based URLs untuk konten routes. Hash fragments adalah tidak terpisah server routes. gunakan wajar pathname routing.
- Testing hanya setelah hydration. Bandingkan mentah HTML dengan dirender DOM so client code cannot hide missing sumber konten.
Mentah HTML adalah sebuah empty app shell
mungkin penyebab: plain Svelte SPA output atau ssr = false. Perbaiki: gunakan SvelteKit SSR/prerendering untuk route dan move essential memuat untuk server-compatible load. Konfirmasi: curl mengembalikan heading, konten, dan tautan internal.
judul dan canonicals muncul hanya setelah JavaScript
mungkin penyebab: head nilai bergantung pada client lifecycle atau browser-hanya fetching. Perbaiki: mengembalikan data selama SSR/prerender dan render ini melalui <svelte:head>. Konfirmasi: mentah dan dirender head nilai agree.
sebuah dynamic route adalah missing dari sebuah static bangun
mungkin penyebab: prerenderer cannot menemukan parameterized path. Perbaiki: expose dapat di-crawl tautan atau configure entries, atau render itu route pada demand. Konfirmasi: deployed route mengembalikan sebuah menyelesaikan 200 halaman.
halaman berfungsi locally tetapi fails setelah deployment
mungkin penyebab: adapter mismatch, missing server mendukung, atau environment-dependent data fetching. Perbaiki: test production adapter output dan -nya runtime variables. Konfirmasi: production sumber HTML matches tested bangun.
Konfirmasi SvelteKit adalah sebenarnya serving dirender HTML
seluruh poin dari SvelteKit’s SSR adalah itu konten adalah di mentah HTML — sebelum apa pun
JavaScript berjalan. fastest cara untuk konfirmasi Anda tidak accidentally ship sebuah CSR shell
adalah untuk fetch mentah respons dan cari Anda konten. sebuah plain curl tidak jalankan
JavaScript, so ini sees persis apa sebuah non-rendering crawler sees.
macOS / Linux
# Raw HTML as the server sends it (no JS executed)
curl -sL "https://example.com/your-page/" -o raw.html
# Is your real content in the raw HTML? (empty result = you're shipping a CSR shell)
grep -o "Your unique headline text" raw.html
# Is your title/description in the initial response?
grep -iE "<title>|name=\"description\"" raw.htmlWindows (PowerShell)
Invoke-WebRequest -Uri "https://example.com/your-page/" -OutFile raw.html
Select-String -Path raw.html -Pattern "Your unique headline text"
Select-String -Path raw.html -Pattern "<title>","name=`"description`""jika Anda headline dan metadata adalah present di raw.html, SSR/prerendering adalah berfungsi.
jika mereka’re missing tetapi terlihat di browser, Anda konten bergantung pada client-side
rendering — periksa bahwa ssr tidak atur ke false dan itu Anda’re tidak fetching konten
hanya di onMount().
periksa Anda’re tidak blocking JS/CSS
curl -sL "https://example.com/robots.txt" | grep -iE "disallow.*\.(js|css)|Disallow:\s*/(_app|assets)"sebuah Disallow matching /_app/ (SvelteKit’s bundled output) atau Anda CSS berarti Google
dapat’t render halaman — hampir selalu sebuah mistake.
alat untuk debugging SvelteKit SEO
«- URL Inspection (Google Search Console) — the source of truth. Run a live test, then check the rendered HTML, screenshot, and page resources to confirm your content and metadata are present (and that nothing is blocked).
- PageSpeed Insights — the SvelteKit docs explicitly recommend it; checks Core Web Vitals (LCP/INP/CLS) that SvelteKit’s lean output is built to win.
- WebPageTest — the other tool the SvelteKit docs name; waterfall + filmstrip view for diagnosing TTFB and render timing.
- Rich Results Test — fast way to confirm JSON-LD made it into the rendered output.
- Screaming Frog SEO Spider — crawl with JS rendering on/off to diff raw vs. rendered HTML across the whole SvelteKit site.
- Ahrefs Site Audit — surfaces broken canonicals, missing metadata, redirect chains, and indexability issues at scale.
- View source /
curl— the quickest “is my content in the raw HTML?” check (see the Scripts tab). » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus tiga puluh dua, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Uji pemahaman Anda: Svelte SEO
Five quick pertanyaan pada bagaimana Svelte dan SvelteKit memengaruhi penelusuran visibilitas. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My related writing
- JavaScript SEO: sebuah Definitive Guide — my penuh reference pada rendering, DOM parity, dan rendering-mode trade-offs itu underpin semuanya di sini. ini mentions Svelte alongside React, Vue, dan Angular sebagai kerangka kerja dengan head/meta modules untuk SEO.
- Beginner’s Guide untuk SEO teknis — di mana rendering dan crawling fit di bigger picture.
My speaking
- Bagaimana Penelusuran berfungsi (SlideShare) — my walkthrough dari crawling, rendering, pengindeksan, dan peringkat. (My standing disclaimer applies: “Ini adalah my understanding dari sistem… tidak going untuk menjadi 100% menyelesaikan atau accurate.” (terjemahan) “ini adalah my understanding dari sistem… tidak going untuk menjadi 100% menyelesaikan atau accurate.”)
«From around the industry
- SEO • SvelteKit Docs — the official, authoritative starting point: SSR by default,
<svelte:head>, trailing slashes, and the sitemap pattern. - Page options (prerender, ssr, csr) • SvelteKit Docs — the per-route rendering controls and the SPA-mode SEO warning, in the team’s own words.
- Understand JavaScript SEO Basics (Google Search Central) — the render queue, “not all bots can run JavaScript,” and the History API guidance.
- SvelteKit SEO: Your Secret Weapon (Okupter) — a practitioner guide covering meta tags, prerendering, rendering modes, structured data, and sitemaps.
- SvelteKit SEO: Search Engine Optimization Metadata (Rodney Lab) — the essential meta tags, an SEO component pattern, social cards, and language declaration.
- How to add a basic SEO component to SvelteKit (Thilo Maier) — a code-focused walkthrough of a reusable SEO component.
- Creating a Sitemap in SvelteKit (Bryan Anthonio) — a clear, current guide to the
+server.jssitemap-endpoint approach. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus empat puluh tiga, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.) «- Rich Harris explains why SvelteKit pushes for SSR (DEV Community) — context on why SvelteKit’s creator made SSR the default and pushes against SPA/CSR. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus empat puluh tiga, bagian kecil dua: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Log perubahan
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.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.