Panduan SolidJS SEO
cara membuat SolidJS situs dapat di-crawl, dapat diindeks, dan fast — why bare SolidJS adalah CSR-hanya, how SolidStart's SSR/SSG fixes ini, managing head tags dengan @solidjs/meta, dan why SolidJS hydrates (ini adalah not resumable like Qwik).
Bahasa
SolidJS adalah sebuah fast, React-like library dengan fine-grained reactivity dan no virtual DOM — tetapi pada -nya own ini adalah client-side rendered, so ini ships sebuah empty HTML shell dengan yang sama pengindeksan masalah sebagai bare React. fix adalah SolidStart, official meta-framework: SSR atau SSG put nyata konten dan metadata di pertama respons. Manage head tags dengan @solidjs/meta (<Title>, <Meta>, <Link>), kembalikan nyata 404s dengan <HttpStatusCode>, dan fetch data pada server dengan createAsync. One thing not untuk mix up: SolidJS hydrates — ini adalah not resumable. Resumability adalah Qwik's trick. SolidJS's win adalah sebuah Core Web Vitals edge pada top dari standard SSR.
Evidence for this claim The article's described solidjs-seo capabilities must be evaluated against the platform's current documentation rather than assumed to be search-engine behavior. Scope: Platform-specific capability documentation. Confidence: high · Verified: SolidStart documentation Evidence for this claim Regardless of platform, Google needs crawlable URLs, accessible rendered content, descriptive metadata, and valid search directives. Scope: Google requirements independent of platform. Confidence: high · Verified: Google Search Central: SEO Starter GuideTL;DR — SolidJS adalah sebuah fast, React-like library, tetapi pada -nya own ini membangun halaman di Anda browser — so mesin pencari pertama see sebuah empty shell. fix adalah SolidStart, -nya official full-stack alat, which mengirim finished HTML untuk both pengguna dan crawler. rendering mode adalah sebuah per-route setting, not sebuah whole-situs switch — gunakan server rendering (SSR atau SSG) pada routes itu perlu untuk peringkat, set Anda judul dan meta tags dengan @solidjs/meta, dan verify setiap route’s actual HTML output alih-alih assuming whole situs adalah covered.
What SolidJS adalah
SolidJS adalah sebuah JavaScript library untuk membangun pengguna interfaces. jika Anda’ve seen React, ini’ll look familiar — ini menggunakan yang sama JSX syntax dan sebuah similar component style. big difference di bawah hood adalah itu SolidJS memiliki no virtual DOM: ini updates exact pieces dari halaman itu perubahan, which membuat ini very fast.
catch untuk SEO: oleh default, SolidJS adalah client-side rendered (CSR). server mengirim sebuah almost-empty HTML file, lalu Anda browser downloads JavaScript dan membangun halaman. itu’s sebuah masalah because pertama thing sebuah search mesin sees adalah empty versi — no text, no judul, no deskripsi meta.
Why CSR adalah sebuah SEO masalah
When Google melakukan crawl sebuah CSR halaman, ini sees empty shell pertama. ini dapat come back later, run JavaScript, dan read nyata konten — tetapi itu kedua pass dapat take anywhere dari hours untuk weeks. Worse, Bing dan social-media crawler (Facebook, LinkedIn, X) sering don’t run JavaScript di semua, so mereka dapat tidak pernah see Anda konten atau Anda share previews.
ini adalah yang sama issue bare React, Vue, dan Angular memiliki. ini adalah not unique untuk SolidJS — ini adalah sebuah property dari rendering sisi klien. (See JavaScript SEO untuk full picture.)
fix: SolidStart
SolidStart adalah official meta-framework untuk SolidJS — think dari ini sebagai SolidJS’s versi dari Next.js (untuk React) atau Nuxt (untuk Vue). ini lets server kirim finished HTML, so mesin pencari dan social crawler get Anda konten pada very pertama permintaan. Two main modes:
- SSR (rendering sisi server) — halaman adalah dibangun pada server setiap time ini adalah requested. baik untuk konten itu perubahan sering.
- SSG (static situs generation) — halaman adalah dibangun once di deploy time dan disajikan sebagai plain files. Fastest option; ideal untuk blogs, docs, dan marketing halaman.
Setting Anda judul dan meta tags
untuk control Anda <title>, deskripsi meta, dan social share tags, gunakan
@solidjs/meta package. ini gives Anda <Title>, <Meta>, dan <Link>
components Anda drop ke Anda halaman — SolidJS’s equivalent dari React Helmet. dengan
SolidStart’s SSR turned pada, itu tags tampilkan up di HTML itu crawler read.
one thing not untuk mix up
Anda dapat hear SolidJS lumped di dengan Qwik sebagai “the resumable frameworks.” (terjemahan) “ resumable frameworks.” itu’s wrong. Resumability adalah Qwik’s idea. SolidJS menggunakan ordinary hydration — ini hanya melakukan ini more cheaply daripada React. untuk SEO itu distinction barely penting (both put konten di HTML), tetapi ini adalah sebuah umum mistake.
ingin nyata mechanics — SSR vs. SSG vs. streaming, @solidjs/meta API, nyata 404s, server-side data fetching, dan Core Web Vitals story? Switch untuk Advanced tab.
Evidence for this claim The article's described solidjs-seo capabilities must be evaluated against the platform's current documentation rather than assumed to be search-engine behavior. Scope: Platform-specific capability documentation. Confidence: high · Verified: SolidStart documentation Evidence for this claim Regardless of platform, Google needs crawlable URLs, accessible rendered content, descriptive metadata, and valid search directives. Scope: Google requirements independent of platform. Confidence: high · Verified: Google Search Central: SEO Starter GuideTL;DR — SolidJS adalah fine-grained reactive (signals, no virtual DOM) dan ships sebagai sebuah CSR library oleh default — sebuah empty shell dengan yang sama Wave-1 pengindeksan masalah sebagai bare React. SolidStart adalah fix: SSR, SSG (route prerendering), dan streaming SSR put konten dan metadata di pertama respons. Manage head tags dengan @solidjs/meta (
<Title>,<Meta>,<Link>di bawah sebuah<MetaProvider>), kembalikan nyata kode status dengan<HttpStatusCode>, dan muat data pada server dengancreateAsyncso ini lands di SSR HTML. accuracy spine: SolidJS hydrates — ini adalah NOT resumable (itu’s Qwik). -nya fine-grained reactivity adalah sebuah client update optimization, not sebuah server-untuk-client startup one — so SEO upside adalah mostly sebuah Core Web Vitals (INP/TBT) edge layered pada top dari normal SSR.
SolidJS architecture: what’s actually berbeda
SolidJS menggunakan JSX itu looks identical untuk React’s, plus hooks-like primitives
(createSignal, createEffect, createMemo). tetapi execution model adalah
fundamentally berbeda:
- React re-runs whole component function when state perubahan dan diffs sebuah virtual DOM untuk decide what untuk update.
- SolidJS compiles JSX untuk nyata DOM operations di bangun time. Components run once; reactive signals wire nilai directly untuk spesifik DOM nodes itu depend pada them. When sebuah signal perubahan, Solid updates hanya itu node — no reconciliation, no virtual DOM overhead.
ini adalah why SolidJS consistently sits near top dari js-framework-benchmark suite, dan why -nya runtime adalah dramatically leaner daripada React’s re-render model. library itself adalah roughly 7KB gzipped. Smaller, surgical updates plus sebuah tiny runtime adalah performa story — tetapi none dari itu perubahan rendering mode, which adalah what decides Anda SEO fate.
CSR oleh default: SEO masalah
bangun dengan SolidJS alone (no SolidStart) dan Anda get sebuah client-side-rendered app:
- server mengirim
index.htmldengan sebuah near-empty body — typically sebuah<div id="root"></div>dan sebuah script tag. - browser downloads JS bundle, runs Solid’s reactive code, dan populates DOM.
- Googlebot’s pertama wave sees empty shell — tanpa konten, no metadata.
- Googlebot’s kedua wave ( rendering queue) eventually runs JS dan sees konten — tetapi timing adalah unpredictable, dari hours untuk weeks.
- Bing, social crawler, dan non-JS bot dapat tidak pernah see konten di semua.
ini adalah two-wave rendering process, dan ini adalah yang sama trap apa pun CSR SPA falls ke. practical impacts: slow initial pengindeksan dari baru konten; judul dan deskripsi meta missing dari raw HTML (so wrong/blank snippets di SERPs); dan soft 404s, because sebuah CSR app dapat’t mengembalikan benar HTTP 404 — server selalu jawaban 200 dengan app shell.
SolidStart: fix
SolidStart (1,0, stable) adalah official SolidJS meta-framework, dibangun pada Vinxi (Vite + Nitro). ini menyediakan:
- Isomorphic, file-based routing — files di bawah
src/routes/map untuk URLs (src/routes/blog/[slug].tsx→/blog/:slug). One correction worth menjadi precise tentang: SolidStart itself melakukan not ship sebuah router atau metadata library bundled di — per -nya own docs, “SolidStart itself does not ship with a Router or Metadata library. Rather, it leaves that open for you to use any library you want.” (terjemahan) “SolidStart itself melakukan not ship dengan sebuah Router atau Metadata library. Rather, ini leaves itu open untuk Anda untuk gunakan apa pun library Anda ingin.” routing dan@solidjs/metaperilaku described here come dari menambahkan@solidjs/routerdan@solidjs/metaexplicitly ( official templates tambahkan both untuk Anda, which adalah why ini dapat feel automatic — periksa Andapackage.jsonalih-alih assuming mereka came free dengan framework). - Multiple rendering modes, chosen per route: CSR, SSR (synchronous, asynchronous, atau streaming), dan SSG / route prerendering. sebuah SolidStart project isn’t “SSR” (terjemahan) “SSR” atau “CSR” (terjemahan) “CSR” sebagai sebuah whole — setiap route picks -nya own mode, so verify rendering config (dan resulting HTML) untuk spesifik route Anda care tentang alih-alih assuming whole situs inherited one setting.
- server functions — sebuah
"use server"directive untuk RPC-style server code (data fetching, database access). - Adapters untuk Cloudflare, Vercel, Netlify, Deno, Node, dan static hosting.
versi note: ini reflects SolidStart 1,0’s saat ini documentation, which labels itself beta dan adalah last updated 2026-04-28 — confirm detail terhadap docs untuk versi Anda’re actually running sebelum treating apa pun dari ini sebagai permanent API surface.
SSR vs. SSG vs. streaming — SEO read
- SSR (synchronous, asynchronous, atau streaming — SolidStart names ini sebagai distinct sub-modes) delivers full konten pada pertama permintaan dan adalah fully dapat diindeks pada Wave 1. Best untuk frequently changing halaman.
- SSG (route prerendering) membangun HTML di deploy time — fastest TTFB dan
LCP, CDN-cacheable, no per-permintaan server berfungsi. Best untuk blogs, docs, dan
marketing halaman. Configure prerendered routes di
app.config.ts:
// app.config.ts
import { defineConfig } from "@solidjs/start/config";
export default defineConfig({
server: {
prerender: {
routes: ["/", "/about", "/blog"],
},
},
});- Streaming SSR mengirim HTML progressively untuk meningkatkan TTFB pada data-heavy halaman; Google renders full streamed output.
- CSR adalah fine untuk authenticated dashboards dan alat itu don’t perlu untuk peringkat — not untuk public konten.
Managing head tags dengan @solidjs/meta
@solidjs/meta package adalah SolidJS equivalent dari React Helmet atau
Next.js’s <Head>. ini adalah SSR-ready dan asynchronous. Wrap Anda app di
<MetaProvider> so tags adalah collected selama SSR, lalu set per-halaman tags inside
Anda route components:
// src/routes/about.tsx
import { Title, Meta, Link } from "@solidjs/meta";
export default function AboutPage() {
return (
<>
<Title>About Us — My Site</Title>
<Meta name="description" content="Learn more about us." />
<Link rel="canonical" href="https://example.com/about" />
<Meta property="og:title" content="About Us" />
<Meta property="og:description" content="Learn more about us." />
<Meta property="og:image" content="https://example.com/og-about.jpg" />
<main>...</main>
</>
);
}components available adalah <Title>, <Meta>, <Link>, <Style>,
<Base>, dan <MetaProvider> wrapper. Deduplication adalah dibangun di:
<Meta> tags dengan matching name attributes override parent definitions —
deepest (sebagian besar spesifik) one wins, dan ini berfungsi correctly selama SSR. So sebuah root
default judul dan per-halaman overrides behave sebagai Anda’d expect.
One warning straight dari docs: don’t tambahkan raw <title> tags di Anda
server files — mereka override @solidjs/meta’s functionality. selalu gunakan
<Title> component, tidak pernah sebuah hand-written HTML judul di Anda server template.
data terstruktur (JSON-LD)
Google mendukung JSON-LD whether ini adalah di raw HTML atau injected oleh JavaScript, tetapi SSR-rendered JSON-LD adalah reliable choice. di SolidStart, render ini di route component:
export default function ArticlePage() {
const schema = {
"@context": "https://schema.org",
"@type": "Article",
"headline": "My Article",
"author": { "@type": "Person", "name": "Author Name" },
};
return (
<>
<script
type="application/ld+json"
innerHTML={JSON.stringify(schema)}
/>
<article>...</article>
</>
);
}dengan SSR enabled, JSON-LD appears di server-rendered HTML — preferred approach untuk reliability di seluruh setiap crawler. Validate dengan Rich hasil Test atau pemeriksaan URL alat.
Hydration, not resumability — accuracy spine
Hydration adalah process where, setelah SSR delivers rendered HTML,
framework attaches untuk existing DOM untuk membuat ini interactive: download JS
bundle, execute framework code, reconcile state dengan existing nodes,
attach event listeners. SolidJS menggunakan hydration — yang sama fundamental mechanism
sebagai React’s hydrate, Vue’s createSSRApp, atau Angular SSR.
Resumability (Qwik’s architecture) adalah berbeda: server serializes framework’s execution state ke HTML, dan client resumes dari there without re-executing components — interactive sebelum apa pun JS runs.
myth untuk debunk: SolidJS’s fine-grained reactivity adalah sometimes confused dengan resumability because both hindari “re-running” (terjemahan) “re-running” components di traditional sense. mereka adalah not yang sama thing. Fine-grained reactivity adalah sebuah client-side update optimization; resumability adalah sebuah server-untuk-client startup mechanism. SolidJS masih downloads dan runs -nya runtime sebelum halaman adalah interactive.
SEO implication: both SSR+hydration (SolidJS) dan resumability (Qwik) put rendered HTML di server respons, so both adalah baik untuk pengindeksan. difference adalah Time untuk Interactive dan INP pada slow devices, where Qwik’s near-zero startup JS memiliki edge. untuk crawl dan indeks, SolidStart SSR adalah sudah enough.
Core Web Vitals
SolidJS’s runtime advantages dapat translate ke better Core Web Vitals scores pada routes itu gunakan SSR — tetapi ini isn’t automatic atau universal. No primary source establishes guaranteed cheap hydration atau better outcomes untuk setiap Solid/SolidStart route: bundle size, data fetching, ketiga-party scripts, device, dan route’s actual rendering mode semua determine nyata cost. Treat following sebagai mechanism oleh which SolidJS dapat help, dan mengukur Anda own routes untuk confirm ini melakukan:
- LCP improves because largest konten element adalah di server-rendered HTML — no waiting pada JS.
- INP improves because Solid’s fine-grained runtime handles interactions efficiently (no virtual DOM diffing).
- CLS drops because SSR’d konten doesn’t shift sebagai late-memuat JS fills di.
sebuah caution worth keeping honest: figures like “SolidJS is ~70% faster than React’s virtual DOM” (terjemahan) “SolidJS adalah ~70% faster daripada React’s virtual DOM” come dari synthetic benchmarks (js-framework-benchmark), not dunia nyata data lapangan. nyata CWV depends far more pada implementation quality, data fetching, dan hosting daripada pada framework choice. Treat benchmark angka sebagai directional, dan mengukur Anda own data lapangan di CrUX / Search Console.
Routing, data fetching, dan nyata 404s
Routing. SolidStart menggunakan History API oleh default — tidak pernah gunakan
hash-based (#/page) routing, which mencegah reliable URL penemuan. pertahankan
trailing-slash perilaku consistent dan enforce ini dengan server redirects, not
hanya canonicals.
data fetching untuk SEO. konten itu perlu untuk peringkat harus menjadi dimuat pada
server so ini adalah di SSR HTML. gunakan createAsync dan server functions — not
onMount atau client-side effects, which run setelah HTML adalah dikirim:
// Server-side data fetch — content lands in the initial HTML ✓
import { createAsync } from "@solidjs/router";
import { getPost } from "~/lib/api";
export const route = {
load: ({ params }) => getPost(params.slug),
};
export default function BlogPost(props) {
const post = createAsync(() => getPost(props.params.slug));
return <article>{post()?.content}</article>;
}nyata 404s. sebuah catch-semua route plus <HttpStatusCode> dari @solidjs/start
sets actual HTTP kode respons pada server — sebuah benar 404 alih-alih sebuah soft
404:
// src/routes/[...404].tsx
import { HttpStatusCode } from "@solidjs/start";
export default function NotFound() {
return (
<>
<HttpStatusCode code={404} />
<h1>Page Not Found</h1>
</>
);
}Sitemaps, robots.txt, dan SEO internasional
- robots.txt — tambahkan
public/robots.txtdi project root dan poin ini di Anda sitemap. Don’t block/api/routes digunakan untuk XHR data fetching. - Sitemap — ketiga-party
solid-start-sitemapplugin (oleh madaxen86) generatessitemap.xmldi bangun time dan mendukung dynamic routes via parameter mapping atau sebuah runtime API route. - SEO internasional — emit hreflang dengan
<Link rel="alternate" hreflang="…">dari @solidjs/meta, dan gunakan subdirectory structure (/en/,/fr/) di atas subdomains atau kueri parameters.
umum SolidJS SEO pitfalls
- Running SolidJS CSR without SolidStart SSR/SSG.
- Fetching rankable konten di
onMount/ client-side effects. - Forgetting
<MetaProvider>wrapper (tags won’t render di SSR). - menambahkan raw
<title>HTML tags di server templates (overrides @solidjs/meta). - menggunakan hash-based routing.
- Serving soft 404s without
<HttpStatusCode>. - Blocking API routes di robots.txt.
- Not fingerprinting JS assets (Google caches scripts aggressively).
- konten behind sebuah click/accordion/tab itu tidak pernah auto-memuat ke DOM.
- Assuming SSR berfungsi without verifying via View Source / pemeriksaan URL.
- Assuming
@solidjs/routerdan@solidjs/metacome bundled dengan SolidStart — mereka don’t; SolidStart’s own docs say ini “does not ship with a Router or Metadata library.” (terjemahan) “melakukan not ship dengan sebuah Router atau Metadata library.” Official templates tambahkan both untuk Anda, tetapi sebuah dari-scratch atau customized setup perlu them installed explicitly. - Treating sebuah project sebagai uniformly “SSR” (terjemahan) “SSR” atau “CSR” (terjemahan) “CSR” — rendering mode adalah set per route di SolidStart, so sebuah route Anda assume adalah server-rendered dapat not menjadi.
Where ini sits
SolidJS lives di JavaScript frameworks subcluster alongside Qwik, di bawah broader JavaScript SEO cluster. untuk closest parallel, see React SEO — SolidJS shares React’s JSX dan CSR-oleh-default masalah, tetapi fixes ini dengan SolidStart alih-alih Next.js, dan runs faster thanks untuk no virtual DOM. untuk how Google sees rendered konten, see rendering dan crawling.
AI summary
sebuah condensed take pada Advanced versi:
- SolidJS = fine-grained reactivity, no virtual DOM. Components run once; signals update hanya exact DOM nodes itu perubahan. Tiny runtime (~7KB), consistently near top dari js-framework-benchmark, faster daripada React’s re-render model.
- Bare SolidJS adalah CSR oleh default — sebuah empty HTML shell. sama Wave-1 pengindeksan masalah sebagai bare React/Vue/Angular: Googlebot’s pertama wave sees tanpa konten, rendering adalah queued (hours untuk weeks), dan Bing/social crawler dapat tidak pernah see ini. Soft-404 risk too (CSR dapat’t mengembalikan nyata 404).
- SolidStart adalah fix, per route — official meta-framework offers CSR, SSR (sync, async, atau streaming), dan SSG per route; ini doesn’t default whole project untuk SSR. SSR/SSG routes put konten + metadata di pertama respons, fully dapat diindeks pada Wave 1 — verify spesifik route alih-alih assuming situs-wide coverage.
- Router dan metadata aren’t auto-bundled. SolidStart’s own docs say ini
ships without sebuah router atau metadata library —
@solidjs/routerdan@solidjs/metaadalah explicit additions official templates happen untuk sertakan. - Head tags via @solidjs/meta:
<Title>,<Meta>,<Link>di bawah<MetaProvider>; deduplication berfungsi di SSR; tidak pernah gunakan raw<title>di server files. - nyata 404s dengan
<HttpStatusCode>; server-side data dengancreateAsync(notonMount); History API routing (no hash routes); JSON-LD rendered di route component. - Accuracy spine: SolidJS hydrates — ini adalah NOT resumable. Resumability adalah Qwik’s. Fine-grained reactivity adalah sebuah client-update optimization, not sebuah startup one. Both SSR+hydration dan resumability adalah baik untuk pengindeksan; Qwik hanya wins pada Time untuk Interactive.
- CWV upside adalah mungkin, not guaranteed (pada SSR’d routes): better LCP, INP, dan CLS adalah plausible outcomes — tetapi benchmark gaps adalah synthetic, dan nyata data lapangan depends pada implementation, data, dan hosting, not framework choice alone.
Official documentation
Primary-source documentation dari Google dan SolidJS team.
Google — JavaScript SEO
- memahami JavaScript SEO Basics — crawl → render → indeks pipeline dan two-wave process.
- Dynamic rendering sebagai sebuah Workaround — why Google deprecated dynamic rendering di favor dari SSR, static rendering, dan hydration.
- SEO Guide untuk Web Developers — developer-facing fundamentals.
SolidJS / SolidStart
- SolidJS documentation — official docs home.
- Fine-Grained Reactivity — signals model dan how updates target individual DOM nodes.
- SolidStart — meta-framework: SSR, streaming, routing, server functions.
- SolidStart — Head dan Metadata — managing judul/meta/tautan tags untuk SEO.
- SolidStart — Route Pre-rendering — configuring SSG.
@solidjs/meta
- solid-meta GitHub repository — source dan API reference.
- @solidjs/meta pada npm — package.
- judul component docs dan Meta component docs.
Quotes dari source
pada—record statements dari Google pada JavaScript SEO, plus SolidJS team’s own framing.
Google — how JavaScript apps adalah processed
- “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. memahami JavaScript SEO Basics
- “It’s fine to use JavaScript to inject links into the DOM, as long as such links follow the best practices for crawlable links.” (terjemahan) “ini adalah fine untuk gunakan JavaScript untuk inject tautan ke DOM, sebagai panjang sebagai such tautan ikuti best practices untuk dapat di-crawl tautan.”
— Google Search Central (gunakan
<a href>, notonclickataujavascript:void(0)). memahami JavaScript SEO Basics - “You shouldn’t use JavaScript to change the canonical URL to something else than the URL you specified as the canonical URL in the original HTML.” (terjemahan) “Anda shouldn’t gunakan JavaScript untuk perubahan canonical URL untuk something else daripada URL Anda specified sebagai canonical URL di original HTML.” — Google Search Central. memahami JavaScript SEO Basics
- “Use the History API to implement routing between different views of your web app.” (terjemahan) “gunakan History API untuk implement routing antara berbeda views dari Anda web app.” — Google Search Central (i.e. no fragment/hash routing). memahami JavaScript SEO Basics
SolidJS team — fine-grained reactivity (paraphrased framing)
- SolidStart’s head-dan-metadata docs warn: “Be sure to avoid adding any normal
<title />tags in any server files, as they would override the functionality of @solidjs/meta.” (terjemahan) “menjadi sure untuk hindari menambahkan apa pun normal undefined tags di apa pun server files, sebagai mereka akan override functionality dari @solidjs/meta.” SolidStart — Head dan Metadata
SolidJS SEO checklist
sebuah pass untuk confirm sebuah SolidJS situs adalah dapat di-crawl, dapat diindeks, dan fast:
- Anda’re menggunakan SolidStart dengan SSR atau SSG — not bare SolidJS di CSR mode.
- View Source menampilkan nyata konten dan
<a href>tautan di raw HTML — not hanya<div id="root"></div>. - App adalah wrapped di
<MetaProvider>so head tags render selama SSR. -
<Title>dan<Meta name="description">set per route via @solidjs/meta. - No raw
<title>tags di server files (mereka override @solidjs/meta). - Open Graph + Twitter tags present via
<Meta property="og:…">so social previews berfungsi. - Canonical set dengan
<Link rel="canonical">(not changed via JS setelah muat). - Routing menggunakan History API — no hash (
#/page) routes. - Rankable konten dimuat dengan
createAsync/server functions, notonMount. - Missing halaman mengembalikan nyata 404 via
<HttpStatusCode code={404} />. -
public/robots.txtexists, poin untuk sitemap, dan doesn’t block/api/data routes. - sitemap XML generated (e.g.
solid-start-sitemap) dengan canonical URLs. - JSON-LD rendered di route component dan present di SSR HTML.
- pemeriksaan URL (Search Console) confirms rendered HTML matches.
- Field Core Web Vitals diperiksa di CrUX / Search Console, not hanya lab.
mental models
1. Library vs. meta-framework. SolidJS ( library) decides how UI updates; SolidStart ( meta-framework) decides where ini renders. SEO adalah governed oleh kedua one. Bare SolidJS = CSR = empty shell. SolidStart SSR/SSG = konten di HTML. selalu locate which one Anda’re actually shipping.
2. rendering-mode ladder. untuk apa pun route, pick highest rung konten allows: SSG (static, fastest, best untuk stable konten) → SSR (dynamic, per-permintaan) → streaming SSR (data-heavy) → CSR (hanya untuk non-peringkat, authenticated views). Higher rungs adalah better untuk both crawler dan Core Web Vitals.
3. Two waves, one goal. Google melakukan crawl di Wave 1 (raw HTML) dan renders di Wave 2 (queued). entire poin dari SolidStart SSR adalah untuk membuat Anda konten complete di Wave 1 so Anda tidak pernah depend pada unpredictable Wave 2 queue.
4. Hydration ≠ resumability. SolidJS hydrates (download → execute → attach). Qwik resumes (no re-execution). Fine-grained reactivity speeds updates setelah hydration; ini doesn’t hapus hydration. pertahankan ini straight dan Anda’ll tidak pernah miscategorize SolidJS.
5. server-muat untuk anything itu harus peringkat.
jika konten adalah fetched di onMount, ini lands setelah HTML adalah dikirim — invisible
untuk Wave 1. Fetch ini dengan createAsync/server functions so ini adalah baked ke
SSR respons.
SolidJS SEO — cheat sheet
SolidJS vs. SolidStart
| SolidJS (library) | SolidStart (meta-framework) | |
|---|---|---|
| Default rendering | CSR (empty shell) | SSR (konten di HTML) |
| rendering modes | CSR hanya | SSR, SSG, streaming, CSR |
| Meta tags di raw HTML | No (set client-side) | Yes (@solidjs/meta + SSR) |
| nyata HTTP 404 | No (soft 404) | Yes (<HttpStatusCode>) |
| Sitemap generation | Manual | solid-start-sitemap plugin |
| SEO verdict (per route) | Risky unless Anda bangun di SSR/SSG yourself | dapat menjadi SEO-viable — verify setiap route’s actual rendering mode dan output; SolidStart doesn’t guarantee ini situs-wide |
@solidjs/meta components
| Component | Sets |
|---|---|
<MetaProvider> | Wrapper itu collects tags selama SSR (diperlukan) |
<Title> | <title> |
<Meta> | deskripsi, robots, OG, Twitter cards |
<Link> | canonical, hreflang, preload, stylesheets |
<Style> / <Base> | inline <style> / <base> |
melakukan / don’t
- ✅ gunakan
<Title>dari @solidjs/meta. ❌ Raw<title>di server files. - ✅ History API routing. ❌ Hash (
#/page) routing. - ✅
createAsync/ server functions untuk rankable data. ❌onMountfetch. - ✅
<HttpStatusCode code={404} />. ❌ soft 404 (200 + shell).
Myth-busting
- ❌ “SolidJS is resumable like Qwik.” (terjemahan) “SolidJS adalah resumable like Qwik.” → ini hydrates (cheaply); hanya Qwik resumes.
- ❌ “SolidJS is bad for SEO.” (terjemahan) “SolidJS adalah buruk untuk SEO.” → Bare CSR adalah; SolidStart SSR/SSG adalah fully dapat diindeks.
- ❌ “Google can’t read SolidJS.” (terjemahan) “Google dapat’t read SolidJS.” → ini dapat (modern Chromium); risk adalah Wave-2 delay, dihapus oleh SSR.
SolidJS SEO mistakes untuk hindari
Shipping public konten dengan bare SolidJS CSR
Why ini adalah wrong: pertama respons adalah sebuah app shell, so crawler melakukan not menerima halaman’s konten atau metadata immediately. melakukan ini instead: gunakan SolidStart SSR atau route prerendering untuk setiap public route itu perlu untuk peringkat.
Fetching rankable data di onMount
Why ini adalah wrong: onMount runs setelah server respons, leaving konten out
dari raw HTML. melakukan ini instead: fetch dengan createAsync, route loaders, atau server
functions so data adalah present selama SSR.
Forgetting MetaProvider atau menambahkan sebuah raw judul
Why ini adalah wrong: Without MetaProvider, @solidjs/meta cannot collect tags untuk SSR;
sebuah raw <title> di sebuah server file dapat override -nya output. melakukan ini instead: wrap
app di MetaProvider dan gunakan <Title>, <Meta>, dan <Link> consistently.
menggunakan hash routes atau soft 404s
Why ini adalah wrong: #/page routes adalah poor penemuan targets, dan sebuah missing halaman
itu mengembalikan HTTP 200 looks like sebuah soft 404. melakukan ini instead: gunakan History API
routes dan set sebuah nyata status dengan <HttpStatusCode code={404} />.
Calling fine-grained reactivity resumability
Why ini adalah wrong: SolidJS masih hydrates; ini melakukan not resume server execution state cara Qwik melakukan. melakukan ini instead: describe Solid’s advantage sebagai efficient client updates, lalu verify actual server rendering dan field performa.
Trusting SSR without memeriksa respons
Why ini adalah wrong: sebuah route dapat gunakan SolidStart dan masih leave copy, metadata, atau JSON-LD di client-hanya code. melakukan ini instead: inspect View Source dan initial network respons setelah setiap rendering atau data-memuat perubahan.
Audit sebuah SolidStart respons dari command line
macOS / Linux — inspect status, metadata, dan body konten
URL="https://example.com/blog/example-post"
curl -sSIL "$URL" | sed -n '1,12p'
curl -sSL "$URL" -o /tmp/solidstart-page.html
grep -Ei '<title>|name="description"|rel="canonical"|<h1|application/ld\+json' \
/tmp/solidstart-page.htmlpertama respons seharusnya menjadi sebuah nyata success status untuk sebuah live route, dan raw HTML seharusnya berisi route’s judul, deskripsi, canonical, H1, dan apa pun JSON-LD without running JavaScript.
Windows PowerShell — run yang sama raw-HTML periksa
$url = "https://example.com/blog/example-post"
$response = Invoke-WebRequest -Uri $url
$response.StatusCode
$response.Content | Select-String -Pattern '<title>|name="description"|rel="canonical"|<h1|application/ld\+json'periksa sebuah missing route mengembalikan sebuah benar 404
curl -sS -o /dev/null -w '%{http_code}\n' \
'https://example.com/this-route-should-not-exist'
# Expected: 404DevTools Console — list rendered head signals
({
title: document.title,
description: document.querySelector('meta[name="description"]')?.content,
canonical: document.querySelector('link[rel="canonical"]')?.href,
h1: [...document.querySelectorAll('h1')].map((node) => node.textContent.trim()),
})Run snippet di browser Console, tetapi compare ini dengan command-line hasil. jika sebuah signal exists hanya di rendered DOM, ini adalah masih menjadi ditambahkan setelah initial HTML respons.
mengukur SolidStart SEO performa di lapangan
Largest Contentful Paint oleh route jenis
Metric: Field LCP untuk public konten, marketing, dan lainnya representative route groups.
What ini tells Anda: Whether largest terlihat konten arrives promptly untuk nyata pengguna; SSR helps hanya jika data, images, dan hosting complete path.
cara pull ini: gunakan CrUX atau Search Console Core Web Vitals report, segmented oleh similar URL groups where mungkin.
Benchmark / realistic range: gunakan Google’s saat ini field-data classification dan situs’s own pre-release baseline; melakukan not substitute sebuah synthetic framework benchmark untuk pengguna data.
Cadence: Monthly dan setelah sebuah material rendering, hosting, atau image-delivery perubahan memiliki accumulated data lapangan.
Interaction untuk Next Paint
Metric: Field INP pada interactive SolidJS routes.
What ini tells Anda: Whether fine-grained updates translate ke responsive nyata interactions alih-alih hanya favorable library benchmarks.
cara pull ini: gunakan CrUX atau Search Console, lalu reproduce poor halaman groups dengan browser performa tooling untuk temukan panjang interaction.
Benchmark / realistic range: Compare dengan Google’s saat ini classification dan route group’s own baseline; framework alone melakukan not establish sebuah guaranteed range.
Cadence: Monthly dan setelah menambahkan besar client-side components atau ketiga-party scripts.
Cumulative Layout Shift
Metric: Field CLS untuk SSR dan streaming routes.
What ini tells Anda: Whether hydration, streamed data, images, atau late components move konten setelah initial HTML adalah displayed.
cara pull ini: gunakan CrUX atau Search Console untuk standing KPI dan DevTools untuk diagnosis pada affected templates.
Benchmark / realistic range: gunakan Google’s saat ini field-data classification dan compare baru releases dengan established route baseline.
Cadence: Monthly dan setelah changing streaming boundaries, image dimensions, atau client-hanya components.
alat untuk SolidJS SEO
- View halaman Source (browser) — fastest SSR periksa. jika Anda konten adalah di
raw HTML (not hanya
<div id="root"></div>), SSR adalah berfungsi. - Google Search Console — pemeriksaan URL — sumber kebenaran untuk what Googlebot di-crawl dan rendered; “View Tested Page → HTML” (terjemahan) “View Tested halaman → HTML” menampilkan rendered output.
- Rich hasil Test — validate JSON-LD data terstruktur pada sebuah SolidStart halaman.
- Bing Webmaster alat — pemeriksaan URL — menampilkan Bing’s rendered versi, penting because Bing adalah more conservative tentang JavaScript daripada Google.
- Ahrefs situs Audit (JS rendering enabled) — crawl sebuah SolidJS situs cara sebuah rendering crawler akan, surfacing missing metadata dan uncrawlable tautan.
solid-start-sitemap— bangun-time sitemap XML generation untuk SolidStart.- CrUX / Search Console Core Web Vitals report — confirm INP/LCP/CLS advantage actually lands untuk pengguna nyata, not hanya di lab.
- DevTools Network tab — inspect initial HTML respons body untuk verify SSR konten (vs. konten injected setelah JS runs).
Test yourself: SolidJS SEO
Five quick pertanyaan pada SolidJS, SolidStart, dan getting sebuah Solid situs terindeks. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My writing
- JavaScript SEO Issues & Best Practices — my definitive guide untuk rendering, DOM parity, dapat di-crawl tautan, dan getting JS-dibangun konten terindeks; foundation sebuah SolidJS situs membangun pada.
- Core Web Vitals: sebuah Complete Guide — what INP, LCP, dan CLS mengukur dan how mereka factor ke SEO — metrics SolidJS’s runtime helps dengan.
- Beginner’s Guide untuk SEO teknis — where rendering dan framework choice fit di bigger picture.
My speaking
- SMX Advanced 2018: SEO untuk JavaScript Frameworks (SlideShare) — my walkthrough dari how mesin pencari handle JS frameworks.
- JavaScript SEO — Ungagged 2019 (SlideShare) — rendering modes, two-wave process, dan diagnosis.
dari sekitar industry
- SolidStart — Head dan Metadata — primary-source guide untuk @solidjs/meta dan SSR head tags.
- SolidStart — Route Pre-rendering — configuring SSG di
app.config.ts. - SolidJS — Fine-Grained Reactivity — signals dan no-virtual-DOM updates straight dari docs.
- Google — memahami JavaScript SEO Basics — Google’s own aturan untuk dapat di-crawl tautan, canonicals, dan rendering pipeline.
- solid-start-sitemap plugin — bangun-time sitemap XML generation untuk SolidStart.
- js-framework-benchmark (saat ini hasil) — panjang-running benchmark where SolidJS sits near top dan ahead dari React pada update-heavy berfungsi.
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.