Contenu

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 :

src/app/sitemap.ts
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 :

Frontmatter article
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.

TypePrésent surEffet
OrganizationToutes les pagesCarte d'identité du site dans Knowledge Graph
WebSiteAccueilActive la SearchBox Google
FAQPageAccueilAffiche les Q&A directement dans les résultats
BlogPostingChaque articleDate, auteur, image dans les rich snippets
BreadcrumbListArticles, pages internesFil 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.

Page ou article
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 :

src/app/robots.ts
{ 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.

Les deux fichiers sont des routes API dynamiques (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-agentAppartient à
GPTBotOpenAI (ChatGPT)
ChatGPT-UserOpenAI (plugins)
ClaudeBotAnthropic (Claude)
PerplexityBotPerplexity AI
Google-ExtendedGoogle (Gemini, SGE)
Applebot-ExtendedApple 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 :

Frontmatter article
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

PratiquePourquoi
Paragraphes de 40 à 60 motsLes LLMs découpent le texte en chunks — un paragraphe cohérent = un chunk extractible
Réponse en premierMettre 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éesLes pages avec 19 points de données ou plus sont citées 5,4 fois plus souvent
Mise à jour trimestrielleLa 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.

Pour maintenir ce score : utilisez 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.