DEV TOOLBOX · SCHEMA MARKUP · NO SIGNUP
> schemapreview

Recipe schema

Recipe is the gateway to two rich result formats: the single-recipe rich card and the food-blog carousel. The carousel is the prize — it lifts CTR considerably for the few keywords where Google displays it.

Required fields

  • name — the recipe title.
  • image — at least one URL, 1:1 / 4:3 / 16:9, at least 1200px on the long edge. For the carousel, the 1:1 image is what gets used as the thumbnail.
  • recipeIngredient — an array of strings. Each string is one ingredient line as written on the page. Do not split into name/amount/unit; Google parses that itself.
  • recipeInstructions — an array of HowToStep objects, not a single string. Even if your page shows the instructions as a single block, the schema must be stepwise.
  • authorPerson with name.

Recommended

  • prepTime, cookTime, totalTime — ISO 8601 durations like PT30M or PT1H30M. Required to be eligible for the time-filtered carousel.
  • recipeYield — "4 servings" or similar.
  • aggregateRating — technically optional, practically required for the carousel. Google rarely surfaces unrated recipes there.
  • nutritionNutritionInformation with at least calories.
  • videoVideoObject with name, description, thumbnailUrl, uploadDate. Strongly helps placement.

Common mistakes

  1. Instructions as a single paragraph. A common Yoast default. Google validates it but the carousel UI looks bad and CTR suffers.
  2. Aspect ratio not 1:1, 4:3, or 16:9. Mobile carousel uses 1:1; without one, Google may use no thumbnail at all.
  3. Duration as "30 mins". Must be ISO 8601 (PT30M).
  4. Forgetting aggregateRating. If your CMS has a review plugin, make sure its schema is merged into the Recipe object, not emitted as a separate Review.

CMS notes

  • WordPress (WP Recipe Maker, Tasty Recipes): both emit valid Recipe schema. If you also have Yoast/Rank Math, disable their Recipe module so you don't get two competing copies.
  • Squarespace / Wix: native blog templates don't emit Recipe schema. Use a custom HTML block.
  • Headless: structure your CMS so each ingredient is a separate field, then map to the array at build time — never trust a single rich-text field to contain a clean list.

Generate it below

Last verified: 2026-05-15. Found something inaccurate? Email hello@schemapreview.dev.

Google's Recipe docs ↗

TYPE
02 — PROPERTIES

1:1, 4:3, or 16:9, min 1200px wide.

Ingredients*
#1
Instructions*
#1
Author*
Aggregate rating+
Nutrition+
Video+
03 — PREVIEW
Google preview · approximate
image
Untitled recipe
example.com
No reviews
VALIDATION
× Not eligible5 errors · 7 warnings
  • nameRequired property "Recipe name" is missing.docs ↗
  • imageRequired property "Image URL" is missing.docs ↗
  • recipeIngredientRequired property "Ingredients" is missing.docs ↗
  • recipeInstructionsRequired property "Instructions" is missing.docs ↗
  • authorRequired property "Author" is missing.docs ↗
  • prepTimeRecommended property "Prep time (ISO 8601, e.g. PT30M)" is missing.docs ↗
  • cookTimeRecommended property "Cook time" is missing.docs ↗
  • totalTimeRecommended property "Total time" is missing.docs ↗
  • recipeYieldRecommended property "Yield (e.g. "4 servings")" is missing.docs ↗
  • aggregateRatingRecommended property "Aggregate rating" is missing.docs ↗
  • nutritionRecommended property "Nutrition" is missing.docs ↗
  • videoRecommended property "Video" is missing.docs ↗
04 — COPY
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Recipe"
}
</script>