Recipe schema markup lets your recipes appear as rich results in Google Search – with images, cooking times, ratings, and calorie counts displayed directly in the SERP. This can increase click-through rates by up to 35%.
Google also uses recipe structured data for voice-guided cooking through Google Assistant. If you want your recipes to stand out in search results and carousels, structured data is essential. It is an integral part of the Technical SEO process.
Why Recipe Schema Matters
Google uses recipe structured data to power rich results, carousels, and voice-guided cooking via Google Assistant. When properly implemented, your recipes can appear with preparation time, ratings, images, and step-by-step voice instructions.
The Recipe schema also feeds into Google Discover and AI-powered search features, making it one of the highest-impact schema types for food content sites. Even if voice features are not yet available in all languages, implementing the full Recipe schema improves your visibility in Google Search and increases click-through rates (CTR).
This guide covers the recommended data structure for recipe schema, including JSON-LD examples for both single recipe pages and archive pages.
New to structured data? Read our guide on Schema and Structured Data in WordPress first.
Required and Recommended Recipe Properties
If you take a look at Schema.org/Recipes, you might be overwhelmed and tempted to give up on the idea. Where do you even start? There are numerous options, as you can see. However, these are all the properties you can add, and you don’t have to add all of them. In fact, Google only requires a few of these properties, but recommends more.
Required properties:
@context– Set tohttps://schema.org.@type– Set toRecipe.image– URL of the finished dish (provide multiple aspect ratios: 1:1, 4:3, 16:9).name– The recipe title.
These are the minimum required properties. However, the more recommended properties you add, the higher the chance Google will display your recipe as a rich result.
Google-recommended recipe properties:
aggregateRating: The average rating of the recipe.author: Who prepared the recipe? Use Schema.org/Person.cookTime: The time it takes to cook the recipe.datePublished: When the recipe was first published.description: Description of the recipe.keywords: Terms describing the recipe.nutrition.calories: The number of calories in the recipe, use Schema.org/Energy.prepTime: How much time is required for preparations for the recipe?recipeCategory: Is it breakfast, lunch, dinner, or something else?recipeCuisine: Which cuisine does the recipe belong to? Mediterranean, French, Asian, etc.recipeIngredient: Each of the required ingredients for the recipe (essential for Google Home and voice reading of the recipe).recipeInstructions: Mark the steps withHowToSteporHowToSection.recipeYield: The number of servings the recipe is intended for.review: Reviews for the recipe.totalTime: The total preparation time for the recipe.video: Video explaining how to prepare the recipe if available.
In order to see how this translates into code, let’s look at an example taken from Google, how the recipe looks in JSON-LD format. You’ll notice that things are quite clear and relatively easy to understand:
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Recipe",
"name": "Party Coffee Cake",
"image": [
"https://domain.co.il/photos/1x1/photo.jpg",
"https://domain.co.il/photos/4x3/photo.jpg",
"https://domain.co.il/photos/16x9/photo.jpg"
],
"author": {
"@type": "Person",
"name": "Mary Stone"
},
"datePublished": "2018-03-10",
"description": "This coffee cake is awesome and perfect for parties.",
"prepTime": "PT20M",
"cookTime": "PT30M",
"totalTime": "PT50M",
"keywords": "cake for a party, coffee",
"recipeYield": "10 servings",
"recipeCategory": "Dessert",
"recipeCuisine": "American",
"nutrition": {
"@type": "NutritionInformation",
"calories": "270 calories"
},
"recipeIngredient": [
"2 cups of flour",
"3/4 cup white sugar",
"2 teaspoons baking powder",
"1/2 teaspoon salt",
"1/2 cup butter",
"2 eggs",
"3/4 cup milk"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"text": "Preheat the oven to 350 degrees F. Grease and flour a 9x9 inch pan."
},
{
"@type": "HowToStep",
"text": "In a large bowl, combine flour, sugar, baking powder, and salt."
},
{
"@type": "HowToStep",
"text": "Mix in the butter, eggs, and milk."
},
{
"@type": "HowToStep",
"text": "Spread into the prepared pan."
},
{
"@type": "HowToStep",
"text": "Bake for 30 to 35 minutes, or until firm."
},
{
"@type": "HowToStep",
"text": "Allow to cool."
}
],
"review": {
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "4",
"bestRating": "5"
},
"author": {
"@type": "Person",
"name": "Julia Benson"
},
"datePublished": "2018-05-01",
"reviewBody": "This cake is delicious!",
"publisher": "The cake makery"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "5",
"ratingCount": "18"
},
"video": [
{
"name": "How to make a Party Coffee Cake",
"description": "This is how you make a Party Coffee Cake.",
"thumbnailUrl": [
"https://domain.co.il/photos/1x1/photo.jpg",
"https://domain.co.il/photos/4x3/photo.jpg",
"https://domain.co.il/photos/16x9/photo.jpg"
],
"contentUrl": "http://www.domain.co.il/video123.mp4",
"embedUrl": "http://www.domain.co.il/videoplayer?video=123",
"uploadDate": "2018-02-05T08:00:00+08:00",
"duration": "PT1M33S",
"interactionCount": "2347",
"expires": "2019-02-05T08:00:00+08:00"
}
]
}
</script>The code looks lengthy, but it only needs to be built once as a template. The values are populated dynamically from your recipe’s meta fields.
Recipe Carousel Schema for Archive Pages
For archive pages listing multiple recipes, use an ItemList schema to enable carousel display in search results:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"url": "https://domain.co.il/peach-pie/"
},
{
"@type": "ListItem",
"position": 2,
"url": "https://domain.co.il/blueberry-pie/"
},
{
"@type": "ListItem",
"position": 3,
"url": "https://domain.co.il/cherry-pie/"
}
]
}
</script>Each ListItem URL must point to a single recipe page that contains the full Recipe schema.
Implementing Recipe Schema in WordPress
In WordPress, recipe data typically lives in a Custom Post Type with meta fields for each recipe’s properties. You read that data dynamically and output it as JSON-LD.
For a full walkthrough of adding schema in WordPress, see our guide on Schema and Structured Data in WordPress. Here is the basic structure for a CPT called recipe:
<?php
/******* BEGIN HERE ******/
function json_ld_recipe() {
// Schema.org JSON for Recipes Single Page
// Only on single recipe CPT
if ( is_singular('recipe') ) {
// Open script
$html = '<script type="application/ld+json">';
//****** HERE SHOULD EXISTS YOUR JSON-LD CONTENT ******//
// Close script
$html .= '</script>';
echo $html;
}
}
add_action('wp_head', 'json_ld_recipe');The code above targets single recipe pages. For the archive page, use the is_post_type_archive() condition instead:
<?php
/******* BEGIN HERE ******/
function json_ld_recipe() {
// Schema.org JSON for Recipes Archive Page
// Only on single recipe CPT
if ( is_post_type_archive('recipe') ) {
// Open script
$html = '<script type="application/ld+json">';
//****** HERE SHOULD EXISTS YOUR JSON-LD CONTENT ******//
// Close script
$html .= '</script>';
echo $html;
}
}
add_action('wp_head', 'json_ld_recipe');If you have finished adding those structured data to your recipes on your website, validate them using the Rich Results Test or the Schema Markup Validator. These tools show whether Google can parse your markup and which rich result types it qualifies for.
If there are errors (common on the first attempt), the tools provide specific details about what needs fixing. A successful result looks like this:

FAQs
Summary
Adding recipe structured data is a one-time development task that pays ongoing dividends. Once the JSON-LD template is in place, each new recipe automatically generates the correct schema from its meta fields.
With proper implementation, your recipes can appear as rich results with images, ratings, and cooking times – standing out in search results and driving more clicks.

