Guide : Recipe Schema

Comment implement schema.org/Recipe markup pour Google's recipe rich résultat — le deux requis properties vs. le recommended définir que construit le fuller card, pourquoi le carousel nécessite an ItemList summary or tous-dans-un page, le conditional nutrition/temps/rating champs, le video property, et le contenu-policy règle que seulement réel dishes qualify.

Première publication : 1 juil. 2026 · Dernière mise à jour : 3 août 2026 · Avancé

Recipe schema (schema.org/Recipe) est données structurées que indique moteur de recherches une page's dish nom, photo, cook temps, ratings, ingredients, et nutrition, donc lune page peut earn Google's recipe rich résultat — a visual card avec a star rating et cook temps que peut apparaître as a carousel or grid et avec recipe badges dans Google Images. Seulement deux properties sont strictly requis — image et nom — mais le fuller card est populated depuis le recommended définir: aggregateRating, author, cookTime, prepTime, totalTime, recipeYield, recipeIngredient, recipeInstructions, recipeCategory, recipeCuisine, mots-clés, datePublished, nutrition.calories, et video. Deux choses trip personnes up: le multi-recipe carousel est a host-level fonctionnalité que nécessite an ItemList page (soit a summary page linking à séparé recipe pages, or an tous-dans-un page linking à anchors on itself) — individual recipe markup alone earns à la plupart a unique card, pas a carousel — et Recipe markup est seulement valide pour réel dishes, avec Google's propre counterexamples étant que 'facial scrub' et 'party ideas' ne sont pas valide recipe noms. Along avec VideoObject, ce est un de le deux structured-données types dans le CreativeWork family que produces a genuine, visible rich résultat — Google ne fait pas publish classement, CTR, or trafic numbers pour il, mais le visual upgrade est réel quand il montre. Valide markup seulement rend vous eligible; Google encore decides si à montrer le résultat.

TL;DR — schema.org/Recipe markup (généralement JSON-LD) rend a recipe page eligible pour Google’s recipe rich résultat — a visual card (photo, star rating, cook temps, calories) que peut apparaître as a carousel/grid on le SERP et avec recipe badges dans Google Images. Seulement image et name sont strictly requis; le card est vraiment construit depuis le recommended définir (aggregateRating, author, cookTime, prepTime, totalTime, recipeYield, recipeIngredient, recipeInstructions, recipeCategory, recipeCuisine, keywords, datePublished, nutrition.calories, video). Deux implementation facts la plupart round-ups skip: le multi-recipe carousel est a host-level fonctionnalité que exige an ItemList page — soit a summary page linking à séparé recipe pages, or an tous-dans-un page linking à anchors on itself — per-recipe markup alone earns a unique card, jamais a carousel — et Recipe markup est seulement valide pour réel dishes (“facial scrub” et “party ideas” sont Google’s propre counterexamples). Times utiliser ISO 8601 durations (PT20M), et le la plupart courant raison a valide recipe ne fait pas montrer est a contenu-policy mismatch entre markup et visible page. Along avec VideoObject, ce est un de le deux structured-données types dans le CreativeWork cluster que produces a genuine, visible rich résultat — pas a documented classement, CTR, or trafic factor, simplement a réel visual upgrade quand affiché.

Preuve à l’appui de cette affirmation Schema.org Recipe describes a recipe and its ingredients, instructions, timing, nutrition, and related metadata. Portée : Schema.org Recipe vocabulary. Niveau de confiance : élevé · Vérifié : Schema.org: Recipe Preuve à l’appui de cette affirmation Google's Recipe feature requires name and image and documents additional recommended properties; complete valid markup earns eligibility, not guaranteed display or ranking. Portée : Current Google Recipe structured-data requirements. Niveau de confiance : élevé · Vérifié : Google Search Central: Recipe structured data

Ce que le recipe rich résultat semble comme — et comment c’est construit

Google renders Recipe markup as a visual card: le image thumbnail, le name, le aggregateRating stars et count, et le cook temps (depuis totalTime or cookTime). On nombreux recipe requêtes ceux cards sont grouped dans a carousel or grid à le top de le résultats, et marked-up recipes aussi earn recipe badges dans Google Images, qui est a meaningful discovery surface pour food contenu.

