Image illustrant l'article react en ssr

React en SSR : 7 étapes pour créer un serveur Node.js et rendre votre HTML efficacement

Le Server-Side Rendering (SSR) avec React est devenu incontournable pour améliorer le SEO, la vitesse de chargement et l’expérience utilisateur d’une application web. Contrairement au rendu côté client (CSR), où le navigateur doit télécharger et exécuter le JavaScript avant d’afficher le contenu, le SSR génère le HTML complet côté serveur avant de l’envoyer au navigateur. Résultat : vos pages sont indexées plus rapidement par Google et vos utilisateurs bénéficient d’un premier affichage immédiat.

Dans ce guide complet, vous allez apprendre pas à pas comment créer un serveur Node.js capable de rendre une application React en SSR.


🚀 Pourquoi utiliser React en SSR avec Node.js ?

Avant d’entrer dans le code, voyons les principaux avantages du SSR :

  1. Optimisation SEO
    Les robots d’indexation de Google et Bing reçoivent directement du contenu HTML complet, ce qui améliore l’indexation et le classement.
  2. Performance et temps de chargement
    L’utilisateur voit une page affichée presque immédiatement, même avant le téléchargement et l’exécution du JavaScript.
  3. Meilleure expérience utilisateur
    Le « First Paint » (premier rendu visuel) est accéléré, ce qui réduit le taux de rebond.
  4. Compatibilité accrue
    Les appareils ou navigateurs anciens, qui gèrent mal le JavaScript, accèdent quand même à un contenu rendu côté serveur.

📦 Prérequis

Avant de commencer, assurez-vous d’avoir installé :

  • Node.js (version 16 ou plus recommandée)
  • npm ou yarn comme gestionnaire de paquets
  • Des connaissances de base en React et Express.js

🛠 Étape 1 : Initialiser le projet

Créez un dossier pour votre projet et initialisez un environnement Node.js :

mkdir react-ssr-server
cd react-ssr-server
npm init -y

Ensuite, installez les dépendances nécessaires :

npm install react react-dom express
npm install @babel/core @babel/preset-env @babel/preset-react babel-loader --save-dev

🔑 Astuce SEO technique : utilisez des noms de projet et des structures claires pour améliorer la maintenabilité, ce qui influence indirectement la performance et donc le classement.


🏗 Étape 2 : Créer une application React simple

Dans src/App.js :

import React from "react";

export default function App() {
  return (
    <div>
      <h1>Bienvenue sur mon site en SSR 🚀</h1>
      <p>Ce contenu est rendu côté serveur grâce à Node.js et React.</p>
    </div>
  );
}

🌐 Étape 3 : Mettre en place un serveur Node.js avec Express

Créez un fichier server.js à la racine du projet :

import express from "express";
import React from "react";
import ReactDOMServer from "react-dom/server";
import App from "./src/App.js";

const app = express();
const PORT = 3000;

// Middleware pour servir les fichiers statiques
app.use(express.static("public"));

// Route principale
app.get("*", (req, res) => {
  const appHTML = ReactDOMServer.renderToString(<App />);
  
  const html = `
    <!DOCTYPE html>
    <html lang="fr">
    <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>React SSR avec Node.js</title>
      <meta name="description" content="Apprenez à créer un serveur Node.js pour rendre une application React en mode SSR afin d’améliorer le SEO et la performance." />
    </head>
    <body>
      <div id="root">${appHTML}</div>
      <script src="/client.js"></script>
    </body>
    </html>
  `;

  res.send(html);
});

app.listen(PORT, () => {
  console.log(`✅ Serveur en SSR lancé sur http://localhost:${PORT}`);
});

👉 Ici, ReactDOMServer.renderToString() transforme votre composant React en chaîne HTML, qui est ensuite injectée dans la réponse envoyée au navigateur.


⚡ Étape 4 : Hydratation côté client

Pour rendre votre application interactive après le rendu côté serveur, ajoutez un fichier client.js :

import React from "react";
import { createRoot } from "react-dom/client";
import App from "./src/App.js";

const root = createRoot(document.getElementById("root"));
root.hydrateRoot(<App />);

Note : l’hydratation permet à React de « reprendre la main » sur le DOM généré côté serveur.


🔧 Étape 5 : Configurer Babel pour la compatibilité

Ajoutez un fichier .babelrc à la racine :

{
  "presets": ["@babel/preset-env", "@babel/preset-react"]
}

Puis, utilisez Webpack ou un autre bundler pour compiler vos fichiers client (optionnel selon votre config).


🔄 Étape 6 : Backend vs Frontend : rôle dans le SSR

Pour bien comprendre le fonctionnement du Server-Side Rendering, il est essentiel de distinguer deux parties d’une application web moderne :

  • Le frontend : c’est la partie visible par l’utilisateur, construite avec React. Elle gère l’interface, l’affichage et l’interaction. Normalement, React fonctionne côté client (navigateur). Mais avec le SSR, une première version du HTML est générée côté serveur avant que le navigateur ne prenne le relais.
    👉 Découvrez notre guide complet sur le développement frontend avec React (lien interne possible).
  • Le backend : c’est la couche invisible qui s’exécute côté serveur. Ici, c’est Node.js associé à Express qui joue le rôle du backend. Il reçoit les requêtes, exécute le rendu initial des composants React en HTML, puis renvoie la réponse au client.
    👉 Consultez aussi notre article sur le développement backend avec Node.js (lien interne possible).

En combinant backend et frontend, le SSR tire parti du meilleur des deux mondes : un rendu rapide côté serveur et une application interactive côté client.


🌍 Étape 7 : SEO et bonnes pratiques

Pour maximiser l’impact SEO de votre SSR, suivez ces conseils :

  1. Titres et meta tags dynamiques
    Générez des balises <title> et <meta description> en fonction de chaque route.
  2. Open Graph et Twitter Cards
    Ajoutez des balises pour améliorer le partage sur les réseaux sociaux.
  3. Sitemap et robots.txt
    Générés dynamiquement via Node.js pour une meilleure indexation.
  4. Compression et cache
    Utilisez compression et etag dans Express pour réduire la taille des réponses.

📊 Exemple de rendu final

Quand vous lancez le serveur avec :

node server.js

et que vous visitez http://localhost:3000, vous obtenez immédiatement une page HTML complète :

<div id="root">
  <h1>Bienvenue sur mon site en SSR 🚀</h1>
  <p>Ce contenu est rendu côté serveur grâce à Node.js et React.</p>
</div>

✅ Conclusion

Créer un serveur Node.js pour le rendu SSR d’une application React permet d’allier performance, SEO et expérience utilisateur.
En résumé :

  • Node.js gère le rendu initial côté serveur.
  • React en SSR fournit une base réactive, rapide et adaptée au référencement.
  • Express orchestre les requêtes et la distribution des fichiers.
  • Le rendu côté serveur (SSR) améliore drastiquement le référencement naturel et la vitesse perçue par l’utilisateur.

👉 Si vous souhaitez aller plus loin, explorez des frameworks comme Next.js, qui intègrent React en SSR par défaut. Mais comprendre et maîtriser la mise en place manuelle avec Node.js vous donne une autonomie précieuse et un contrôle total sur votre stack backend/frontend.

Laisser un commentaire

Your email address will not be published. Required fields are marked *.

*
*