Retour aux vidéos
Formations 17 min

Comment Structurer son Projet Next.js pour le rendre maintenable, logique et IA-Friendly

Découvrez l'arborescence idéale de l'App Router, l'astuce de l'underscore (_), la gestion des routes dynamiques et l'organisation des composants pour collaborer efficacement avec les IA.

📂 Comment Structurer son Projet Next.js pour le Rendre Maintenable, Logique et IA-Friendly

Vous êtes développeur Next.js ou vous aspirez à le devenir ? Vous essayez de structurer votre projet pour qu'il soit à la fois maintenable, logique, facile à comprendre, et même lisible par les intelligences artificielles (IA) qui vous accompagnent au quotidien ?

Si vous avez déjà essayé de demander à une IA d'analyser ou d'expliquer votre projet et que le résultat a été une véritable catastrophe, ou si vous vous sentez tout simplement perdu dans l'arborescence de l'App Router, ce guide est fait pour vous. Attachez vos ceintures, nous allons voyager au cœur de Next.js pour décortiquer la structure idéale pas à pas.


🛣️ Le Routage de Base et l'App Router de Next.js

Lorsque vous créez un projet Next.js, n'oubliez pas que sous le capot, vous manipulez du React. Avec l'App Router activé par défaut, la structure physique de vos dossiers et de vos fichiers détermine directement le routage de votre application.

La Racine du Projet

À la racine de votre dossier app, vous retrouvez les éléments clés suivants :

  • page.tsx : C'est la page d'accueil de votre site, accessible à la racine (ex: mon-site.com/).

  • layout.tsx : Il définit le design global et persistant de votre site. C'est ici que l'on intègre le header (la navbar), le footer, la gestion des polices d'écriture (fonts) et les métadonnées globales.

Les Dossiers Publics et de Configuration

  • 📁 public/ : Situé à la racine du projet (en dehors de app), ce dossier stocke les éléments statiques accessibles publiquement sur internet (favicon, logos, images d'illustration). Attention à ne rien y mettre de confidentiel.

  • 📄 package.json & tailwind.config.js : Fichiers de configuration système pour vos dépendances npm et vos styles. Sauf besoin très spécifique, ils se mettent à jour automatiquement et ne nécessitent pas de modification manuelle fréquente.

Créer une Page Secondaire

Pour créer une nouvelle route (par exemple mon-site.com/contact), il vous suffit de créer un dossier nommé contact dans app, puis d'y placer un fichier page.tsx.


🏗️ L'Organisation des Composants et l'Astuce de l'Underscore (_)

Dans une application React bien conçue, un fichier de code ne doit pas faire 8 000 lignes. On découpe systématiquement l'interface en petits composants fonctionnels réutilisables.

Il existe deux manières principales d'organiser vos composants sous Next.js :

1. Le Dossier Global components

Pour les composants partagés sur l'intégralité du site (comme le bouton d'action principal, le Header ou le Footer), créez un dossier components à la racine du projet (au même niveau que le dossier app). Vous pourrez ainsi les importer proprement partout où vous en avez besoin.

2. Le Dossier de Composants Privés (_components)

Si vous placez un dossier classique au sein de votre dossier app, Next.js va tenter de l'interpréter comme une route accessible via l'URL.

Pour éviter cela et regrouper vos composants spécifiques au plus proche de la page qui les utilise, utilisez le préfixe underscore (_) :


📁 app

├── 📁 contact

