Next.js cumule tout ce qu'il faut pour un SEO impeccable, mais encore faut-il l'activer correctement. Voici la checklist que j'applique systématiquement à chaque projet, avant de mettre en production.
Metadata : la base non-négociable
Chaque page exporte son propre objet `metadata` ou une fonction `generateMetadata`. Le layout racine définit `metadataBase`, le title template, OpenGraph et Twitter Card. La balise canonical est obligatoire sur chaque route.
Fichiers spéciaux Next.js
Quatre fichiers à créer dans `app/` :
- sitemap.ts — toutes les URLs publiques avec changeFrequency et priority
- robots.ts — autorise explicitement les bots IA (GPTBot, ClaudeBot, PerplexityBot, Google-Extended)
- manifest.ts — PWA + icônes
- opengraph-image.tsx — génère une OG image dynamique 1200×630
Données structurées JSON-LD
Le JSON-LD est ce qui débloque les rich results Google et l'indexation par les moteurs génératifs. À placer dans `<head>` (jamais en `afterInteractive`, sinon invisible aux crawlers).
- Organization ou ProfessionalService sur l'accueil
- WebSite avec potentiel SearchAction
- BreadcrumbList sur chaque page interne
- Article ou BlogPosting sur chaque article de blog
- FAQPage pour les sections FAQ
- Service ou Product pour les pages dédiées
Core Web Vitals : les seuils à respecter
Google utilise ces métriques comme facteur de ranking direct :
- LCP < 2.5s — utilisez `priority` sur next/image hero
- INP < 200ms — limitez le JavaScript client
- CLS < 0.1 — toujours réserver les dimensions des images
- TTFB < 800ms — privilégiez SSG ou ISR sur SSR
GEO : optimiser pour ChatGPT et Perplexity
Generative Engine Optimization devient aussi important que le SEO classique. Trois leviers concrets :
- Autoriser les bots IA dans robots.ts (GPTBot, ClaudeBot, PerplexityBot…)
- Créer un fichier llms.txt à la racine résumant le site
- Structurer le contenu avec des définitions claires en début de paragraphe
Un SEO Next.js bien fait, c'est un cap à passer une seule fois en début de projet — ensuite tout se maintient. Le coût marginal est minime, mais la différence entre une app indexée à 100 % et une app à 60 % se compte en milliers de visiteurs par mois.