«Google’s framing of the whole point: “Help users find your recipe content by telling Google about your recipe with structured data.” That’s the mental model — you’re not asking for a ranking boost, you’re making the content machine-readable enough to qualify for a specific, visible feature. » (Traduction) (Résumé en français de la section vingt-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Ce est le property tableau que matters. Google seulement marks deux properties as requis, qui est genuinely misleading si vous arrêter reading là — a recipe avec simplement name et image valide mais produces a thin, unattractive résultat.

Requis

PropertyNotes
nameLe dish nom. Doit être a réel dish (contenu policy ci-dessous).
imagePhoto de le finished dish. Doit être crawlable, indexable, dans a pris en charge format, et representative de le dish. Google recommends plusieurs images à 16x9, 4x3, et 1x1 ratios, chaque au moins 50 000 pixels — il y a aucun séparé 1,200px-wide requirement some guides cite.

Recommended (ce is ce que Google uses to construire the fuller card, quand it decides to montrer un — populating les doesn’t force afficher)

PropertyCe que il drives
aggregateRatingLe star rating + count on le card. Suit Google’s review-extrait guidelines; si vous montrer a unique examiner plutôt que an aggregate, le reviewer doit être a named person or organization.
authorAttribution.
datePublishedFreshness signal; ISO 8601 date.
descriptionSummary texte.
keywordsGratuit-texte balises (e.g., “winter, comfort food”). Pas le même as recipeCategory.
nutrition.caloriesFeeds le calorie figure Google peut montrer. Conditional: si vous définir nutrition.calories, recipeYield doit aussi être défini.
prepTimePrep duration, ISO 8601 (PT15M). Google’s guidance: toujours pair il avec cookTime.
cookTimeCook duration, ISO 8601 (PT1H). Pair il avec prepTime.
totalTimeTotal duration. Utiliser totalTime, or le prepTime + cookTime combination — Google accepts soit.
recipeCategoryMeal type — “appetizer”, “dessert”, “main course”.
recipeCuisineRegional cuisine — “Mediterranean”, “Thai”.
recipeIngredientUn entry per ingredient, notamment quantity (“2 cups flour”).
recipeInstructionsLe étapes — ideally HowToStep objects, optionally grouped dans HowToSection.
recipeYieldServings or amount produced. Requis si vous supply quelconque per-diffusion nutrition info.
videoA VideoObject pour an embedded cooking video — suivre VideoObject’s propre requis/recommended champs (voir ci-dessous).

totalTime et le prepTime/cookTime pair sont les deux acceptable à Google; supply totalTime directement quand vous pouvez, since c’est le unique duration la plupart probable à rendre on le card.

Times utiliser ISO 8601 durations, pas free text

A recurring validation échec: cookTime: "20 minutes" est invalide. Durations utiliser le ISO 8601 format — PT (period de temps) plus le valeur — donc 20 minutes est PT20M, an hour et a half est PT1H30M. Dates comme datePublished utiliser ISO 8601 dates (2026-07-01). Getting ces formats incorrect est un de le la plupart courant raisons a recipe fails le Résultats enrichis Tester.

Ce est le implementation detail générique “types of schema” listicles presque toujours skip. Là sont deux différent choses ici:

  • Le unique recipe card — earned par Recipe markup on le individual recipe page.
  • Le recipe carousel/grid — a host carousel, qui est a séparé fonctionnalité.

À être eligible pour le multi-recipe carousel, vous ajouter an ItemList page — et Google’s host-carousel documentation prend en charge deux différent page models, pas simplement un:

  • Summary page — une page (a category or roundup page — “15 Weeknight Pastas”) avec a court description de chaque élément, où chaque ListItem points, dans order, à le URL de a séparé recipe detail page que itself a complet Recipe markup. Ce est le modèle la plupart guides décrire.
  • Tous-dans-un page — a unique page que contient le complet markup pour chaque élément itself et ne fait pas lien out à séparé detail pages; chaque ListItem carries an item object (avec name et a url c’est an anchor on le même page) plutôt que a lien à elsewhere.

Soit model supplies le sequence Google nécessite pour le carousel; qui un fits dépend on si votre recipes déjà actif on leur propre URLs (summary page) or vous êtes presenting les tout on un long page (tous-dans-un page).

«The practical consequence: you cannot get a carousel from one ordinary recipe page. A single recipe page with excellent markup earns a single card. If you want the carousel, you need one of the two ItemList page models above, layered on top of (or containing) full Recipe markup. Missing this is the number-one reason people say “my markup is perfect but I’m not getting a carousel.” » (Traduction) (Résumé en français de la section quarante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

The nutrition panel

nutrition est a NutritionInformation object, et nutrition.calories est le champ Google calls out par nom — il feeds le calorie figure Google peut montrer dans le rich résultat. c’est a données requirement, pas a promise de a distinct expandable nutrition panel chaque temps; Google’s docs décrire le champ, pas a guaranteed UI element. il y a aussi a condition attached: si vous définir nutrition.calories, recipeYield doit être défini aussi, since calories sont stated per diffusion et Google nécessite le diffusion count à faire sense de le number. Vous pouvez ajouter fatContent, proteinContent, carbohydrateContent, sodiumContent, et le rest, mais calories (paired avec recipeYield) est le combination que la plupart reliably surfaces. Valeurs sont strings avec units (“240 calories”, “9 g”). c’est a petit bloquer que ajoute a visible, differentiating detail à votre card, donc c’est worth populating pour quelconque recipe où vous pouvez compute il honestly.

Preuve à l’appui de cette affirmation If nutrition.calories is supplied, Google requires recipeYield to identify the number of servings. Current documentation describes a data condition; it does not promise a distinct expandable nutrition panel in every result. Portée : web Niveau de confiance : élevé · Vérifié : Recipe structured data

Video: où Recipe meets VideoObject

Nombreux recipe pages embed a cooking video, et le video property est où Recipe et VideoObject — le deux CreativeWork types que produce genuine, visible rich résultats — intersect. Google’s guidance est explicit: video takes a complet VideoObject et doit suivre que fonctionnalité’s propre requis et recommended properties (name, description, thumbnailUrl, uploadDate, et a contentUrl or embedUrl) — supplying a bare video URL n’est pas le même as le documented subprofile. Fait correct, le recipe peut qualify pour video treatment et le recipe card, et le video becomes eligible pour son propre surfaces. Le per-champ requirements pour le video actif avec le VideoObject topic — le même object nests à l’intérieur a recipe, donc c’est worth getting que markup correct plutôt que stubbing dans a bare video: {}.

Contenu policy: seulement réel dishes, matching le visible page

Ce est le la plupart courant raison otherwise-valide markup ne fait pas afficher. Recipe markup est scoped à réel food. Google est blunt à propos de il: “Utiliser Recipe données structurées pour contenu à propos de preparing a particulier dish. Par exemple, ‘facial scrub’ or ‘party ideas’ ne sont pas valide noms pour a dish.” A DIY cleaning “recipe,” a “recipe pour success” listicle, or a roundup de party ideas dressed up as Recipe markup est a policy violation — le markup peut réussir le syntactic validator et encore jamais earn a card, or obtenir manuellement actioned.

Le deuxième half de le même principle: le markup doit reflect le visible page. Si votre JSON-LD listes ingredients, times, et a rating que ne sont pas en réalité on le page a utilisateur voit, c’est a mismatch Google treats as a spam signal. Mark up qu’est-ce que genuinely là.

Pourquoi votre valid recipe encore montre aucun rich result

Eligibility n’est pas afficher. Le usual chain: lune page a à être indexé, le markup a à être valide, le contenu a à être a réel dish affiché on lune page, et Google’s systèmes encore ont à decide c’est worth showing — le même eligibility-pas-guarantee règle que governs chaque structured-données type. Si vous avez cleared valide markup et contenu policy et encore voir aucun card, le courant culprits sont: times dans gratuit texte au lieu de ISO 8601, an aggregateRating avec aucun count, an image que ne fait pas meet le size/aspect guidance, or expecting a carousel sans an ItemList page.

Pour où Recipe sits dans le wider structured-données picture, voir le broader Schema Markup et Données structurées hubs ce article nests sous.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.