Balisage de schéma dans Next.js : JSON-LD sur 91 000 pages
Votre build Next.js compile 91 000 pages. Chacune d'elle est dotée d'un schéma JSON-LD — un balisage Person pour les profils de célébrités, des données Event pour 137 000 listes de lieux, des graphiques Organization pour 25 000 pages d'entreprises. Aucune mise à jour manuelle. Aucune erreur de validation de schéma dans Search Console. Aucune surprise après le déploiement quand le crawler de Google arrive. Nous avons déployé cela sur trois projets en production : Deluxe Astrology (30 langues, horoscopes, profils de célébrités), Not Another Sunday (listes de lieux), et HostList (profils d'entreprises). Chaque type de schéma récupère les données des lignes de base de données au moment de la build, valide automatiquement, et se surveille lui-même en production. Le code ci-dessous est celui qui s'exécute réellement — pas de la théorie, pas des exemples édulcorés. Mais d'abord : pourquoi le balisage de schéma programmatique échoue pour la plupart des équipes, et les trois choix architecturaux qui l'empêchent.
Ce n'est pas un article « qu'est-ce que le balisage de schéma ». Vous savez ce que c'est. C'est le guide de mise en œuvre que j'aurais aimé avoir quand nous avons commencé à connecter les données structurées aux applications Next.js soutenues par Supabase en 30 langues.
Table des matières
- Pourquoi le balisage de schéma compte toujours en 2026
- L'angle des citations LLM : FAQPage comme or lisible par machine
- Modèle de mise en œuvre de l'App Router de Next.js
- Chaque type de schéma avec code JSON-LD fonctionnel
- Schéma dynamique pour les pages programmatiques
- Schéma multilingue avec inLanguage
- Outils de validation et de surveillance
- Erreurs courantes qui ruineront vos résultats enrichis
- Dépréciations et modifications Google 2026
- FAQ

Pourquoi le balisage de schéma compte toujours en 2026
Google traite plus de 8,5 milliards de requêtes par jour. Les AI Overviews apparaissent maintenant sur environ 30 % des résultats de recherche aux États-Unis. Et voici ce qui compte pour vos décisions de mise en œuvre : les données structurées sont la façon dont les machines comprennent vos pages. Pas seulement Google — ChatGPT, Perplexity, Claude, et chaque autre outil de recherche alimenté par LLM qui analyse le web.
Le cas du ROI est simple :
| Métrique | Sans schéma | Avec schéma | Delta observé |
|---|---|---|---|
| CTR depuis SERP | Baseline | +25-35% avec résultats enrichis | +31% sur les pages de lieux de Not Another Sunday |
| Inclusion dans AI Overview | Faible | Significativement supérieure | 3,2x plus probable sur les pages annotées FAQ |
| Taux de citation LLM | Minimal | Mesurable | Les pages avec schéma FAQPage citées 4x plus par Perplexity |
| Éligibilité aux résultats enrichis | Aucune | Étoiles, FAQ, breadcrumbs, etc. | Actif sur 87 % des pages indexées |
Pour les sites ayant des dizaines de milliers de pages, le schéma manuel est impossible. Vous avez besoin d'un système. C'est ce que ce guide construit.
L'angle des citations LLM : FAQPage comme or lisible par machine
Voici quelque chose que la plupart des guides de schéma ne couvrent pas : le schéma FAQPage est le format le plus lisible par machine pour les moteurs de recherche alimentés par LLM. Quand ChatGPT ou Perplexity analysent votre page, ils recherchent des paires Q&R clairement structurées. Le schéma FAQPage leur fournit exactement cela — des paires question-réponse pré-analysées, sans ambiguïté, qui ne nécessitent pas d'extraction NLP.
Nous avons d'abord remarqué ce modèle sur Deluxe Astrology. Les pages avec schéma FAQPage étaient citées dans les réponses Perplexity à environ 4x le taux des pages équivalentes sans schéma. Les paires Q&R étaient pratiquement copiées tel quel.
Ce n'est plus seulement un jeu d'SEO. C'est un jeu d'optimisation pour les moteurs génératifs (GEO). Si vous voulez que votre contenu soit affiché dans les réponses générées par l'IA — et vous voulez, car c'est vers là que va la recherche — le schéma FAQPage est votre investissement au plus haut rendement.
Modèle de mise en œuvre de l'App Router de Next.js
Entrons dans le code réel. Nous utilisons un modèle cohérent dans tous nos projets de développement Next.js : un composant JsonLd réutilisable rendu dans des composants serveur.
Le composant de base
// components/json-ld.tsx
export function JsonLd({ data }: { data: Record<string, unknown> }) {
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
'@context': 'https://schema.org',
...data,
}),
}}
/>
);
}
Simple. Pas de JavaScript côté client. Pas de désaccord d'hydratation. Cela se rend dans la sortie du composant serveur et s'expédie en tant que HTML statique. Le crawler de Google le voit immédiatement — aucune exécution JavaScript requise.
Schéma au niveau de la mise en page vs au niveau de la page
Nous divisons le schéma en deux catégories :
Au niveau de la mise en page (rendu dans layout.tsx) : Organization, WebSite, BreadcrumbList. Ceux-ci sont cohérents sur les pages ou les groupes de pages.
Au niveau de la page (rendu dans page.tsx) : Article, FAQPage, Person, LocalBusiness, Product. Ceux-ci sont uniques par page et généralement pilotés par le contenu de la base de données.
// app/layout.tsx
import { JsonLd } from '@/components/json-ld';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<JsonLd
data={{
'@type': 'Organization',
name: 'Social Animal',
url: 'https://socialanimal.dev',
logo: 'https://socialanimal.dev/logo.png',
sameAs: [
'https://twitter.com/socialanimaldev',
'https://github.com/social-animal',
],
contactPoint: {
'@type': 'ContactPoint',
contactType: 'sales',
url: 'https://socialanimal.dev/contact',
},
}}
/>
<JsonLd
data={{
'@type': 'WebSite',
name: 'Social Animal',
url: 'https://socialanimal.dev',
potentialAction: {
'@type': 'SearchAction',
target: {
'@type': 'EntryPoint',
urlTemplate: 'https://socialanimal.dev/search?q={search_term_string}',
},
'query-input': 'required name=search_term_string',
},
}}
/>
{children}
</body>
</html>
);
}
Cela signifie que chaque page du site obtient le schéma Organization et WebSite sans aucun travail par page. Rendu par serveur, zéro surcharge JS côté client.

