1 juillet 2026 · Nuxt · Déploiement · o2switch

Déployer un site Nuxt 4 statique sur o2switch

Génération statique, upload cPanel, .htaccess : le workflow complet pour héberger un site Nuxt performant sur un mutualisé o2switch.

o2switch est un hébergeur mutualisé cPanel très répandu dans l'écosystème francophone. Il n'est pas conçu pour les frameworks JavaScript modernes, mais un site Nuxt généré en statique s'y déploie très simplement : sans Node.js côté serveur, sans Passenger, sans maintenance.

Pourquoi le statique

Pour un site vitrine ou un blog, la génération statique (nuxi generate) produit du HTML pré-rendu pour chaque page. Les bénéfices sont immédiats :

  • SEO : Google reçoit du HTML complet, indexable instantanément.
  • Performance : pas de rendu serveur, tout est servi comme des fichiers.
  • Sécurité : aucune surface d'attaque applicative, pas de base de données, pas de runtime, rien à patcher.
  • Simplicité : le mutualisé sert des fichiers, c'est exactement son métier.

Le workflow

1. Générer le site en local

npm run generate

Nuxt produit le site complet dans .output/public/ : pages HTML, assets, sitemap, robots.txt.

2. Uploader vers o2switch

Deux options : le gestionnaire de fichiers cPanel (zipper .output/public, uploader, extraire), ou un client FTP/SFTP. La cible est le dossier public_html/ de votre domaine.

Point important : uploadez le contenu de .output/public/, pas le dossier lui-même. index.html doit se retrouver directement à la racine de public_html/.

3. Configurer le .htaccess

Un fichier .htaccess à la racine règle trois choses : la redirection HTTPS, la gestion des routes, et le cache des assets.

RewriteEngine On

# Forcer HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Servir les pages pré-rendues (routes propres sans .html)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1/index.html [L]

# Cache long pour les assets fingerprintés
<FilesMatch "\.(js|css|woff2|png|jpg|webp|svg)$">
  Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>

4. Mettre à jour

Chaque mise à jour suit le même cycle : modifier le contenu, npm run generate, re-uploader. Pas de base de données à migrer, pas de plugin à mettre à jour.

Le cas du formulaire de contact

Un site statique n'a pas de serveur pour traiter un formulaire. Sur o2switch, la solution la plus simple est un petit script PHP posé à côté du site statique : le mutualisé exécute PHP nativement. Un honeypot (champ caché que seuls les bots remplissent) suffit à filtrer l'essentiel du spam sans imposer de captcha aux visiteurs.

C'est l'un des rares cas où mélanger un site statique moderne et un script PHP de dix lignes est exactement la bonne solution : chaque outil fait ce qu'il sait faire.

← Tous les articles