Structured Data · Type Reference · Part 7

Recipe Structured Data: Ingredients, Steps, Cook Time & Recipe Cards

~14 min read Updated 2026-06-24 MagicSEO Editors · Human Reviewed Type Reference

Recipes are one of the most richly displayed rich result types: star ratings, cooking time, images, and nutrition information can all appear in search results, and multiple recipes can form a swipeable carousel. To earn these displays, the key is converting ingredients, steps, and timing information from plain text into structured data, while ensuring they match exactly with visible page content.

What is Recipe#

Recipe describes a cookable recipe. Google uses it to generate recipe rich media cards in search results, which may include dish name, images, ratings, cooking duration, calories, and more. Multiple recipes can be arranged horizontally in a "recipe carousel" (host carousel).

Official documentation entry: Google Search Central: Recipe structured data.

More fields, richer cardsOnly name and image are required, but rich media effects depend almost entirely on how many recommended fields you complete: time, yield, ratings, nutrition, video.

Required & Recommended Fields#

FieldRequiredDescription
nameRequiredRecipe name
imageRequiredFinished dish image, multiple aspect ratios recommended (1:1, 4:3, 16:9)
recipeIngredientRecommendedOne entry per ingredient, including quantity
recipeInstructionsRecommendedUse HowToStep for step-by-step, not a large block of text
prepTime / cookTime / totalTimeRecommendedISO 8601 duration, e.g. PT30M
recipeYieldRecommendedServings/yield, e.g. "4 servings"
nutritionRecommendedNutritionInformation, e.g. calories
aggregateRatingRecommendedReal user ratings, must be visible on page
videoRecommendedNested VideoObject, cooking video
author / datePublishedRecommendedAuthor and publish date

Complete JSON-LD Example#

recipe.json
{
  "@context": "https://schema.org",
  "@type": "Recipe",
  "name": "番茄炒蛋",
  "image": [
    "https://example.com/photos/tomato-egg-1x1.webp",
    "https://example.com/photos/tomato-egg-4x3.webp",
    "https://example.com/photos/tomato-egg-16x9.webp"
  ],
  "author": { "@type": "Person", "name": "林记厨房" },
  "datePublished": "2026-06-24",
  "description": "家常番茄炒蛋,10 分钟出锅。",
  "prepTime": "PT5M",
  "cookTime": "PT5M",
  "totalTime": "PT10M",
  "recipeYield": "2 人份",
  "recipeCategory": "主菜",
  "recipeCuisine": "中餐",
  "nutrition": {
    "@type": "NutritionInformation",
    "calories": "220 kcal"
  },
  "recipeIngredient": [
    "番茄 2 个",
    "鸡蛋 3 个",
    "食盐 适量",
    "白糖 1 小勺"
  ],
  "recipeInstructions": [
    { "@type": "HowToStep", "text": "鸡蛋打散,番茄切块。" },
    { "@type": "HowToStep", "text": "热油炒蛋盛出。" },
    { "@type": "HowToStep", "text": "炒番茄出汁,加盐糖,倒回鸡蛋翻匀出锅。" }
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 4.8,
    "ratingCount": 152
  }
}

Time in ISO 8601 Duration#

All time fields must use ISO 8601 duration format, not plain text or pure numbers.

MeaningCorrect FormatIncorrect Format
30 minutesPT30M30 minutes / 30
1 hour 30 minutesPT1H30M1.5 hours
2 hoursPT2H2h

When providing both prepTime and cookTime, it's recommended to also provide totalTime. All three should be logically consistent.

Steps as HowToStep#

Writing recipeInstructions as a HowToStep array is easier to parse than a single block of text and performs better in step displays. When grouping is needed, use HowToSection to wrap multiple steps (e.g. "Preparation", "Cooking", "Plating"). Each step can include name, url (anchor), image.

To create a horizontally swipeable carousel of multiple recipes, use ItemList on the list page. Each item's url should point to its respective independent recipe detail page, and the actual Recipe markup belongs on the detail page.

recipe-carousel.json
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "url": "https://example.com/recipes/tomato-egg"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "url": "https://example.com/recipes/egg-fried-rice"
    }
  ]
}
Carousel only for your own recipesUrls in ItemList should all point to your own website's recipe detail pages. Don't aggregate recipes from other sites.

Ratings Must Be Real and Visible#

Adding aggregateRating to recipes helps click-through rates significantly, but ratings must come from user reviews that are genuinely visible on the page, and data must be authentic. When you don't have a review system or real data, don't fabricate star ratings—this is consistent with compliance requirements for Review Snippet.

Why This Site Doesn't Implement Recipe#

MagicSEO teaches SEO, it's not a recipe site. This page has no real recipes, ingredients, or cooking steps. Therefore, we won't force Recipe markup just for demonstration purposes.

This site's approachThis page continues using Article, BreadcrumbList, and FAQPage. Structured data should truthfully describe the page's actual content, not masquerade as a different page type just to display a certain card type.

Validation and Monitoring#

  1. Use Rich Results Test to check required and recommended fields.
  2. Verify that ingredients, steps, timing, and ratings match visible page content.
  3. Confirm all times use ISO 8601 duration format.
  4. For carousels, check that each url in ItemList opens the corresponding recipe detail page.
  5. After launch, monitor invalid items in Search Console's recipe enhancement report.

Common Mistakes#

MistakeWhy It's RiskyFix
Time in plain text or numbersCannot parseUse PT30M, PT1H30M
Steps as one big blockPoor step displaySplit into HowToStep array
Fabricated star ratingsStructured data violationOnly markup real visible reviews
Missing finished dish imageimage is requiredProvide multi-aspect dish images
Carousel aggregates external recipesViolates guidelinesItemList only points to your own recipes

Recipe Launch Checklist#

  • name and image (multiple aspect ratios) complete
  • recipeIngredient has each ingredient with quantity
  • recipeInstructions uses HowToStep for steps
  • prepTime/cookTime/totalTime use ISO 8601 duration
  • recipeYield, nutrition added as appropriate
  • aggregateRating from real visible reviews
  • video (if present) with compliant nested VideoObject
  • Carousel uses ItemList pointing to your own detail pages
  • Page visible content matches JSON-LD
  • Rich Results Test shows no critical errors

Frequently Asked Questions#

Which fields are required for Recipe structured data?

Google's hard requirements for Recipe are name and image. But to get meaningful recipe rich results, it's strongly recommended to complete recipeIngredient, recipeInstructions, cookTime/prepTime/totalTime, recipeYield, nutrition, aggregateRating, video and other recommended fields. The more complete the fields, the richer the recipe card.

Why must time fields use ISO 8601 duration format?

cookTime, prepTime, and totalTime must use ISO 8601 duration format, for example PT30M for 30 minutes, PT1H30M for 1 hour 30 minutes. Writing plain text like "half hour" or the number 30 directly cannot be parsed. If you provide both prepTime and cookTime, it's recommended to also provide totalTime.

How do I create a recipe carousel (host carousel)?

A recipe carousel requires using ItemList on a list page to chain multiple recipes together. Each item in the list uses url to point to its respective independent recipe detail page, and the actual Recipe markup is placed on the detail page. Note this is for a carousel of multiple recipes on your own website—don't aggregate recipes from other sites.

Can I add star ratings to recipes?

Yes, but ratings must come from user reviews that are genuinely visible on the page. When embedding aggregateRating into Recipe, the page should display the corresponding average score and review count, with real data. Don't make up star ratings without real reviews, otherwise it's a structured data violation.