What Is Recipe Schema? The Complete Guide (2026)

Saar Twito10 min read
Saar Twito
Saar TwitoFounder & SEO Engineer

Hi, I'm Saar - a software engineer, SEO specialist, and lecturer who loves building tools and teaching tech.

View author profile →

What Is Recipe Schema?

Recipe schema is a type of structured data — based on the Schema.org Recipe vocabulary — that tells Google a page contains a food recipe. When correctly implemented, it transforms recipe pages into visually rich search results showing the dish photo, cooking time, ratings, and calorie count — and makes them eligible for the Recipe carousel in Google Images and Google Search.

TL;DR

  • What it is: JSON-LD that identifies a page as a food recipe, unlocking rich results in Google Search and Images.
  • Required properties: name (specific dish name) and image (the completed dish, not a logo).
  • Time format: ISO 8601 duration — PT15M (15 min), PT1H30M (1 hr 30 min).
  • Instructions: Use HowToStepobjects — never include "Step 1:" or "Directions:" in the text itself.
  • Nutrition rule: If you add nutrition.calories, recipeYield becomes required.
  • Validate with: Greadme — it checks time formats, instruction structure, nutrition dependencies, and keyword duplication.

What Rich Results Does Recipe Schema Unlock?

According to Google's Recipe structured data documentation, correctly implemented Recipe schema makes pages eligible for:

  • Recipe rich results in Google Search.A visual card beneath the page title showing the dish photo, star ratings, cooking time, and calorie count. These appear for recipe-specific queries ("chocolate chip cookies recipe") and significantly increase click-through rate.
  • Recipe rich results in Google Images. When users browse Google Images, recipe pages with structured data display a badge showing the recipe name and cooking time directly on the image thumbnail.
  • Recipe host carousel. A horizontal carousel of recipes from a single site, shown when users search for a recipe type. To qualify, the gallery or listing page must use ItemList schema with each recipe as a ListItem — individual recipe pages alone are not enough.

Important restriction: Recipe schema must only be used for food preparation recipes. Google explicitly disqualifies pages where the nameis not a dish — examples cited in Google's documentation include "facial scrub" and "party ideas." Applying Recipe schema to non-food content will not produce rich results and may trigger a quality review.

Required Properties

Only two properties are required by Google, but missing either is a hard error in Greadme that blocks all rich result eligibility:

PropertyTypeNotes
nameTextThe specific dish name. Greadme warns if name is set to the generic value "Recipe" or "Dish". Use the actual dish name: "Chocolate Chip Cookies".
imageImageObject or URLMust show the completed dish — not a logo, author photo, or stock photo. Google recommends providing all three aspect ratios (1:1, 4:3, 16:9) at a minimum of 50,000 pixels each.

Recommended Properties

These properties each add visible information to the rich result card. The more you include, the richer the search result:

PropertyWhy it matters
authorA Person or Organization object. Strengthens E-E-A-T signals — recipe sites with named authors rank better in competitive food search queries.
aggregateRatingDisplays star ratings in the search result. Requires ratingValue and either ratingCount or reviewCount. Must reflect visible ratings on the page.
prepTime / cookTime / totalTimeDisplayed in the rich result card. Use ISO 8601 duration format. Provide eithertotalTime alone, or both prepTime and cookTime together. Greadme warns when only one is provided.
recipeYieldThe number of servings or items produced (e.g., "24 cookies" or "4 servings"). Required by Greadme when nutrition.calories is specified.
recipeIngredientAn array of ingredient strings. Shown in some rich result surfaces. Greadme warns on individual ingredients over 200 characters — keep ingredient entries concise.
recipeInstructionsStep-by-step cooking instructions. Using HowToStep objects (rather than plain text) unlocks richer search result formats. See the dedicated section below.
recipeCategoryThe type of meal or course: "dinner", "dessert", "snack", etc.
recipeCuisineThe cuisine origin: "Italian", "Japanese", "American", etc.
keywordsComma-separated descriptors like "summer, quick, easy, gluten-free". Greadme warns if keywords duplicates recipeCategory or recipeCuisine — those fields already serve that purpose.
nutritionA NutritionInformation object. Including calories displays the calorie count in rich results. RequiresrecipeYield to be set.
suitableForDietDietary flags from Schema.org's RestrictedDiet vocabulary:GlutenFreeDiet, VeganDiet, VegetarianDiet, HalalDiet, KosherDiet, DiabeticDiet, and others.
videoA VideoObject embedding the recipe video. Requires name, description, thumbnailUrl, and uploadDate. Unlocks video thumbnails in rich results.

How to Format Cooking Times

All time properties (prepTime, cookTime, totalTime) must use ISO 8601 duration format. Greadme flags any other format as a hard error. The format is:

ISO 8601 duration format

"prepTime": "PT15M"       // 15 minutes
"cookTime": "PT1H30M"    // 1 hour 30 minutes
"totalTime": "PT1H45M"   // 1 hour 45 minutes
"cookTime": "PT2H"       // 2 hours

