Technologies

React Server Components : ce que ça change pour ton site

Les React Server Components rendent une partie du site côté serveur. Bundle JS plus léger, site plus rapide, code plus simple pour ton équipe.

Illustration éditoriale en coupe : un atelier serveur indigo prépare un colis HTML qu'il envoie via un câble vers un atelier navigateur où un seul bouton corail attend l'utilisateur, métaphore du fonctionnement des React Server Components.

Si tu as un site en React (ou en Next.js) et que ton équipe dev mentionne les "Server Components" sans que tu voies bien ce que ça change pour toi, voilà la version courte : c'est une façon de faire tourner une partie de ton site directement sur le serveur, donc moins de JavaScript envoyé au navigateur de tes visiteurs, donc un site qui charge plus vite. Et derrière ce détail technique, c'est ton SEO, ton taux de conversion et ta facture d'hébergement qui bougent.

Pourquoi on parle de Server Components maintenant ?

Les React Server Components (RSC) sont une nouvelle façon d'écrire des composants React qui rendent leur HTML sur le serveur, sans jamais envoyer leur code JavaScript au navigateur. Depuis Next.js 13 (et c'est devenu le défaut dans le App Router en 16), c'est le mode standard quand tu crées un site avec Next.js. Concrètement, ton équipe dev n'a plus besoin de bricoler pour faire du rendu côté serveur : c'est le réglage par défaut. Et ça change la performance perçue de ton site d'une manière qu'on peut chiffrer.

L'histoire courte, c'est que React, à ses débuts, était pensé "tout-client" : ton navigateur recevait un gros paquet de JavaScript, et c'est lui qui fabriquait la page sous tes yeux. C'était puissant pour les apps interactives, mais lourd pour des sites vitrines ou des sites e-commerce où 90% de la page n'a pas besoin d'être réactive. Les RSC corrigent ce déséquilibre en disant : "ce qui n'a pas besoin d'être interactif, on le rend une fois pour toutes sur le serveur, on envoie du HTML, et basta".

Concrètement, qu'est-ce qui se passe côté serveur, côté navigateur ?

Diorama 3D editorial en deux ateliers indigo et violet tekhelet : a gauche un atelier serveur fabrique un colis HTML qu'il envoie via un convoyeur, a droite un atelier navigateur ouvre le colis et reveille un unique bouton corail 'use client', metaphore visuelle de la separation Server Component / Client Component.

Quand un visiteur ouvre une page Next.js en App Router, le serveur exécute les composants Server, va chercher les données (en base, dans une API), assemble le HTML final, et l'envoie au navigateur. Le navigateur, lui, reçoit une page déjà construite, lisible immédiatement, et ne charge du JavaScript que pour les zones qui en ont besoin (un formulaire, un menu interactif, un panier). C'est l'équivalent d'un postier qui te livre un colis fermé avec ta page dedans, au lieu de t'envoyer une boîte d'outils pour la fabriquer toi-même chez toi.

Pour ton équipe dev, la séparation se fait par une simple ligne. Si un fichier commence par 'use client', c'est un composant qui s'exécute dans le navigateur. Sinon, c'est un Server Component par défaut. Cette inversion (avant on annotait les composants serveur, maintenant on annote ceux du client) est une décision de design qui pousse à mettre l'interactivité là où elle est strictement nécessaire, pas partout. Pour un dirigeant, ça veut dire : ton site arrête de tout charger côté visiteur "au cas où".

Quels bénéfices business pour ton site ?

Balance analogique en resine indigo sur fond noir : a gauche un empilement vacillant de cubes 'JS' fait pencher le plateau vers le bas, a droite un seul cube 'HTML' violet tekhelet repose, leger, en hauteur, illustrant le bundle JavaScript allege et la performance gagnee avec les React Server Components.

Trois effets directs qui se mesurent.

Le site charge plus vite, surtout sur mobile. Moins de JavaScript à télécharger et à exécuter, c'est moins de temps avant que ta page soit utilisable. Sur un site vitrine avec une homepage et 5 pages produits, on parle souvent de 30 à 60% de bundle JS en moins après migration. Le LCP (Largest Contentful Paint, le temps avant que le plus gros élément visible apparaisse) descend, le INP (réactivité aux clics) aussi. Si tu veux creuser ces métriques, j'en parle en détail sur la page réduire le bundle JS et faire charger un site plus vite.

Google indexe ton contenu plus facilement. Quand tout est rendu côté client, Google doit faire tourner ton JavaScript pour comprendre tes pages. Ça marche, mais c'est lent et ça consomme du budget de crawl. Avec des Server Components, le robot reçoit du HTML propre, immédiatement compréhensible. Ton positionnement sur des requêtes longue traîne y gagne, surtout si tu as beaucoup de pages produits ou de pages de contenu.

