- Recipe is the food subtype of HowTo that survived the 2023 deprecation. Recipe rich results are still active in Google search and one of the highest-CTR rich results in any vertical.
- Required:
name,image,recipeIngredient,recipeInstructions. Realistic floor: addauthor,datePublished,prepTime,cookTime,totalTime,recipeYield,recipeCategory,recipeCuisine,nutrition,aggregateRating. - Model
recipeInstructionsasHowToStepobjects (not a single text blob). One step per action, withname,text, and an optionalimageper step. - Pair with VideoObject when there's a recipe video. The combo enables the video-recipe rich result (recipe carousel with thumbnail + duration).
- Use ISO 8601 durations:
PT15Mfor 15 minutes,PT1H30Mfor 1 hour 30 minutes. Plain text like "15 min" fails validation.
Chapter 1. Before you start
Recipe schema is the highest-stakes structured-data type in the food vertical. The Recipe rich result occupies far more SERP real estate than a standard organic listing - thumbnail, rating, calorie count, prep time - and the CTR uplift is substantial enough that food sites without recipe schema are effectively invisible against competitors that ship it correctly. The 2023 HowTo deprecation didn't touch Recipe; Google explicitly kept Recipe alive because the user-intent match is so clean.
- Confirm the page is a single recipe, not a roundup like "10 chicken dinner ideas." For roundups, use
ItemListwrapping individual Recipe references. - Generate at least one high-quality hero photo, ideally three aspect ratios (1x1, 4x3, 16x9). Without an image the rich result drops to a much smaller variant.
- Capture prep + cook + total time accurately. The rich result displays totalTime prominently; understating it (so the recipe looks fast) backfires when users abandon halfway through.
- Decide on nutrition. Including
nutritionis optional but adds the calorie badge to the rich result, which lifts CTR for diet-conscious queries.
recipeInstructions as a single text blob (one paragraph of all steps) instead of an array of HowToStep objects. 19 omitted nutrition entirely, missing the calorie badge in the rich result. 14 had a recipe video on page but no VideoObject pairing, so the video-recipe rich result never fired. 11 had durations in plain text ("15 min") instead of ISO 8601.
Chapter 2. What does Recipe schema actually do for SEO + AI search?
Four things, in descending order of importance.
- Recipe rich result eligibility. The thumbnail, rating, prep time, calorie count, and reviewer count surface in the SERP. CTR uplift averages 40-65% over a plain text result.
- Recipe carousel inclusion. For category queries like "vegetarian chili recipe", Google groups recipe results into a horizontally scrollable carousel above organic results. Carousel slots require Recipe schema with image + rating.
- Voice assistant cooking flow. Google Assistant reads
recipeInstructionsstep-by-step on smart displays and Nest hubs. Schema-shaped steps are what makes "Hey Google, walk me through this recipe" work. - AI engine citation. ChatGPT, Perplexity, and Gemini pull specific ingredient quantities and step counts from Recipe schema for cooking-intent queries.
Chapter 3. Required and recommended properties
Per Google's Recipe structured-data documentation, required: name, image, recipeIngredient, recipeInstructions. Recommended floor:
{
"@context": "https://schema.org",
"@type": "Recipe",
"@id": "https://www.example.com/recipes/weeknight-pad-thai#recipe",
"name": "Weeknight Pad Thai",
"description": "30-minute Pad Thai with shrimp, rice noodles, and a balanced tamarind-fish sauce dressing.",
"image": [
"https://www.example.com/recipes/weeknight-pad-thai/hero-1x1.jpg",
"https://www.example.com/recipes/weeknight-pad-thai/hero-4x3.jpg",
"https://www.example.com/recipes/weeknight-pad-thai/hero-16x9.jpg"
],
"author": { "@id": "https://www.example.com/about#jane-doe" },
"datePublished": "2026-05-20",
"prepTime": "PT15M",
"cookTime": "PT15M",
"totalTime": "PT30M",
"recipeYield": "4 servings",
"recipeCategory": "Dinner",
"recipeCuisine": "Thai",
"keywords": "pad thai, weeknight dinner, shrimp",
"recipeIngredient": [
"8 oz dried flat rice noodles",
"1 lb large shrimp, peeled and deveined",
"3 tbsp tamarind paste",
"3 tbsp fish sauce",
"2 tbsp palm sugar",
"3 tbsp peanut oil",
"3 cloves garlic, minced",
"2 large eggs, beaten",
"1 cup bean sprouts",
"1/4 cup roasted peanuts, chopped",
"2 limes, cut into wedges"
],
"recipeInstructions": [
{ "@type": "HowToStep", "name": "Soak noodles", "text": "Soak rice noodles in warm water for 20 minutes until pliable.", "url": "https://www.example.com/recipes/weeknight-pad-thai#step-1" },
{ "@type": "HowToStep", "name": "Make sauce", "text": "Whisk tamarind, fish sauce, and palm sugar until sugar dissolves.", "url": "https://www.example.com/recipes/weeknight-pad-thai#step-2" }
],
"nutrition": {
"@type": "NutritionInformation",
"calories": "520 kcal",
"carbohydrateContent": "62 g",
"proteinContent": "28 g",
"fatContent": "16 g",
"servingSize": "1 plate"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"ratingCount": 142,
"reviewCount": 67
},
"video": { "@id": "https://www.example.com/recipes/weeknight-pad-thai#video" }
}
Every field contributes to a specific rich-result feature. nutrition drives the calorie badge. aggregateRating drives the stars. totalTime drives the time chip. video drives the play icon. Skipping any of them removes the corresponding visual element.
Chapter 4. Modeling recipeInstructions as HowToStep
Each instruction step is a HowToStep object, not a sentence in a paragraph. The cleanest pattern:
"recipeInstructions": [
{
"@type": "HowToStep",
"name": "Soak the noodles",
"text": "Soak 8 oz flat rice noodles in warm water for 20 minutes until pliable but firm. Drain and set aside.",
"image": "https://www.example.com/recipes/weeknight-pad-thai/step-1.jpg",
"url": "https://www.example.com/recipes/weeknight-pad-thai#step-1"
}
]
For recipes with distinct phases (prep / cook / plate), wrap groups of steps in HowToSection:
"recipeInstructions": [
{
"@type": "HowToSection",
"name": "Mise en place",
"itemListElement": [
{ "@type": "HowToStep", "name": "Soak noodles", "text": "..." },
{ "@type": "HowToStep", "name": "Whisk sauce", "text": "..." }
]
},
{
"@type": "HowToSection",
"name": "Cook",
"itemListElement": [ ... ]
}
]
The HowToSection pattern lets Google Assistant announce phase transitions during voice-guided cooking. Without it, all steps are flat and the assistant can't pause between "prep" and "cook" naturally.
Chapter 5. Nutrition modeling and video pairing
Nutrition
Use NutritionInformation with units in the value strings. The recommended fields are calories, carbohydrateContent, proteinContent, fatContent, and servingSize. Include fiberContent, sugarContent, and sodiumContent when the audience cares (low-carb, diabetic-friendly, sodium-restricted).
"nutrition": {
"@type": "NutritionInformation",
"calories": "520 kcal",
"carbohydrateContent": "62 g",
"proteinContent": "28 g",
"fatContent": "16 g",
"fiberContent": "4 g",
"sodiumContent": "850 mg",
"servingSize": "1 plate (350 g)"
}
Video pairing
For recipes with a how-to video, ship a full VideoObject in the @graph and reference it from Recipe via the video property. This enables the video-recipe rich result variant - thumbnail with a play icon and duration badge.
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "Recipe", "video": { "@id": "...#video" }, ... },
{ "@type": "VideoObject", "@id": "...#video", "name": "...", "thumbnailUrl": [...], "uploadDate": "...", "duration": "PT3M22S", "contentUrl": "..." }
]
}
Chapter 6. Where do you place Recipe schema on the site?
| Page type | Schema placement |
|---|---|
| Single recipe page | One Recipe record in page <head>, with @id matching URL + #recipe |
| Recipe roundup ("10 vegetarian dinners") | ItemList with 10 Recipe objects, OR 10 references via @id to canonical recipe pages |
| Recipe category landing | CollectionPage with mainEntity as ItemList of Recipe refs |
| AMP recipe page | Same Recipe schema; AMP has additional amp-story-recipe overlay options |
Always reference the parent Organization via publisher and the author via Person with @id. This satisfies Google's recipe author E-E-A-T expectation for the food YMYL adjacent niche (diet, allergy, nutrition).
Chapter 7. The breakages we see most often
Ranked by frequency across 41 food and recipe site audits over the past 24 months:
recipeInstructionsas a single text blob instead of an array of HowToStep objects. 26 of 41.- No
nutrition, missing the calorie badge in the rich result. 19 of 41. - Recipe video on page but no VideoObject pairing, so the video-recipe rich result never fires. 14 of 41.
- Durations in plain text ("15 min") instead of ISO 8601 ("PT15M"). 11 of 41.
recipeIngredientas quantities-only or names-only (e.g. "1 cup" or "flour" alone). Each ingredient string should include amount + unit + name. 9 of 41.- No
aggregateRatingon recipes with user reviews on page. Reviews exist but never surface in the SERP. 7 of 41. - Recipe schema on roundup posts instead of
ItemList. Confuses the rich-result eligibility. 5 of 41.
We track these on running sites through our Sentry structured-data rule set.
FAQ
Did Google deprecate Recipe rich results along with HowTo in 2023?
No. The September 2023 deprecation removed HowTo and FAQ rich results (for most domains), but Recipe was explicitly kept. Recipe rich results are still actively generated and one of the highest-CTR rich results in any vertical.
Do I need aggregateRating for the rich result?
No, but the result is much weaker without it. The star rating is the highest-CTR component of the recipe rich result. Only include it if you have actual on-page reviews; faking ratings is a policy violation.
How do I handle ingredient substitutions in the schema?
Each substitution should be a separate recipeIngredient string with the substitution noted parenthetically, e.g., "2 tsp soy sauce (or coconut aminos)". Don't try to model alternatives as nested objects - Google parses the flat string array best.
Should I include allergen information?
Schema.org doesn't have a dedicated allergen field. Include allergen warnings in the description or as a SuitableForDiet reference (e.g., https://schema.org/GlutenFreeDiet) when applicable. Don't fabricate suitability - users follow these flags strictly.
What if my recipe has multiple yields (4 servings or 8 servings)?
List the default in recipeYield as a string ("4 servings"). For dynamically-scaled recipes (UI sliders that double quantities), keep the schema fixed at the canonical yield. Don't change schema based on the user's slider position - Google indexes the page version, not the runtime state.
Can I use Recipe schema for non-food preparations (cocktails, smoothies)?
Yes. Recipe covers any food or drink preparation. Cocktails, smoothies, and DIY supplement blends all use Recipe. For non-edible procedures (DIY crafts, cleaning solutions) use HowTo, not Recipe.
References
- Schema.org. "Recipe." schema.org/Recipe
- Google Search Central. "Recipe (Recipe, HowTo) structured data." developers.google.com/search/docs/appearance/structured-data/recipe
- Schema.org. "NutritionInformation." schema.org/NutritionInformation
- Schema.org. "HowToStep." schema.org/HowToStep
- Google Search Central. "Changes to structured data for FAQ and How-To" (September 2023). developers.google.com/search/blog/2023/09/structured-data-changes
- Schema.org. "Schema Markup Validator." validator.schema.org