The pattern is PT followed by hours (#H), minutes (#M), and/or seconds (#S). Common invalid formats that Greadme catches: "45 minutes", "1:30", "45m".

How to Structure Recipe Instructions

recipeInstructions accepts three formats. Using HowToStep objects is strongly preferred — it produces richer search result formats and is scored higher by Greadme.

Preferred: HowToStep objects

"recipeInstructions": [
  {
    "@type": "HowToStep",
    "name": "Preheat the oven",
    "text": "Preheat your oven to 180°C (350°F) and line a baking sheet with parchment paper."
  },
  {
    "@type": "HowToStep",
    "name": "Mix the dough",
    "text": "Cream butter and sugar until fluffy. Add eggs one at a time, then stir in vanilla."
  },
  {
    "@type": "HowToStep",
    "name": "Bake",
    "text": "Drop rounded tablespoons of dough onto the prepared sheet. Bake for 12–14 minutes until edges are golden."
  }
]

The name of each step must be descriptive — not "Step 1" or "1.". The text must not begin with "Step 1:", "Directions:", or contain "Watch the video". Both Greadme and Google's documentation flag these as errors.

Grouped steps: HowToSection

For recipes with distinct phases (e.g., dough + filling + assembly), use HowToSection to group steps:

"recipeInstructions": [
  {
    "@type": "HowToSection",
    "name": "Make the pastry crust",
    "itemListElement": [
      { "@type": "HowToStep", "name": "Combine dry ingredients", "text": "Mix flour and salt..." },
      { "@type": "HowToStep", "name": "Add butter", "text": "Cut cold butter into the flour..." }
    ]
  },
  {
    "@type": "HowToSection",
    "name": "Prepare the filling",
    "itemListElement": [
      { "@type": "HowToStep", "name": "Cook the apples", "text": "Slice apples thinly..." }
    ]
  }
]

A HowToSection requires both a name and a non-empty itemListElement. Greadme flags a section missing either as a hard error.

Full Implementation Example

Complete Recipe (with nutrition and video)

{
  "@context": "https://schema.org",
  "@type": "Recipe",
  "name": "Classic Chocolate Chip Cookies",
  "image": [
    "https://example.com/cookies-1x1.jpg",
    "https://example.com/cookies-4x3.jpg",
    "https://example.com/cookies-16x9.jpg"
  ],
  "author": {
    "@type": "Person",
    "name": "Sarah Miller",
    "url": "https://example.com/authors/sarah-miller"
  },
  "datePublished": "2026-03-10",
  "description": "Classic chocolate chip cookies with browned butter.",
  "prepTime": "PT20M",
  "cookTime": "PT14M",
  "totalTime": "PT34M",
  "recipeYield": "24 cookies",
  "recipeCategory": "dessert",
  "recipeCuisine": "American",
  "keywords": "easy, quick, family-friendly, make-ahead",
  "suitableForDiet": "https://schema.org/LowFatDiet",
  "recipeIngredient": [
    "225g unsalted butter",
    "200g caster sugar",
    "100g soft brown sugar",
    "2 large eggs",
    "1 tsp vanilla extract",
    "300g plain flour",
    "1 tsp bicarbonate of soda",
    "½ tsp fine sea salt",
    "300g dark chocolate chips"
  ],
  "recipeInstructions": [
    {
      "@type": "HowToStep",
      "name": "Brown the butter",
      "text": "Melt butter over medium heat until golden and nutty. Cool for 10 minutes."
    },
    {
      "@type": "HowToStep",
      "name": "Mix wet ingredients",
      "text": "Whisk both sugars into cooled butter, then add eggs and vanilla. Beat until smooth."
    },
    {
      "@type": "HowToStep",
      "name": "Combine and bake",
      "text": "Stir in flour, soda, and salt. Fold in chocolate chips. Bake at 180°C for 12–14 min."
    }
  ],
  "nutrition": {
    "@type": "NutritionInformation",
    "calories": "180 calories",
    "carbohydrateContent": "24g",
    "fatContent": "9g",
    "proteinContent": "2g"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "ratingCount": "543"
  },
  "video": {
    "@type": "VideoObject",
    "name": "How to Make Classic Chocolate Chip Cookies",
    "description": "Step-by-step video showing the browned butter technique for extra flavour.",
    "thumbnailUrl": "https://example.com/cookies-video-thumb.jpg",
    "uploadDate": "2026-03-10T10:00:00+00:00",
    "duration": "PT4M30S"
  }
}

The 7 Most Common Recipe Schema Mistakes

1. Applying Recipe schema to non-food content

Recipe schema is strictly for food preparation. Google explicitly disqualifies pages where the name is not a food dish — beauty treatments, craft projects, and party guides do not qualify. Applying it to non-food content will not produce rich results and may trigger a structured data quality review.

2. Wrong time format

"prepTime": "20 minutes" or "cookTime": "1:30"fail Greadme's validation as hard errors. All time values must be ISO 8601 duration format: "PT20M" for 20 minutes, "PT1H30M" for 1 hour 30 minutes.

3. Using plain text for instructions instead of HowToStep

Plain text instructions are technically valid but Greadme flags them with a warning and deducts score. HowToStep objects produce richer search result formats. Even a simple three-step recipe benefits from structured steps over a single text block.

4. Including metadata in instruction text

Step text that begins with "Step 1:" or contains phrases like "Directions:" or "Watch the video" violates Google's guidelines and is flagged by Greadme. The text field should contain only the instruction itself. Similarly, aHowToStep name of "Step 1" or "1." is not descriptive — use "Preheat the oven" instead.

5. Adding calories without recipeYield

If you include nutrition.calories, recipeYieldbecomes required. Without it, the calorie count has no context — Google can't display "180 calories per serving" if it doesn't know how many servings the recipe makes. Greadme flags this as a hard error.

6. Duplicating recipeCategory or recipeCuisine in keywords

If recipeCategory is "dessert", including "dessert" in keywords is redundant. Greadme warns on this. Use keywords for supplementary descriptors that are not already captured — season, dietary tags, texture, occasion.

7. Missing ItemList on recipe gallery pages

To qualify for the Recipe host carousel, a summary or gallery page (e.g., "Our best cookie recipes") must include ItemList schema with each recipe listed as a ListItem with its own url and sequential position. Individual recipe pages with their own Recipe schema are not enough — the gallery page must be marked up too. Google requires at least 2 items for carousel eligibility.

How Recipe Schema Affects AI Visibility

AI assistants increasingly answer food and cooking queries directly. When someone asks ChatGPT or Perplexity "what's a good easy pasta recipe for Sunday?", the AI pulls structured facts from Recipe schema before reading prose:

  • totalTime— to filter recipes by time commitment ("quick dinners under 30 minutes")
  • recipeIngredient— to answer "what do I need to make this?" accurately
  • nutrition.calories— to respond to calorie or diet queries ("low-calorie pasta recipes")
  • suitableForDiet— to filter by dietary restriction ("vegan", "gluten-free", "halal")
  • aggregateRating — to recommend the highest-rated version when multiple recipes match the same query

Recipe pages with complete structured data are significantly more likely to be cited in AI cooking recommendations than pages where this information only exists in prose.

How to Validate Your Recipe Schema

Run your URL through Greadme to validate your Recipe schema. Greadme checks all required and recommended fields — including time format validity, instruction structure (HowToStep vs plain text), nutrition dependencies, keyword duplication, video object completeness, and ingredient length — and gives you a scored report with actionable fixes per field.

FAQ

Can I use Recipe schema for non-food recipes like cocktails or smoothies?

Yes — beverages are food items and fully qualify for Recipe schema. Use recipeCategory values like "drink" or "cocktail". Non-food "recipes" (beauty products, cleaning solutions, craft projects) do not qualify.

Should I use totalTime or prepTime + cookTime?

Either works, but providing both prepTime and cookTime separately gives users more useful information (they may want to know how much active hands-on time is required vs. baking/resting time). If you only provide one, use totalTime. Greadme warns when only one of prepTime / cookTime is provided without totalTime.

Does my recipe need a video to qualify for rich results?

No — video is optional. All recipe rich result surfaces can be earned without a video. However, adding a properly marked-up VideoObject makes the page eligible for video thumbnails in search results, which can significantly increase engagement.

How do I mark up a recipe that serves a range of people?

Use a text value for recipeYield: "4–6 servings" is perfectly valid. You can also use a QuantitativeValue object with minValue and maxValue for machine-readable ranges.

What are valid suitableForDiet values?

Schema.org defines these RestrictedDiet values: DiabeticDiet, GlutenFreeDiet, HalalDiet, HinduDiet, KosherDiet, LowCalorieDiet, LowFatDiet, LowLactoseDiet, LowSaltDiet, VeganDiet, VegetarianDiet. Use the full URL form: "https://schema.org/VeganDiet".

Can I put Recipe schema on a page with multiple recipes?

Each page should represent one recipe with one Recipe schema block. A page listing multiple recipes should use ItemList schema with each recipe as a ListItempointing to its own dedicated URL — that's what qualifies the gallery page for the Recipe host carousel.

Do I need to mark up every ingredient measurement precisely?

No — ingredient strings can be plain text: "225g unsalted butter". For machine-readable measurements, you can use PropertyValue objects, but plain text strings are perfectly valid and widely used. Greadme flags ingredients over 200 characters as a warning — keep them concise.

Conclusion

Recipe schema is one of the most visually impactful structured data types available — a star rating, cooking time, and dish photo directly in search results. Only two properties are required, but the more you add — especially HowToStep instructions, nutrition, aggregateRating, and suitableForDiet — the richer the result and the more AI systems can extract from your page. Get the time format right (ISO 8601 duration), keep instruction text clean of metadata, and validate with Greadme before publishing.