L'accès aux données est plus simple, donc moins de bugs. Avant, un composant qui voulait afficher les données d'un client devait passer par un useEffect qui appelait une API, attendre la réponse, gérer le chargement, gérer l'erreur. Sur un Server Component, tu écris directement const client = await db.getClient(id). Le code est plus court, plus lisible, et il y a moins d'endroits où ça peut casser. Pour ta facture, ça veut dire moins de temps de dev sur des bugs de synchronisation client-serveur.

Où sont les limites, et quand basculer en composant client ?

Schema editorial 3D : un long tube horizontal glaucious-bleu transporte trois capsules cote a cote sur fond noir, un bloc indigo 'HTML', une capsule translucide 'data' et un petit cube corail lumineux 'use client', metaphore du flux hybride serveur + client d'une page Next.js App Router.

Tout ne peut pas être un Server Component. Si une zone de ta page a besoin de réagir à un clic, de garder un état (une case cochée, un menu ouvert, un compteur), ou d'utiliser des APIs du navigateur (la géolocalisation, le presse-papiers), tu dois la marquer 'use client'. La règle est simple : par défaut tout est serveur, et tu ajoutes la mention 'use client' aussi profond que possible dans l'arbre, sur la plus petite zone qui en a besoin. Pas la page entière, pas le layout entier : juste le bouton, juste le formulaire, juste le menu.

Concrètement, sur un site vitrine ou une plaquette en ligne, 85 à 95% de tes composants resteront serveur. Sur une app SaaS ou un dashboard, le ratio s'inverse, mais l'idée reste : chaque morceau de client est une dette de performance qu'on assume consciemment, plutôt qu'un défaut qu'on subit. C'est ce changement de posture qui rend les sites Next.js récents plus rapides sans qu'on ait à "optimiser" après coup.

Ce que ça change dans ma façon de construire un site

Pour les sites Next.js que je livre, je pars du principe que rien n'est interactif tant que le contraire n'a pas été démontré. Une page produit, une page À propos, un article de blog : 100% serveur, 0 JS envoyé au navigateur en dehors du minimum vital. Quand un bouton "Ajouter au panier" ou un menu déroulant doit exister, je le sors dans un petit composant client, et c'est tout. Le reste de la page reste léger.

Ce modèle hybride rappelle un peu la façon dont on construisait des sites en PHP ou en Rails il y a 15 ans : le serveur fait le gros du travail, le navigateur affiche. Sauf qu'on garde tout ce qui fait la force de React (composants réutilisables, état local quand on en a besoin, animations fluides) sans le coût d'avoir tout chargé chez le visiteur. Voir exemples de sites en Next.js que j'ai livrés pour des cas concrets de mise en pratique.

À lire ensuite

FAQ

Est-ce qu'il faut refaire mon site pour passer aux Server Components ?

Pas forcément. Si ton site est déjà en Next.js sur l'App Router (version 13 ou plus récente), tu en utilises probablement déjà sans le savoir. Si tu es sur l'ancien Pages Router ou sur du React pur côté client, une migration est possible et se justifie au prochain refonte. Compte une refonte complète, pas un patch.

Est-ce que ça marche avec d'autres frameworks que Next.js ?

Pour l'instant, Next.js est le framework de référence qui implémente les RSC en production. D'autres équipes (Remix, Waku) travaillent dessus. Si ton site est en Vite, Astro ou Gatsby, le modèle est différent : ne force pas un choix qui ne colle pas à ton stack.

Mon site va-t-il vraiment être plus rapide en chiffres ?

Sur des migrations que j'ai vues, le bundle JS initial descend souvent de 30 à 60%. Le LCP gagne 500 ms à 1,5 s sur un site de taille moyenne. Ce sont des ordres de grandeur, pas une promesse : le vrai chiffre dépend de la complexité de tes pages et de la qualité de l'implémentation.

Comment savoir si un composant doit être serveur ou client ?

Question simple : est-ce qu'il a besoin d'écouter un clic, de garder un état local, ou d'accéder à une API du navigateur ? Si oui, client. Sinon, serveur. En cas de doute, serveur par défaut. C'est plus facile de "monter" en client après que de redescendre.

Les Server Components changent-ils mon SEO du jour au lendemain ?

Pas du jour au lendemain : Google met quelques semaines à recrawler ton site et à ré-évaluer son ranking. Mais le bénéfice technique (Core Web Vitals, indexation plus rapide, contenu directement visible) est immédiat côté serveur. Le délai, c'est juste le temps que Google mette à jour son index.

Combien ça coûte de migrer un site existant vers ce modèle ?

Ça dépend de l'état du site. Sur un site Next.js récent avec un code propre, on parle d'une à deux semaines. Sur un site avec dette technique ou un framework différent, c'est une refonte. Si tu veux un chiffrage sur ton cas, le mieux est d'en parler ensemble.

Sources