Référence

Que vérifier avant de mettre un site statique en ligne

Un build statique n'a aucun serveur derrière lui : ce qui est faux dans ces fichiers est faux pour chaque visiteur. React2Static passe tout ce qui suit sur votre propre sortie de build avant la mise en ligne. Voici la liste complète, avec la correction pour chaque point.

Les noms de paquets, chemins et tailles des exemples ci-dessous ne sont que des exemples — le builder y met ceux de votre propre projet.

Un fichier .env a été publié

Ce que vous voyez

dist/
  .env
  index.html
  assets/index-a3f1c2.js

Le fichier entier est téléchargeable par n'importe quel visiteur. Renouvelez chacune de ses valeurs, puis sortez .env du dossier que votre compilation copie tel quel (en général public/).

Votre code lit process.env.API_KEY, mais rien ne lui donne de valeur

Ce que vous voyez

const apiKey = process.env.API_KEY;

fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
// Vite turns process.env into {} — the header goes out as
// "Bearer undefined" and the API answers 401. No error in the console.

Vite remplace process.env par un objet vide : dans le navigateur, cette valeur vaut simplement undefined — sans erreur ni avertissement. La requête part quand même, sans la valeur, et l'API répond 401. Lisez-la plutôt via import.meta.env.VITE_quelquechose, ou définissez-la dans vite.config.

La correction

const apiKey = import.meta.env.VITE_API_KEY;

process.env.API_KEY est toujours présent dans le résultat

Ce que vous voyez

Uncaught ReferenceError: process is not defined
    at index-a3f1c2.js:1:2043

Le navigateur n'a pas d'objet process : cette ligne déclenche une erreur dès le chargement, généralement un écran blanc. Avec Vite, les valeurs destinées au navigateur se lisent via import.meta.env et doivent être nommées VITE_quelquechose.

La correction

const apiKey = import.meta.env.VITE_API_KEY;

Le résultat pointe vers votre propre machine

Ce que vous voyez

const API = "http://localhost:3000/api";

Il contient http://localhost:3000/api. Cette adresse n'existe que sur la machine qui a compilé le projet : la requête échouera pour tous les visiteurs. Pointez-la vers une URL publique.

La correction

const API = "https://api.example.com";

Pas d'index.html dans le résultat

Ce que vous voyez

dist/
  assets/index-a3f1c2.js
  assets/index-9b2e01.css

Un hébergeur statique sert index.html comme page d'entrée. Sans lui, les visiteurs obtiennent une liste de fichiers ou une 404. Vérifiez ce que votre compilation produit réellement.

Le titre est encore celui du modèle

Ce que vous voyez

<title>Vite + React + TS</title>

Il indique « Vite + React + TS ». C'est le texte qu'afficheront les résultats de recherche et les liens partagés. Changez-le dans index.html.

La correction

<title>Your product name — what it does, in one line</title>

La page n'a pas de titre

L'onglet du navigateur et chaque résultat de recherche utilisent la balise <title>. Ajoutez-la dans index.html.

La correction

<title>Your product name — what it does, in one line</title>

Pas de meta description

Les moteurs de recherche se rabattent sur un fragment extrait au hasard. Une phrase claire dans <meta name="description"> décide si les gens cliquent.

La correction

<meta name="description" content="One clear sentence about what this page is for." />

Pas de balise viewport

Les téléphones rendent la page en largeur bureau puis dézooment : tout devient minuscule. Ajoutez <meta name="viewport" content="width=device-width, initial-scale=1"> dans index.html.

La correction

<meta name="viewport" content="width=device-width, initial-scale=1" />

Pas de balises Open Graph

Partagé dans une messagerie ou sur un réseau social, votre lien apparaît comme une URL nue, sans titre ni image. Ajoutez og:title, og:description et og:image.

La correction

<meta property="og:title" content="Your product name" />
<meta property="og:description" content="One clear sentence." />
<meta property="og:image" content="https://example.com/og.png" />

Pas d'icône de site personnalisée

Ce que vous voyez

<link rel="icon" type="image/svg+xml" href="/vite.svg" />

L'onglet et les favoris affichent une page blanche, ou le logo hérité du modèle. Ajoutez votre propre favicon et référencez-la depuis index.html.

La correction

<link rel="icon" href="/favicon.ico" sizes="any" />

La balise <html> n'a pas d'attribut lang

Les lecteurs d'écran s'en servent pour la prononciation et les navigateurs pour proposer une traduction. Ajoutez lang="fr", ou la langue réelle de la page.

La correction

<html lang="en">

Pas de robots.txt

Les robots indexeront le site de toute façon, mais robots.txt est l'endroit où leur indiquer votre sitemap. Nous pouvons l'ajouter à l'étape de mise en ligne.

La correction

User-agent: *
Allow: /

Sitemap: https://example.com/sitemap.xml

Un script pèse 2.4 MB

Ce que vous voyez

dist/assets/index-a3f1c2.js   2,418.55 kB │ gzip: 731.20 kB

(!) Some chunks are larger than 500 kB after minification.

Sur une connexion mobile, cela fait plusieurs secondes d'écran blanc avant le moindre affichage. Découper les parties lourdes avec import() dynamique réduit fortement le premier chargement.

La correction

const Editor = lazy(() => import('./Editor'));

Une ressource pèse 4.0 MB

Ce que vous voyez

dist/assets/hero-8f2a1b.png   4,102.11 kB

Les images et polices volumineuses retardent le premier affichage. Convertir les images en WebP et les redimensionner à leur taille d'affichage réelle en supprime l'essentiel.

Laissez-le trouver les vôtres

Déposez votre ZIP dans le builder. Il exécute le vrai build dans votre navigateur, et quand quelque chose casse il pointe la ligne qui compte au lieu de vous tendre tout le journal.

Ouvrir l'atelier

À voir aussi

Erreurs de build et comment les corrigerLes 13 échecs de build les plus fréquents dans les projets React générés par IA : la sortie exacte de npm, Vite et tsc, ce que chacun signifie, et la correction.