SEO & GEO
Onyx génère automatiquement tous les signaux techniques pour être bien référencé sur Google et cité dans les réponses de ChatGPT, Perplexity, Claude et Gemini. Zéro configuration par défaut — tout est actif dès le premier déploiement.
SEO technique
Le SEO classique couvre les signaux que Google et les moteurs de recherche traditionnels utilisent pour indexer et classer vos pages.
Sitemap XML
Le fichier /sitemap.xml est généré automatiquement par src/app/sitemap.ts. Il inclut toutes les pages statiques et tous les articles de blog publiés, avec leur date de dernière modification. Ajoutez vos nouvelles pages au tableau dans ce fichier :
export default function sitemap(): MetadataRoute.Sitemap { return [ { url: `${siteConfig.url}/` }, { url: `${siteConfig.url}/ma-page` }, // ajouter ici ...posts.map(p => ({ url: `${siteConfig.url}/blog/${p.slug}` })), ]; }
Open Graph & Twitter Card
Chaque page génère automatiquement ses balises Open Graph à partir de son objet metadata. L'image par défaut est public/images/og-default.jpg (1200x630px recommandé). Pour une image spécifique à un article, renseignez le champ image dans le frontmatter :
image: /images/blog/mon-article-cover.jpg
JSON-LD (données structurées)
Onyx injecte automatiquement des données structurées Schema.org selon le type de page. Ces données aident Google à comprendre le contenu et à l'afficher dans les rich snippets.
| Type | Présent sur | Effet |
|---|---|---|
Organization | Toutes les pages | Carte d'identité du site dans Knowledge Graph |
WebSite | Accueil | Active la SearchBox Google |
FAQPage | Accueil | Affiche les Q&A directement dans les résultats |
BlogPosting | Chaque article | Date, auteur, image dans les rich snippets |
BreadcrumbList | Articles, pages internes | Fil d'Ariane dans les résultats Google |
Balises canoniques
Chaque page exporte sa propre URL canonique via alternates.canonical dans l'objet metadata. Évitez le contenu dupliqué si votre contenu est repris ailleurs.
export const metadata: Metadata = { alternates: { canonical: `${siteConfig.url}/ma-page`, } }
robots.txt
Le fichier robots.txt est généré par src/app/robots.ts. Par défaut, tout est autorisé sauf l'API. Pour bloquer un dossier spécifique, ajoutez une règle :
{ userAgent: "*", allow: "/", disallow: ["/api/", "/admin/"] }
GEO — moteurs IA
Le GEO (Generative Engine Optimization) désigne l'optimisation pour être cité dans les réponses générées par ChatGPT, Perplexity, Gemini et Claude. Ces systèmes ne crawlent pas comme Google : ils utilisent des pipelines RAG (Retrieval-Augmented Generation) qui fragmentent le contenu en chunks, les vectorisent et les récupèrent par similarité sémantique.
llms.txt
Le fichier /llms.txt est la convention émergente pour présenter un site aux IA, proposée par llmstxt.org. Onyx en génère un automatiquement : liste des pages, description, index des articles avec titre, description et tags. Il se met à jour à chaque nouvel article sans rien faire.
llms-full.txt
Le fichier /llms-full.txt va plus loin : il contient le contenu MDX complet de chaque article publié. Un crawler IA peut lire l'intégralité du site en une seule requête. Utile pour les systèmes qui indexent le contenu complet plutôt que de crawler page par page.
force-dynamic). Ils reflètent l'état réel du site à chaque requête : ajoutez un article, il apparaît immédiatement dans /llms.txt et /llms-full.txt.Crawlers IA dans robots.txt
Onyx autorise explicitement tous les crawlers IA majeurs dans robots.txt, même si la règle générale allow: / suffit techniquement. L'explicite envoie un signal clair et évite les ambiguités d'interprétation :
| User-agent | Appartient à |
|---|---|
GPTBot | OpenAI (ChatGPT) |
ChatGPT-User | OpenAI (plugins) |
ClaudeBot | Anthropic (Claude) |
PerplexityBot | Perplexity AI |
Google-Extended | Google (Gemini, SGE) |
Applebot-Extended | Apple Intelligence |
Champ tldr dans les articles
Ajoutez un champ tldr dans le frontmatter de vos articles. Onyx l'affiche en tête d'article dans un bloc “En résumé” : c'est le premier fragment lu et indexé par les pipelines RAG. Rédigez-le comme une réponse autonome, sans pronom vague, avec des données précises :
tldr: "Next.js génère des pages statiques servies depuis un CDN. TTFB sous 50ms, score Lighthouse 95-100, zéro base de données exposée. Déploiement gratuit sur Vercel."
Bonnes pratiques rédactionnelles
| Pratique | Pourquoi |
|---|---|
| Paragraphes de 40 à 60 mots | Les LLMs découpent le texte en chunks — un paragraphe cohérent = un chunk extractible |
| Réponse en premier | Mettre la conclusion dans les 150 premiers mots, avant tout contexte ou historique |
| Pas de pronoms vagues isolés | "Il", "cela" ou "cette solution" dans un chunk sans référent le rendent inutilisable |
| Titres H2/H3 interrogatifs | "Pourquoi X ?" ou "Comment faire Y ?" sont utilisés comme réponses directes par les LLMs |
| Données chiffrées | Les pages avec 19 points de données ou plus sont citées 5,4 fois plus souvent |
| Mise à jour trimestrielle | La fraîcheur surpasse l'ancienneté dans les modèles — rafraîchir les stats relance les citations de 15 à 20 % |
Score Lighthouse
Onyx sort à 99+ sur les quatre axes Lighthouse (Performance, Accessibilité, Bonnes pratiques, SEO) sans aucune configuration. Ce score est le résultat direct des choix d'architecture : pages statiques, images optimisées parnext/image, polices servies en local via next/font, CSS minifié, pas de JavaScript inutile côté client.
next/image pour toutes les images, ajoutez priority sur les images above the fold, et évitez d'importer des librairies lourdes côté client sans vérifier leur impact sur le bundle.