│   ├── 📁 _components       (Ignoré par l'App Router)

│   │   └── 📄 ContactForm.tsx

│   └── 📄 page.tsx          (Route : /contact)

En nommant votre dossier _components ou en nommant directement votre fichier de composant _contact-form.tsx, vous indiquez explicitement à Next.js de ne pas générer de route pour ces fichiers. C'est une excellente pratique pour garder une arborescence propre et lisible pour vous et votre assistant IA.


🔄 Le Routage Dynamique et les Slugs

Si vous développez un blog, un e-commerce ou un catalogue de templates, vous n'allez pas créer une page manuellement pour chaque élément. C'est ici qu'intervient le routage dynamique à l'aide des crochets [slug].

Implémentation d'une Route Dynamique

Prenons l'exemple d'un catalogue de templates :


📁 app

└── 📁 template

    ├── 📄 page.tsx          (Liste de tous les templates : /template)

    └── 📁 [slug]

        └── 📄 page.tsx      (Rendu dynamique d'un template : /template/mon-slug)

Le dossier [slug] (les crochets sont obligatoires) indique à Next.js que la valeur de cette portion d'URL est variable. Votre composant page.tsx interne va récupérer ce paramètre dynamique pour requêter votre base de données ou vos fichiers Markdown et injecter le contenu correspondant à la demande.


👥 Les Groupes de Routes (Routes Groups)

Dans le cadre d'applications complexes, vous aurez rapidement besoin de séparer structurellement vos pages sans impacter la structure de vos URL. C'est le rôle des groupes de routes, définis par des dossiers entourés de parenthèses, comme (public) ou (dashboard).

Par exemple, vous pouvez vouloir un layout spécifique (avec sidebar) pour votre espace vendeur ou dashboard privé, et un layout classique pour vos pages publiques :


📁 app

├── 📁 (public)

│   ├── 📄 layout.tsx        (Layout avec Header/Footer standard)

│   └── 📁 contact

│       └── 📄 page.tsx      (URL résolue : /contact)

└── 📁 (vendeur)

    ├── 📄 layout.tsx        (Layout avec Sidebar de gestion)

    └── 📁 dashboard

        └── 📄 page.tsx      (URL résolue : /dashboard)

Grâce aux parenthèses, Next.js comprend que (public) et (vendeur) servent uniquement à regrouper vos fichiers et à leur attribuer des layouts distincts. Ils n'apparaissent pas dans l'URL finale consultée par l'internaute.


🌍 L'Internationalisation (i18n) et le Middleware Proxy

Pour développer un projet SaaS ou toucher un marché global, l'anglais et l'internationalisation deviennent indispensables. Next.js propose une gestion propre du multilingue.

💡 Conseil d'intégration :

Codez d'abord votre structure dans votre langue principale pour éviter de surcharger inutilement votre logique de départ. Une fois les bases posées, implémentez l'internationalisation.

1. Le Proxy (Middleware)

Le middleware intercepte la requête HTTP de l'utilisateur dès son arrivée sur le serveur. Il analyse l'URL et les préférences linguistiques configurées sur le navigateur de l'utilisateur, puis réécrit ou redirige la requête vers la bonne version linguistique (ex: /fr/contact ou /en/contact).

2. Les Dictionnaires de Traduction JSON

Le texte de vos pages est extrait dans des fichiers de dictionnaires structurés au format JSON sous forme de clés-valeurs (fr.json, en.json, etc.). Les clés restent identiques d'un fichier à l'autre, seules les valeurs textuelles sont traduites.


// fr.json

{

  "metadata": {

    "title": "Mon super projet",

    "description": "Bienvenue sur notre plateforme Next.js"

  }

}

3. La Route Dynamique [locale]

Pour gérer ces langues, l'ensemble des pages dynamiques se retrouvent encapsulées sous un dossier racine [locale] (ex: app/[locale]/contact/page.tsx), ce qui permet à Google d'indexer chaque version linguistique indépendamment pour un SEO optimal.


🔌 Communication : Route Handlers (APIs) vs Server Actions

Next.js est un framework full-stack. Il gère à la fois l'affichage côté client et les traitements côté serveur. Vous disposez de deux méthodes pour faire communiquer ces deux mondes :

1. Les Route Handlers (API REST Externes)

Utiles pour recevoir des requêtes du monde extérieur ou de serveurs tiers (ex: recevoir un webhook de Stripe pour valider un paiement, ou interroger une API externe comme celle de Google pour récupérer en temps réel le nombre d'abonnés YouTube de votre chaîne).

  • Ils se codent dans des fichiers nommés route.ts.

  • Ils utilisent les verbes HTTP standards (GET, POST, PUT, DELETE).

2. Les Server Actions (Logique Interne)

C'est l'un des plus grands points forts de Next.js. Si vous n'avez pas besoin d'ouvrir votre logique à des services externes, inutile de coder des routes API REST complexes. Les Server Actions permettent d'appeler des fonctions serveur directement depuis vos composants clients de manière ultra-rapide.

  • Elles se déclarent à l'aide de la directive "use server" en haut du fichier ou de la fonction.

  • Il est recommandé de les regrouper dans un dossier actions à la racine de votre projet pour garder une architecture saine.


🚀 Hébergement, Performances et Déploiement

Une fois votre application Next.js structurée et codée, se pose la question de sa mise en ligne :

  • Vercel (Serverless) : L'option de référence proposée par les créateurs de Next.js. Elle est excellente et simple d'utilisation, mais peut s'avérer complexe si vous gérez des connexions persistantes à des bases de données ou si vous n'êtes pas familier avec Git.

  • Serveur Node.js (VPS / Hostinger) : Une alternative économique et robuste consiste à héberger son projet sur un serveur Node.js classique : 👉 Hostinger jusqu'à -85% : J'en profite. En couplant ce serveur avec le CDN de Cloudflare, vous obtenez des temps de chargement ultra-rapides et une résistance aux surcharges de trafic inégalée.

🛠️ Besoin de Boilerplates ou de Templates Prêts à l'Emploi ?

Pour vous éviter des centaines d'heures de développement sur les parties rébarbatives (authentification, base de données, intégration Stripe), vous pouvez retrouver des bases de code prêtes à l'emploi et hautement documentées directement sur next-web.pro. Vous pouvez également y soumettre vos propres créations de qualité pour mettre en place des partenariats !