Guide SolidJS SEO
Comment faire SolidJS sites crawlable, indexable, et rapide — pourquoi bare SolidJS est CSR-seulement, comment SolidStart's SSR/SSG corrections il, managing head balises avec @solidjs/meta, et pourquoi SolidJS hydrates (il n’est pas resumable comme Qwik).
SolidJS est a rapide, React-like library avec fine-grained reactivity et aucun virtual DOM — mais on son propre c’est client-side rendu, donc il ships an vide HTML shell avec le même indexation problèmes as bare React. Le corriger est SolidStart, le official meta-framework: SSR or SSG put contenu réel et metadata dans le premier réponse. Manage head balises avec @solidjs/meta (<Title>, <Meta>, <Link>), retourner réel 404s avec <HttpStatusCode>, et récupérer données on le serveur avec createAsync. Un chose pas à mix up: SolidJS hydrates — il n’est pas resumable. Resumability est Qwik's trick. SolidJS's win est a Core Web Vitals edge on top de standard SSR.
Preuve à l’appui de cette affirmation The article's described solidjs-seo capabilities must be evaluated against the platform's current documentation rather than assumed to be search-engine behavior. Portée : Platform-specific capability documentation. Niveau de confiance : élevé · Vérifié : SolidStart documentation Preuve à l’appui de cette affirmation Regardless of platform, Google needs crawlable URLs, accessible rendered content, descriptive metadata, and valid search directives. Portée : Google requirements independent of platform. Niveau de confiance : élevé · Vérifié : Google Search Central: SEO Starter GuideTL;DR — SolidJS est a rapide, React-like library, mais on son propre il construit le page dans votre navigateur — donc moteur de recherches premier voir an vide shell. Le corriger est SolidStart, son official complet-stack outil, qui sends finished HTML à les deux utilisateurs et robots d’exploration. Rendu mode est a per-route paramètre, pas a entier-site switch — utiliser serveur rendu (SSR or SSG) on le routes que besoin à classer, définir votre titre et meta balises avec @solidjs/meta, et vérifier chaque route’s réel HTML sortie plutôt que assuming le entier site est covered.
Ce que SolidJS is
SolidJS est a JavaScript library pour building utilisateur interfaces. Si vous avez vu React, il’ll regarder familiar — il utilise le même JSX syntax et a similaire component style. Le big difference sous le hood est que SolidJS a aucun virtual DOM: il mises à jour le exact pieces de lune page que modifier, qui rend il very rapide.
«The catch for SEO: by default, SolidJS is client-side rendered (CSR). The server sends an almost-empty HTML file, then your browser downloads the JavaScript and builds the page. That’s a problem because the first thing a search engine sees is the empty version — no text, no title, no meta description. » (Traduction) (Résumé en français de la section sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Pourquoi CSR is an SEO problem
Quand Google explore a CSR page, il voit le vide shell premier. Il peut come back plus tard, exécuter le JavaScript, et lire le contenu réel — mais que deuxième réussir peut prendre anywhere depuis hours à weeks. Pire, Bing et social-media robots d’exploration (Facebook, LinkedIn, X) souvent ne pas exécuter JavaScript à tout, donc ils peut jamais voir votre contenu or votre share previews.
«This is the same issue bare React, Vue, and Angular have. It’s not unique to SolidJS — it’s a property of client-side rendering. (See JavaScript SEO for the full picture.) » (Traduction) (Résumé en français de la section dix, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## The fix: SolidStart » (Traduction) (Résumé en français de la section onze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«SolidStart is the official meta-framework for SolidJS — think of it as SolidJS’s version of Next.js (for React) or Nuxt (for Vue). It lets the server send finished HTML, so search engines and social crawlers get your content on the very first request. Two main modes: » (Traduction) (Résumé en français de la section douze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
- SSR (rendu côté serveur) — lune page est construit on le serveur chaque temps c’est requested. Bon pour contenu que changements souvent.
- SSG (static site generation) — pages sont construit une fois à deploy temps et servi as plain fichiers. Fastest option; ideal pour blogs, docs, et marketing pages.
Setting votre title and meta tags
À contrôler votre <title>, meta description, et social share balises, utiliser le
@solidjs/meta package. Il donne vous <Title>, <Meta>, et <Link>
components vous drop dans votre pages — SolidJS’s equivalent de React Helmet. Avec
SolidStart’s SSR turned on, ceux balises montrer up dans le HTML que robots d’exploration lire.
The un chose pas to mix up
Vous peut hear SolidJS lumped dans avec Qwik as “the resumable frameworks.” c’est incorrect. Resumability est Qwik’s idea. SolidJS utilise ordinary hydration — il simplement fait il plus cheaply que React. Pour le SEO que distinction barely matters (les deux put contenu dans le HTML), mais c’est a courant mistake.
Vouloir le réel mechanics — SSR vs. SSG vs. streaming, le @solidjs/meta API, réel 404s, serveur-side données fetching, et le Core Web Vitals story? Switch à le Avancé tab.
«> TL;DR — SolidJS is fine-grained reactive (signals, no virtual DOM) and
Preuve à l’appui de cette affirmation The article's described solidjs-seo capabilities must be evaluated against the platform's current documentation rather than assumed to be search-engine behavior. Portée : Platform-specific capability documentation. Niveau de confiance : élevé · Vérifié : SolidStart documentation Preuve à l’appui de cette affirmation Regardless of platform, Google needs crawlable URLs, accessible rendered content, descriptive metadata, and valid search directives. Portée : Google requirements independent of platform. Niveau de confiance : élevé · Vérifié : Google Search Central: SEO Starter Guideships as a CSR library by default — an empty shell with the same Wave-1 indexing problem as bare React. SolidStart is the fix: SSR, SSG (route prerendering), and streaming SSR put content and metadata in the first response. Manage head tags with @solidjs/meta (
<Title>,<Meta>,<Link>under a<MetaProvider>), return real status codes with<HttpStatusCode>, and load data on the server withcreateAsyncso it lands in the SSR HTML. The accuracy spine: SolidJS hydrates — it is NOT resumable (that’s Qwik). Its fine-grained reactivity is a client update optimization, not a server-to-client startup one — so the SEO upside is mostly a Core Web Vitals (INP/TBT) edge layered on top of normal SSR. » (Traduction) (Résumé en français de la section vingt et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
SolidJS architecture: what’s en réalité différent
SolidJS utilise JSX que semble identical à React’s, plus hooks-like primitives
(createSignal, createEffect, createMemo). Mais le execution model est
fundamentally différent:
- React re-exécute le entier component function quand state changements et diffs a virtual DOM à decide ce que à mettre à jour.
- SolidJS compiles JSX à réel DOM operations à construire temps. Components exécuter une fois; reactive signaux wire valeurs directement à le spécifique DOM nodes que depend on les. Quand a signal changements, Solid mises à jour seulement que node — aucun reconciliation, aucun virtual DOM overhead.
Ce est pourquoi SolidJS consistently sits near le top de le js-framework-benchmark suite, et pourquoi son runtime est dramatically leaner que React’s re-rendre model. Le library itself est roughly 7KB gzipped. Plus petit, surgical mises à jour plus a tiny runtime est le performances story — mais none de que changements le rendu mode, qui est ce que decides votre SEO fate.
CSR by par défaut: the SEO problem
Construire avec SolidJS alone (aucun SolidStart) et vous obtenir a client-side-rendu app:
«1. The server sends index.html with a near-empty body — typically a
<div id="root"></div> and a script tag.
2. The browser downloads the JS bundle, runs Solid’s reactive code, and
populates the DOM.
3. Googlebot’s first wave sees the empty shell — no content, no metadata.
4. Googlebot’s second wave (the rendering queue) eventually runs the JS and
sees content — but the timing is unpredictable, from hours to weeks.
5. Bing, social crawlers, and non-JS bots may never see the content at all.
» (Traduction) (Résumé en français de la section vingt-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«This is the two-wave rendering process, and it’s the same trap any CSR SPA falls into. The practical impacts: slow initial indexing of new content; titles and meta descriptions missing from the raw HTML (so wrong/blank snippets in SERPs); and soft 404s, because a CSR app can’t return a true HTTP 404 — the server always answers 200 with the app shell. » (Traduction) (Résumé en français de la section trente, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## SolidStart: the fix » (Traduction) (Résumé en français de la section trente et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«SolidStart (1.0, stable) is the official SolidJS meta-framework, built on Vinxi (Vite + Nitro). It provides: » (Traduction) (Résumé en français de la section trente-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
- Isomorphic, fichier-based routing — fichiers sous
src/routes/map à URLs (src/routes/blog/[slug].tsx→/blog/:slug). Un correction worth étant precise à propos de: SolidStart itself ne fait pas ship a router or metadata library bundled dans — per son propre docs, “SolidStart itself ne fait pas ship avec a Router or Metadata library. Plutôt, il laisse que ouvrir pour vous à utiliser quelconque library vous vouloir.” Le routing et@solidjs/metabehavior décrit ici come depuis ajout@solidjs/routeret@solidjs/metaexplicitly (le official templates ajouter les deux pour vous, qui est pourquoi il peut feel automatic — vérifier votrepackage.jsonplutôt que assuming ils came gratuit avec le framework). - Plusieurs rendu modes, choisi per route: CSR, SSR (synchronous, asynchronous, or streaming), et SSG / route prerendering. A SolidStart project n’est pas “SSR” or “CSR” as a entier — chaque route picks son propre mode, donc vérifier le rendu config (et le résultating HTML) pour le spécifique route vous care à propos de plutôt que assuming le entier site inherited un paramètre.
- Serveur functions — a
"use server"directive pour RPC-style serveur code (données fetching, database accès). - Adapters pour Cloudflare, Vercel, Netlify, Deno, Node, et static hosting.
Version remarque: ce reflects SolidStart 1,0’s actuel documentation, qui étiquettes itself beta et était dernier mis à jour 2026-04-28 — confirmer details contre le docs pour le version vous êtes en réalité running avant treating quelconque de ce as permanent API surface.
SSR vs. SSG vs. streaming — the SEO lire
- SSR (synchronous, asynchronous, or streaming — SolidStart noms ces as distinct sub-modes) delivers complet contenu on le premier requête et est entièrement indexable on Wave 1. Meilleur pour frequently modification pages.
- SSG (route prerendering) construit HTML à deploy temps — le fastest TTFB et
LCP, CDN-cacheable, aucun per-requête serveur fonctionner. Meilleur pour blogs, docs, et
marketing pages. Configurer prerendered routes dans
app.config.ts:
// app.config.ts
import { defineConfig } from "@solidjs/start/config";
export default defineConfig({
server: {
prerender: {
routes: ["/", "/about", "/blog"],
},
},
});- Streaming SSR sends HTML progressively à améliorer TTFB on données-heavy pages; Google renders le complet streamed sortie.
- CSR est fine pour authenticated dashboards et outils que ne pas besoin à classer — pas pour public contenu.
Managing head balises avec @solidjs/meta
Le @solidjs/meta package est le SolidJS equivalent de React Helmet or
Suivant.js’s <Head>. c’est SSR-ready et asynchronous. Wrap votre app dans
<MetaProvider> donc balises sont collected during SSR, alors définir per-page balises à l’intérieur
votre 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>
</>
);
}Le components disponible sont <Title>, <Meta>, <Link>, <Style>,
<Base>, et le <MetaProvider> wrapper. Deduplication est construit dans:
<Meta> balises avec matching name attributs override parent definitions — le
deepest (la plupart spécifique) un wins, et ce fonctionne correctement during SSR. Donc a root
par défaut titre et per-page overrides behave as vous’d expect.
Un warning straight depuis le docs: ne pas ajouter raw <title> balises dans votre
serveur fichiers — ils override @solidjs/meta’s functionality. Toujours utiliser le
<Title> component, jamais a hand-written HTML titre dans votre serveur template.
Données structurées (JSON-LD)
Google prend en charge JSON-LD si c’est dans le raw HTML or injected par JavaScript, mais SSR-rendu JSON-LD est le fiable choice. Dans SolidStart, rendre il dans le 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>
</>
);
}«With SSR enabled, the JSON-LD appears in the server-rendered HTML — the preferred approach for reliability across every crawler. Validate with the Rich Results Test or URL Inspection Tool. » (Traduction) (Résumé en français de la section quarante-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Hydration, not resumability — the accuracy spine » (Traduction) (Résumé en français de la section quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Hydration is the process where, after SSR delivers rendered HTML, the
framework attaches to the existing DOM to make it interactive: download the JS
bundle, execute the framework code, reconcile state with the existing nodes,
attach event listeners. SolidJS uses hydration — the same fundamental mechanism
as React’s hydrate, Vue’s createSSRApp, or Angular SSR.
» (Traduction) (Résumé en français de la section quarante-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Resumability (Qwik’s architecture) is different: the server serializes the framework’s execution state into the HTML, and the client resumes from there without re-executing components — interactive before any JS runs. » (Traduction) (Résumé en français de la section cinquante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Le myth à debunk: SolidJS’s fine-grained reactivity est parfois confused avec resumability parce que les deux éviter “re-running” components dans le traditional sense. Ils ne sont pas le même chose. Fine-grained reactivity est a client-side mettre à jour optimization; resumability est a serveur-à-client startup mechanism. SolidJS encore downloads et exécute son runtime avant lune page est interactive.
Le SEO implication: les deux SSR+hydration (SolidJS) et resumability (Qwik) put rendu HTML dans le serveur réponse, donc les deux sont bon pour indexation. Le difference est Temps d’interactivité et INP on lent devices, où Qwik’s near-zero startup JS a le edge. Pour explorer et indexer, SolidStart SSR est déjà suffisant.
Core Web Vitals
SolidJS’s runtime advantages peut translate dans meilleur Core Web Vitals scores on routes que utiliser SSR — mais ce n’est pas automatic or universal. Aucun principal source establishes guaranteed cheap hydration or meilleur résultats pour chaque Solid/SolidStart route: bundle size, données fetching, tiers scripts, device, et le route’s réel rendu mode tout determine le réel coût. Treat le suivant as le mechanism par qui SolidJS peut aider, et mesurer votre propre routes à confirmer il fait:
- LCP improves parce que the largest content element is in le serveur-rendered HTML — aucun waiting on JS.
- INP improves parce que Solid’s fine-grained runtime handles interactions efficiently (aucun virtual DOM diffing).
- CLS drops parce que SSR’d content doesn’t shift as late-loading JS fills in.
A caution worth keeping honest: figures comme “SolidJS est ~70% faster que React’s virtual DOM” come depuis synthetic benchmarks (js-framework-benchmark), pas real-world champ données. Réel CWV dépend far plus on implementation qualité, données fetching, et hosting que on framework choice. Treat le benchmark numbers as directional, et mesurer votre propre champ données dans CrUX / Search Console.
Routing, données fetching, and réel 404s
«Routing. SolidStart uses the History API by default — never use
hash-based (#/page) routing, which prevents reliable URL discovery. Keep
trailing-slash behavior consistent and enforce it with server redirects, not
just canonicals.
» (Traduction) (Résumé en français de la section cinquante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Données fetching pour le SEO. Contenu que nécessite à classer doit être chargé on le
serveur donc c’est dans le SSR HTML. Utiliser createAsync et serveur functions — pas
onMount or client-side effects, qui exécuter après le HTML est sent:
// 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>;
}Réel 404s. A catch-tous route plus <HttpStatusCode> depuis @solidjs/start
sets le réel HTTP réponse code on le serveur — a vrai 404 au lieu de a 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, et international SEO
- robots.txt — ajouter
public/robots.txtà le project root et point il à votre sitemap. ne pas bloquer le/api/routes utilisé pour XHR données fetching. - Sitemap — le tiers
solid-start-sitemapplugin (par madaxen86) generatessitemap.xmlà construire temps et prend en charge dynamic routes via parameter mapping or a runtime API route. - International SEO — emit hreflang avec
<Link rel="alternate" hreflang="…">depuis @solidjs/meta, et utiliser a subdirectory structure (/en/,/fr/) over subdomains or requête parameters.
Courant SolidJS SEO pitfalls
- Running SolidJS CSR sans SolidStart SSR/SSG.
- Fetching rankable contenu dans
onMount/ client-side effects. - Forgetting le
<MetaProvider>wrapper (balises ne va pas rendre dans SSR). - Ajout raw
<title>HTML balises dans serveur templates (overrides @solidjs/meta). - En utilisant hash-based routing.
- Diffusion soft 404s sans
<HttpStatusCode>. - Blocking API routes dans robots.txt.
- Pas fingerprinting JS assets (Google caches scripts aggressively).
- Contenu behind a click/accordion/tab que jamais auto-charge dans le DOM.
- Assuming SSR fonctionne sans verifying via View Source / Inspection d’URL.
- Assuming
@solidjs/routeret@solidjs/metacome bundled avec SolidStart — ils ne pas; SolidStart’s propre docs dire il “ne fait pas ship avec a Router or Metadata library.” Official templates ajouter les deux pour vous, mais a depuis-scratch or customized setup nécessite les installed explicitly. - Treating a project as uniformly “SSR” or “CSR” — rendu mode est définir per route dans SolidStart, donc a route vous assume est serveur-rendu peut pas être.
Où ce sits
SolidJS lives dans le JavaScript frameworks subcluster alongside Qwik, sous le broader JavaScript SEO cluster. Pour le closest parallel, voir React SEO — SolidJS shares React’s JSX et CSR-par-default problème, mais corrections il avec SolidStart au lieu de Suivant.js, et exécute faster thanks à aucun virtual DOM. Pour comment Google voit rendu contenu, voir rendu et exploration.
AI summary
A condensed prendre on the Avancé version:
«- SolidJS = fine-grained reactivity, no virtual DOM. Components run once;
signals update only the exact DOM nodes that change. Tiny runtime (~7KB),
consistently near the top of js-framework-benchmark, faster than React’s
re-render model.
» (Traduction) (Résumé en français de la section soixante-treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Bare SolidJS is CSR by default — an empty HTML shell. Same Wave-1 indexing
problem as bare React/Vue/Angular: Googlebot’s first wave sees no content,
rendering is queued (hours to weeks), and Bing/social crawlers may never see
it. Soft-404 risk too (CSR can’t return a real 404).
» (Traduction) (Résumé en français de la section soixante-treize, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- SolidStart is the fix, per route — the official meta-framework offers CSR,
SSR (sync, async, or streaming), and SSG per route; it doesn’t default the
whole project to SSR. SSR/SSG routes put content + metadata in the first
response, fully indexable on Wave 1 — verify the specific route rather than
assuming site-wide coverage.
» (Traduction) (Résumé en français de la section soixante-treize, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Router and metadata aren’t auto-bundled. SolidStart’s own docs say it
ships without a router or metadata library — @solidjs/router and
@solidjs/meta are explicit additions the official templates happen to
include.
» (Traduction) (Résumé en français de la section soixante-treize, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Head tags via @solidjs/meta: <Title>, <Meta>, <Link> under
<MetaProvider>; deduplication works in SSR; never use raw <title> in server
files.
» (Traduction) (Résumé en français de la section soixante-treize, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Real 404s with <HttpStatusCode>; server-side data with createAsync
(not onMount); History API routing (no hash routes); JSON-LD rendered in
the route component.
» (Traduction) (Résumé en français de la section soixante-treize, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Accuracy spine: SolidJS hydrates — it is NOT resumable. Resumability is
Qwik’s. Fine-grained reactivity is a client-update optimization, not a startup
one. Both SSR+hydration and resumability are good for indexing; Qwik only wins
on Time to Interactive.
» (Traduction) (Résumé en français de la section soixante-treize, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.)
«- CWV upside is possible, not guaranteed (on SSR’d routes): better LCP, INP,
and CLS are plausible outcomes — but benchmark gaps are synthetic, and real
field data depends on implementation, data, and hosting, not framework choice
alone.
» (Traduction) (Résumé en français de la section soixante-treize, sous-partie huit : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Official documentation » (Traduction) (Résumé en français de la section soixante-seize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Primary-source documentation from Google and the SolidJS team. » (Traduction) (Résumé en français de la section soixante-dix-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google — JavaScript SEO » (Traduction) (Résumé en français de la section soixante-dix-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Understand JavaScript SEO Basics — the crawl → render → index pipeline and the two-wave process. » (Traduction) (Résumé en français de la section soixante-dix-huit, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Dynamic Rendering as a Workaround — why Google deprecated dynamic rendering in favor of SSR, static rendering, and hydration. » (Traduction) (Résumé en français de la section soixante-dix-huit, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- SEO Guide for Web Developers — the developer-facing fundamentals. » (Traduction) (Résumé en français de la section soixante-dix-huit, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«SolidJS / SolidStart » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- SolidJS documentation — the official docs home. » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Fine-Grained Reactivity — the signals model and how updates target individual DOM nodes. » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- SolidStart — the meta-framework: SSR, streaming, routing, server functions. » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- SolidStart — Head and Metadata — managing title/meta/link tags for SEO. » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.) «- SolidStart — Route Pre-rendering — configuring SSG. » (Traduction) (Résumé en français de la section soixante-dix-neuf, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«@solidjs/meta » (Traduction) (Résumé en français de la section quatre-vingts, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- solid-meta GitHub repository — source and API reference. » (Traduction) (Résumé en français de la section quatre-vingts, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- @solidjs/meta on npm — the package. » (Traduction) (Résumé en français de la section quatre-vingts, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- Title component docs and Meta component docs. » (Traduction) (Résumé en français de la section quatre-vingts, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Quotes from the source » (Traduction) (Résumé en français de la section quatre-vingt-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
On-le-record statements depuis Google on JavaScript SEO, plus le SolidJS team’s propre framing.
Google — comment JavaScript apps sont processed
«- “Google processes JavaScript web apps in three main phases: 1. Crawling 2. Rendering 3. Indexing.”
— Google Search Central.
Understand JavaScript SEO Basics
» (Traduction) (Résumé en français de la section quatre-vingt-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “It’s fine to use JavaScript to inject links into the DOM, as long as such links follow the best practices for crawlable links.”
— Google Search Central (use <a href>, not onclick or javascript:void(0)).
Understand JavaScript SEO Basics
» (Traduction) (Résumé en français de la section quatre-vingt-six, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “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.”
— Google Search Central.
Understand JavaScript SEO Basics
» (Traduction) (Résumé en français de la section quatre-vingt-six, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- “Use the History API to implement routing between different views of your web app.”
— Google Search Central (i.e. no fragment/hash routing).
Understand JavaScript SEO Basics
» (Traduction) (Résumé en français de la section quatre-vingt-six, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«SolidJS team — fine-grained reactivity (paraphrased framing) » (Traduction) (Résumé en français de la section quatre-vingt-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
- SolidStart’s head-et-metadata docs warn: “Être sure à avoid adding tout normal
<title />balises dans tout serveur fichiers, as ils devrait override le functionality de @solidjs/meta.” SolidStart — Head et Metadata
SolidJS SEO checklist
A réussir to confirmer a SolidJS site is crawlable, indexable, and fast:
- vous êtes en utilisant SolidStart avec SSR or SSG — pas bare SolidJS dans CSR mode.
- View Source montre contenu réel et
<a href>liens dans le raw HTML — pas simplement<div id="root"></div>. - App est wrapped dans
<MetaProvider>donc head balises rendre during SSR. -
<Title>et<Meta name="description">définir per route via @solidjs/meta. - Aucun raw
<title>balises dans serveur fichiers (ils override @solidjs/meta). - Ouvrir Graph + Twitter balises présent via
<Meta property="og:…">donc social previews fonctionner. - Canonical définir avec
<Link rel="canonical">(pas modifié via JS après charger). - Routing utilise le History API — aucun hash (
#/page) routes. - Rankable contenu chargé avec
createAsync/serveur functions, pasonMount. - Manquant pages retourner a réel 404 via
<HttpStatusCode code={404} />. -
public/robots.txtexists, points à le sitemap, et ne fait pas bloquer/api/données routes. - XML sitemap generated (e.g.
solid-start-sitemap) avec URL canoniques. - JSON-LD rendu dans le route component et présent dans le SSR HTML.
- Inspection d’URL (Search Console) confirms le rendu HTML matches.
- Champ Core Web Vitals vérifié dans CrUX / Search Console, pas simplement lab.
The mental models
1. Library vs. meta-framework. SolidJS (le library) decides comment le UI mises à jour; SolidStart (le meta-framework) decides où il renders. SEO est governed par le deuxième un. Bare SolidJS = CSR = vide shell. SolidStart SSR/SSG = contenu dans le HTML. Toujours locate qui un vous êtes en réalité shipping.
2. Le rendu-mode ladder. Pour quelconque route, pick le highest rung le contenu permet: SSG (static, fastest, meilleur pour stable contenu) → SSR (dynamic, per-requête) → streaming SSR (données-heavy) → CSR (seulement pour non-classement, authenticated views). Plus élevé rungs sont meilleur pour les deux robots d’exploration et Core Web Vitals.
3. Deux waves, un goal. Google explore dans Wave 1 (raw HTML) et renders dans Wave 2 (queued). Le entier point de SolidStart SSR est à faire votre contenu complet dans Wave 1 donc vous jamais depend on le unpredictable Wave 2 queue.
4. Hydration ≠ resumability. SolidJS hydrates (download → execute → attach). Qwik resumes (aucun re-execution). Fine-grained reactivity speeds le mises à jour après hydration; il ne fait pas supprimer hydration. Garder ce straight et vous’ll jamais miscategorize SolidJS.
5. Serveur-charger pour n’importe quoi que doit classer.
Si contenu est récupéré dans onMount, il lands après le HTML est sent — invisible
à Wave 1. Récupérer il avec createAsync/serveur functions donc c’est baked dans le
SSR réponse.
SolidJS SEO — cheat sheet
SolidJS vs. SolidStart
| SolidJS (library) | SolidStart (meta-framework) | |
|---|---|---|
| Par défaut rendu | CSR (vide shell) | SSR (contenu dans HTML) |
| Rendu modes | CSR seulement | SSR, SSG, streaming, CSR |
| Meta balises dans raw HTML | Aucun (définir client-side) | Oui (@solidjs/meta + SSR) |
| Réel HTTP 404 | Aucun (soft 404) | Oui (<HttpStatusCode>) |
| Sitemap generation | Manual | solid-start-sitemap plugin |
| SEO verdict (per route) | Risky unless vous construire dans SSR/SSG yourself | Peut être SEO-viable — vérifier chaque route’s réel rendu mode et sortie; SolidStart ne fait pas guarantee il site-wide |
@solidjs/meta components
| Component | Sets |
|---|---|
<MetaProvider> | Wrapper que collects tags during SSR (requis) |
<Title> | <title> |
<Meta> | description, robots, OG, Twitter cards |
<Link> | canonical, hreflang, preload, stylesheets |
<Style> / <Base> | inline <style> / <base> |
Do / don’t
- ✅ Utiliser
<Title>from @solidjs/meta. ❌ Raw<title>in server fichiers. - ✅ History API routing. ❌ Hash (
#/page) routing. - ✅
createAsync/ server functions pour rankable données. ❌onMountrécupérer. - ✅
<HttpStatusCode code={404} />. ❌ Soft 404 (200 + shell).
Myth-busting
- ❌ “SolidJS is resumable like Qwik.” → Il hydrates (cheaply); seulement Qwik resumes.
- ❌ “SolidJS est mauvais pour SEO.” → Bare CSR est; SolidStart SSR/SSG est entièrement indexable.
- ❌ “Google ne peut pas lire SolidJS.” → Il peut (modern Chromium); le risque est Wave-2 delay, supprimé par SSR.
SolidJS SEO mistakes to éviter
Shipping public contenu avec bare SolidJS CSR
Pourquoi it’s incorrect: The premier réponse is an app shell, so robots d’exploration ne faites pas recevoir lune page’s content or metadata immédiatement. Do ce à la place: utiliser SolidStart SSR or route prerendering pour every public route que nécessite to rank.
Fetching rankable données in onMount
Pourquoi it’s incorrect: onMount runs après le serveur réponse, leaving le contenu out
of raw HTML. Do ce à la place: récupérer with createAsync, route loaders, or server
functions so the données is présent during SSR.
Forgetting MetaProvider or ajout a raw title
Pourquoi c’est incorrect: Sans MetaProvider, @solidjs/meta ne peut pas collect balises pour SSR;
a raw <title> dans a serveur fichier peut override son sortie. Faire ce à la place: wrap
le app dans MetaProvider et utiliser <Title>, <Meta>, et <Link> consistently.
En utilisant hash routes or soft 404s
Pourquoi c’est incorrect: #/page routes sont poor discovery targets, et a manquant page
que renvoie HTTP 200 semble comme a soft 404. Faire ce à la place: utiliser History API
routes et définir a réel status avec <HttpStatusCode code={404} />.
Appel fine-grained reactivity resumability
Pourquoi c’est incorrect: SolidJS encore hydrates; il ne fait pas resume serveur execution state le façon Qwik fait. Faire ce à la place: décrire Solid’s advantage as efficient client mises à jour, alors vérifier le réel serveur rendu et champ performances.
Trusting SSR sans checking la réponse
Pourquoi c’est incorrect: A route peut utiliser SolidStart et encore laisser copy, metadata, or JSON-LD dans client-seulement code. Faire ce à la place: inspect View Source et le initial network réponse après chaque rendu or données-loading modifier.
«## Audit a SolidStart response from the command line » (Traduction) (Résumé en français de la section cent trente et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«macOS / Linux — inspect status, metadata, and body content » (Traduction) (Résumé en français de la section cent trente-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
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.html«The first response should be a real success status for a live route, and the raw HTML should contain the route’s title, description, canonical, H1, and any JSON-LD without running JavaScript. » (Traduction) (Résumé en français de la section cent trente-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Windows PowerShell — run the same raw-HTML check » (Traduction) (Résumé en français de la section cent trente-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
$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'Vérifier a manquant route renvoie a vrai 404
curl -sS -o /dev/null -w '%{http_code}\n' \
'https://example.com/this-route-should-not-exist'
# Expected: 404DevTools Console — liste the 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()),
})Exécuter le extrait dans le navigateur Console, mais comparer il avec le command-line résultat. Si a signal exists seulement dans le rendu DOM, il est encore étant ajouté après le initial HTML réponse.
Mesurer SolidStart SEO performances in the field
Plus grand affichage de contenu by route type
Metric: Field LCP pour public content, marketing, and autre representative route groupes.
Ce que il indique vous: Si le largest visible contenu arrives promptly pour réel utilisateurs; SSR aide seulement si données, images, et hosting complet le chemin.
Comment pull il: Utiliser CrUX or le Search Console Core Web Vitals rapport, segmented par similaire URL groupes où possible.
Benchmark / realistic range: Utiliser Google’s actuel champ-données classification et le site’s propre pre-release baseline; ne faites pas substitute a synthetic framework benchmark pour utilisateur données.
Cadence: Monthly and après a material rendering, hosting, or image-delivery modifier has accumulated field données.
Interaction jusqu’au prochain affichage
Metric: Champ INP on interactive SolidJS routes.
«What it tells you: Whether fine-grained updates translate into responsive real interactions rather than just favorable library benchmarks. » (Traduction) (Résumé en français de la section cent cinquante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«How to pull it: Use CrUX or Search Console, then reproduce poor page groups with browser performance tooling to find the long interaction. » (Traduction) (Résumé en français de la section cent cinquante-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Benchmark / realistic range: Compare with Google’s current classification and the route group’s own baseline; the framework alone does not establish a guaranteed range. » (Traduction) (Résumé en français de la section cent cinquante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Cadence: Monthly and after adding large client-side components or third-party scripts. » (Traduction) (Résumé en français de la section cent cinquante-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«### Cumulative Layout Shift » (Traduction) (Résumé en français de la section cent cinquante-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Metric: Field CLS pour SSR and streaming routes.
Ce que it indique vous: Si hydration, streamed données, images, or late components déplacer content après the initial HTML is affiché.
«How to pull it: Use CrUX or Search Console for the standing KPI and DevTools for diagnosis on affected templates. » (Traduction) (Résumé en français de la section cent soixante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Benchmark / realistic range: Use Google’s current field-data classification and compare new releases with the established route baseline. » (Traduction) (Résumé en français de la section cent soixante et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Cadence: Monthly and after changing streaming boundaries, image dimensions, or client-only components. » (Traduction) (Résumé en français de la section cent soixante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Outils pour SolidJS SEO
- View Page Source (navigateur) — le fastest SSR vérifier. Si votre contenu est dans
le raw HTML (pas simplement
<div id="root"></div>), SSR est fonctionnement. - Recherche Google Console — Inspection d’URL — le source de truth pour ce que Googlebot exploré et rendu; “View Tested Page → HTML” montre le rendu sortie.
- Résultats enrichis Tester — valider JSON-LD données structurées on a SolidStart page.
- Bing Webmaster Outils — Inspection d’URL — montre Bing’s rendu version, important parce que Bing est plus conservative à propos de JavaScript que Google.
- Ahrefs Site Audit (JS rendu enabled) — explorer a SolidJS site le façon a rendu robot d’exploration voudrait, surfacing manquant metadata et uncrawlable liens.
solid-start-sitemap— construire-time XML sitemap generation pour SolidStart.- CrUX / Search Console Core Web Vitals rapport — confirmer le INP/LCP/CLS advantage en réalité lands pour réel utilisateurs, pas simplement dans le lab.
- DevTools Network tab — inspect le initial HTML corps de la réponse à vérifier SSR contenu (vs. contenu injected après JS exécute).
Testez vos connaissances: SolidJS SEO
Five rapide questions on SolidJS, SolidStart, and getting a Solid site indexé. Pick an réponse pour chaque, alors vérifier.
Ressources utiles
Mon writing
- JavaScript SEO Problèmes & Meilleur Practices — mon definitive guide à rendu, DOM parity, crawlable liens, et getting JS-built contenu indexé; le foundation a SolidJS site construit on.
- Core Web Vitals: A Complet Guide — ce que INP, LCP, et CLS mesurer et comment ils factor dans SEO — le metrics SolidJS’s runtime aide avec.
- Le Beginner’s Guide à SEO technique — où rendu et framework choice fit dans le bigger picture.
Mon speaking
- SMX Avancé 2018: SEO pour JavaScript Frameworks (SlideShare) — mon walkthrough de comment moteur de recherches handle JS frameworks.
- JavaScript SEO — Ungagged 2019 (SlideShare) — rendu modes, le deux-wave traiter, et diagnosis.
Depuis autour le industry
- SolidStart — Head et Metadata — le primary-source guide à @solidjs/meta et SSR head balises.
- SolidStart — Route Pre-rendu — configuring SSG dans
app.config.ts. - SolidJS — Fine-Grained Reactivity — signaux et aucun-virtual-DOM mises à jour straight depuis le docs.
- Google — Comprendre JavaScript SEO Basics — Google’s propre règles pour crawlable liens, canonicals, et le rendu pipeline.
- solid-commencer-sitemap plugin — construire-time XML sitemap generation pour SolidStart.
- js-framework-benchmark (actuel résultats) — le long-running benchmark où SolidJS sits near le top et ahead de React on mettre à jour-heavy fonctionner.
Journal des modifications
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.