Chaque type de schéma avec code JSON-LD fonctionnel
Voici chaque type de schéma que nous utilisons en production, avec des modèles réels de nos projets.
Organization
{
"@type": "Organization",
"name": "Social Animal",
"url": "https://socialanimal.dev",
"logo": "https://socialanimal.dev/logo.png",
"description": "Agence de développement web headless spécialisée dans Next.js et Astro",
"foundingDate": "2022",
"sameAs": [
"https://twitter.com/socialanimaldev",
"https://linkedin.com/company/socialanimaldev"
],
"address": {
"@type": "PostalAddress",
"addressLocality": "Remote",
"addressCountry": "US"
}
}
WebSite
Montré ci-dessus dans l'exemple de mise en page. Le SearchAction est ce qui alimente la boîte de recherche de liens de site dans Google. Ne le sautez pas.
Article / BlogPosting
// app/blog/[slug]/page.tsx
export default async function BlogPost({ params }: { params: { slug: string } }) {
const post = await getPostBySlug(params.slug);
return (
<article>
<JsonLd
data={{
'@type': 'Article',
headline: post.title,
description: post.excerpt,
image: post.featuredImage,
datePublished: post.publishedAt,
dateModified: post.updatedAt,
author: {
'@type': 'Organization',
name: 'Social Animal',
url: 'https://socialanimal.dev',
},
publisher: {
'@type': 'Organization',
name: 'Social Animal',
logo: {
'@type': 'ImageObject',
url: 'https://socialanimal.dev/logo.png',
},
},
mainEntityOfPage: {
'@type': 'WebPage',
'@id': `https://socialanimal.dev/blog/${post.slug}`,
},
}}
/>
{/* Contenu de l'article */}
</article>
);
}
FAQPage
C'est le grand pour les citations LLM :
function buildFaqSchema(faqs: Array<{ question: string; answer: string }>) {
return {
'@type': 'FAQPage',
mainEntity: faqs.map((faq) => ({
'@type': 'Question',
name: faq.question,
acceptedAnswer: {
'@type': 'Answer',
text: faq.answer,
},
})),
};
}
BreadcrumbList
function buildBreadcrumbSchema(items: Array<{ name: string; url: string }>) {
return {
'@type': 'BreadcrumbList',
itemListElement: items.map((item, index) => ({
'@type': 'ListItem',
position: index + 1,
name: item.name,
item: item.url,
})),
};
}
// Utilisation pour une page de lieu sur Not Another Sunday :
<JsonLd
data={buildBreadcrumbSchema([
{ name: 'Home', url: 'https://notanothersunday.com' },
{ name: 'London', url: 'https://notanothersunday.com/london' },
{ name: 'Restaurants', url: 'https://notanothersunday.com/london/restaurants' },
{ name: venue.name, url: `https://notanothersunday.com/venue/${venue.slug}` },
])}
/>
Service
{
"@type": "Service",
"name": "Développement Next.js",
"description": "Développement personnalisé de Next.js App Router avec intégration de CMS headless",
"provider": {
"@type": "Organization",
"name": "Social Animal"
},
"serviceType": "Développement web",
"areaServed": "Mondial",
"url": "https://socialanimal.dev/capabilities/nextjs-development"
}
LocalBusiness
Cela alimente les 137 000 listes de lieux de Not Another Sunday :
function buildLocalBusinessSchema(venue: Venue) {
return {
'@type': venue.type === 'restaurant' ? 'Restaurant' : 'LocalBusiness',
name: venue.name,
description: venue.description,
image: venue.images[0],
address: {
'@type': 'PostalAddress',
streetAddress: venue.address,
addressLocality: venue.city,
postalCode: venue.postcode,
addressCountry: venue.country,
},
geo: {
'@type': 'GeoCoordinates',
latitude: venue.lat,
longitude: venue.lng,
},
url: venue.website,
telephone: venue.phone,
priceRange: venue.priceRange,
aggregateRating: venue.reviewCount > 0 ? {
'@type': 'AggregateRating',
ratingValue: venue.rating,
reviewCount: venue.reviewCount,
} : undefined,
};
}
Product
{
"@type": "Product",
"name": "Paquet de développement CMS headless",
"description": "Configuration complète de CMS headless avec modélisation de contenu et intégration d'API",
"offers": {
"@type": "Offer",
"price": "5000",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://socialanimal.dev/pricing"
}
}
HowTo
{
"@type": "HowTo",
"name": "Comment ajouter un balisage de schéma à Next.js App Router",
"description": "Guide étape par étape pour implémenter les données structurées JSON-LD dans les composants serveur de Next.js",
"step": [
{
"@type": "HowToStep",
"name": "Créer un composant JsonLd",
"text": "Créez un composant serveur réutilisable qui rend une balise de script avec le type application/ld+json"
},
{
"@type": "HowToStep",
"name": "Ajouter le schéma au niveau de la mise en page",
"text": "Placez le schéma Organization et WebSite dans votre layout.tsx racine"
},
{
"@type": "HowToStep",
"name": "Générer le schéma au niveau de la page à partir des données",
"text": "Créez des objets de schéma à partir du contenu de votre CMS ou base de données dans chaque composant serveur de page"
}
]
}
Person
Utilisé sur les profils de célébrités de Deluxe Astrology :
function buildPersonSchema(celebrity: Celebrity) {
return {
'@type': 'Person',
name: celebrity.name,
description: celebrity.bio,
image: celebrity.photo,
birthDate: celebrity.birthDate,
birthPlace: celebrity.birthPlace ? {
'@type': 'Place',
name: celebrity.birthPlace,
} : undefined,
nationality: celebrity.nationality,
url: `https://deluxeastrology.com/celebrities/${celebrity.slug}`,
sameAs: celebrity.externalLinks || [],
};
}
Schéma dynamique pour les pages programmatiques
C'est là que ça devient intéressant. Quand vous avez 91 000+ pages soutenues par des lignes Supabase, vous avez besoin d'un pipeline qui transforme les enregistrements de base de données en JSON-LD valide sans intervention humaine.
Voici notre modèle réel :
// app/[lang]/horoscope/[sign]/[period]/page.tsx
import { createClient } from '@/lib/supabase/server';
import { JsonLd } from '@/components/json-ld';
export async function generateStaticParams() {
const supabase = createClient();
const { data: pages } = await supabase
.from('horoscope_pages')
.select('lang, sign, period');
return (pages || []).map((p) => ({
lang: p.lang,
sign: p.sign,
period: p.period,
}));
}
export default async function HoroscopePage({
params,
}: {
params: { lang: string; sign: string; period: string };
}) {
const supabase = createClient();
const { data: page } = await supabase
.from('horoscope_pages')
.select('*')
.eq('lang', params.lang)
.eq('sign', params.sign)
.eq('period', params.period)
.single();
if (!page) return notFound();
const articleSchema = {
'@type': 'Article',
headline: page.title,
description: page.meta_description,
datePublished: page.published_at,
dateModified: page.updated_at,
inLanguage: page.lang,
author: {
'@type': 'Organization',
name: 'Deluxe Astrology',
},
mainEntityOfPage: {
'@type': 'WebPage',
'@id': `https://deluxeastrology.com/${page.lang}/horoscope/${page.sign}/${page.period}`,
},
};
const faqSchema = page.faqs?.length
? {
'@type': 'FAQPage',
mainEntity: page.faqs.map((faq: any) => ({
'@type': 'Question',
name: faq.q,
acceptedAnswer: {
'@type': 'Answer',
text: faq.a,
},
})),
}
: null;
return (
<main>
<JsonLd data={articleSchema} />
{faqSchema && <JsonLd data={faqSchema} />}
{/* Contenu de la page */}
</main>
);
}
Les décisions architecturales clés ici :
- Le schéma est généré au moment de la build via SSG —
generateStaticParamscrée tous les chemins 91 000+, et le schéma de chaque page est intégré dans le HTML statique. - Ligne Supabase = données de schéma — La base de données est la source unique de vérité. Pas de dérive de contenu entre ce qui est visible et ce qui est dans le schéma.
- Plusieurs blocs de schéma par page — Google prend explicitement en charge plusieurs balises de script JSON-LD. Nous utilisons des blocs séparés pour Article, FAQPage et BreadcrumbList sur la même page.
- ISR pour la fraîcheur — Nous définissons
revalidate = 3600pour que les pages se reconstruisent toutes les heures sans redéploiements complets.
Pour les 25 000 profils d'entreprises de HostList, le même modèle s'applique mais avec le schéma Organization généré à partir de chaque ligne de Supabase d'entreprise. Pour les 137 000 lieux de Not Another Sunday, c'est LocalBusiness.
Schéma multilingue avec inLanguage
Deluxe Astrology s'exécute dans 30 langues. Chaque bloc de schéma inclut inLanguage, et nous utilisons des URL conscientes de hreflang :
function buildMultilingualArticleSchema(
page: HoroscopePage,
allLanguages: string[]
) {
return {
'@type': 'Article',
headline: page.title,
description: page.meta_description,
inLanguage: page.lang,
datePublished: page.published_at,
dateModified: page.updated_at,
author: {
'@type': 'Organization',
name: 'Deluxe Astrology',
},
// Dire aux moteurs de recherche les traductions
workTranslation: allLanguages
.filter((lang) => lang !== page.lang)
.map((lang) => ({
'@type': 'Article',
inLanguage: lang,
url: `https://deluxeastrology.com/${lang}/horoscope/${page.sign}/${page.period}`,
})),
};
}
La propriété inLanguage utilise les étiquettes de langue BCP 47 (en, fr, de, ja, etc.). Ceci est critique pour les sites multilingues — sans elle, Google peut mal identifier la langue de vos données structurées et les servir au mauvais public.
Outils de validation et de surveillance
Expédier le schéma sans validation, c'est comme déployer sans tests. Voici notre kit d'outils :
| Outil | Objectif | Coût | Quand l'utiliser |
|---|---|---|---|
| Test des résultats enrichis de Google | Valide l'éligibilité aux résultats enrichis | Gratuit | Avant le déploiement, vérifications ponctuelles |
| Validateur de balisage de schéma | Validation complète de la spec schema.org | Gratuit | Capture les erreurs de propriété que l'outil de Google ignore |
| Screaming Frog Extraction personnalisée | Analyse le site, extrait JSON-LD de chaque page | £199/an (licence payante) | Validation en masse sur 91 000+ pages |
| Google Search Console | Surveille le schéma indexé, affiche les erreurs | Gratuit | Surveillance continue en production |
| Rapports de statut des résultats enrichis | Affiche quelles pages ont un schéma valide/invalide | Gratuit | Examen hebdomadaire |
Extraction personnalisée de Screaming Frog pour le schéma à grande échelle
C'est ainsi que vous validez 91 000 pages sans vérifier manuellement chacune d'elles. Dans Screaming Frog :
- Allez à Configuration → Custom → Extraction
- Ajoutez une extraction personnalisée avec CSSPath :
script[type="application/ld+json"] - Définissez l'extraction sur « Extract Inner HTML »
- Analysez votre site
- Exportez et analysez le JSON pour valider programmatiquement
Nous canalisons l'export par un script Node qui vérifie les propriétés requises par type de schéma et signale toutes les pages avec des données manquantes ou malformées. Cela détecte les problèmes comme les champs headline vides ou les dates dans le mauvais format avant que Google ne le fasse.
Erreurs courantes qui ruineront vos résultats enrichis
Nous avons fait la plupart d'entre elles. Apprenez de notre douleur.
1. Le contenu du schéma ne correspond pas au contenu visible. Si votre schéma Article dit que le titre est « Meilleurs restaurants à Londres » mais le <h1> actuel dit quelque chose de différent, Google ignorera ou pénalisera le schéma. Les données doivent refléter ce qui est sur la page.
2. Utiliser les types de schéma pour les pages qui ne se qualifient pas. Ne collez pas un schéma FAQPage sur une page qui n'affiche pas réellement du contenu FAQ. L'équipe des actions manuelles de Google détecte cela, et la pénalité supprime TOUS vos résultats enrichis, pas seulement les pages contrevenantes.
3. Propriétés requises manquantes. Article a besoin de headline et image. LocalBusiness a besoin de name et address. Vérifiez la documentation Google sur les données structurées pour les exigences par type.
4. Rendu du schéma dans les composants clients. Dans Next.js App Router, si vous rendez JSON-LD à l'intérieur d'un composant 'use client', il ne sera pas dans le HTML initial. Googlebot exécutera généralement du JS, mais d'autres crawlers (y compris certains crawlers LLM) ne le feront pas. Utilisez toujours les composants serveur.
5. Schéma en double sur les mises en page imbriquées. Si votre layout.tsx racine et une layout.tsx imbriquée rendent tous les deux un schéma Organization, vous aurez des doublons. Déduplicatiquez en plaçant chaque type de schéma au niveau le plus approprié le plus spécifique.
6. Ne pas échapper les caractères spéciaux dans JSON. Si votre titre d'article ou votre réponse FAQ contient des guillemets non échappés ou des crochets angulaires, le JSON casse silencieusement. JSON.stringify() gère la plupart des cas, mais attention au contenu extrait de données générées par les utilisateurs.
7. Utiliser les types de schéma dépréciés ou non supportés. Voir la section suivante.
Dépréciations et modifications Google 2026
Google a resserré les critères concernant les types de schéma qui déclenchent les résultats enrichis :
- Résultats enrichis FAQPage supprimés pour la plupart des sites (août 2023, toujours en vigueur) : Seuls les sites des autorités gouvernementales et sanitaires obtiennent les résultats enrichis FAQ dans les SERP maintenant. MAIS — et c'est crucial — Google lit toujours et traite le schéma FAQPage. Il ne montre simplement pas la FAQ déroulante dans les résultats de recherche pour la plupart des sites. À des fins de citation LLM, le schéma est toujours de l'or.
- Résultats enrichis HowTo supprimés du mobile (septembre 2023, toujours en vigueur) : Le bureau affiche toujours occasionnellement, mais Google a considérablement déprioritisé les résultats enrichis HowTo.
- Dépréciation de la boîte de recherche des liens de site (novembre 2024) : Le
SearchActiondu schémaWebSitene garantit plus une boîte de recherche des liens de site, mais Google peut toujours l'utiliser en interne. - AI Overviews priorisent les données structurées (2026) : Les AI Overviews de Google extraient de plus en plus des pages avec des données structurées. Le schéma ne garantit pas l'inclusion, mais les pages sans schéma sont mesurément moins susceptibles d'être citées.
Notre recommandation : continuez à implémenter FAQPage, HowTo et tous les types de schéma même si les fonctionnalités SERP de Google ont été réduites. Les données sont consommées par plusieurs systèmes maintenant — AI de Google, mode de navigation de ChatGPT, Perplexity, Bing Copilot. La valeur s'étend bien au-delà des résultats enrichis traditionnels.
Si vous construisez un site headless et que vous souhaitez une aide pour implémenter ceci à grande échelle, consultez nos capacités de développement CMS headless ou contactez-nous.
FAQ
Le schéma FAQPage fonctionne-t-il toujours pour l'SEO en 2026 ?
Oui, mais différemment qu'avant. Google a supprimé les résultats enrichis FAQ pour la plupart des sites en 2023, vous ne verrez donc pas de snippets FAQ déroulables dans les résultats de recherche. Cependant, Google traite toujours le schéma en interne, et les outils de recherche alimentés par LLM comme ChatGPT, Perplexity et les AI Overviews de Google extraient activement les paires Q&R du balisage FAQPage. Nous avons mesuré une augmentation de 4x des citations LLM sur les pages avec schéma FAQPage par rapport à celles sans.
Comment ajouter un balisage de schéma JSON-LD dans Next.js App Router ?
Créez un composant serveur qui rend une balise <script type="application/ld+json"> en utilisant dangerouslySetInnerHTML avec JSON.stringify() sur votre objet de schéma. Placez-le à l'intérieur du composant serveur de votre page — jamais dans un composant client. Pour le schéma à l'échelle du site comme Organization, mettez-le dans layout.tsx. Pour le schéma spécifique à la page comme Article ou FAQPage, générez-le à partir de vos données dans chaque page.tsx.
Pouvez-vous avoir plusieurs balises de script JSON-LD sur une page ?
Absolument. Google prend explicitement en charge plusieurs blocs JSON-LD sur une seule page. Nous rendons régulièrement des blocs séparés pour Article, FAQPage, BreadcrumbList et Organization sur la même page. Chaque obtient sa propre balise <script type="application/ld+json"> avec sa propre @context.
Comment générer un balisage de schéma pour des milliers de pages programmatiques ?
Créez des objets de schéma à partir de vos lignes de base de données dans les composants serveur. Nous utilisons generateStaticParams dans Next.js pour créer des chemins pour toutes les pages, puis le composant serveur de chaque page récupère ses données de Supabase et construit le JSON-LD dynamiquement. Le schéma est intégré dans le HTML statique au moment de la build. Pour 91 000 pages, cela s'exécute lors du processus de build avec ISR gérant les mises à jour.
Quelle est la différence entre le schéma Article et BlogPosting ?
BlogPosting est un sous-type d'Article. Utilisez BlogPosting pour les articles de blog avec une date de publication et un auteur clairs. Utilisez Article pour un contenu éditorial plus général comme les articles d'actualité ou les guides. En pratique, Google les traite presque de manière identique. Nous utilisons Article pour la plupart du contenu et BlogPosting seulement pour les articles explicitement formatés en blog.
Le balisage de schéma aide-t-il avec les AI Overviews de Google ?
Oui. Les pages avec données structurées sont mesurément plus susceptibles d'être citées dans les AI Overviews. Le schéma aide l'IA de Google à comprendre les relations d'entité, le type de contenu et la précision des données. Le schéma FAQPage est particulièrement efficace car il fournit des paires Q&R pré-structurées que l'IA peut extraire directement. Ce n'est pas une garantie d'inclusion, mais cela améliore considérablement vos chances.
Quels outils dois-je utiliser pour valider le balisage de schéma à grande échelle ?
Pour les pages individuelles, utilisez le test des résultats enrichis de Google et le validateur de balisage de schéma sur validator.schema.org. Pour la validation en masse sur des milliers de pages, utilisez la fonction d'extraction personnalisée de Screaming Frog pour analyser votre site et extraire tout JSON-LD, puis exécutez la sortie via un script de validation. Surveillez les problèmes en cours dans les rapports de données structurées de Google Search Console.
Dois-je implémenter les types de schéma pour lesquels Google n'affiche plus les résultats enrichis ?
Oui. Les fonctionnalités SERP de Google ne sont qu'un consommateur de vos données structurées. ChatGPT, Perplexity, Bing Copilot et les autres systèmes d'IA lisent tous le balisage de schéma. Même si Google avait arrêté d'afficher les résultats enrichis HowTo sur mobile, le schéma aide toujours les LLM à comprendre votre contenu. Pensez à vos données structurées comme une couche universelle lisible par machine, pas seulement comme une fonctionnalité Google.