Recipe Schema Generator: Recipe Markup That Follows Google's Rules
Build Recipe JSON-LD with the dish name and images Google requires, plus the ingredients, steps, times, yield, nutrition, ratings, and video it recommends.
Try the Recipe GeneratorWhy recipe markup misses rich results
- Only one small or mismatched image, when Google recommends several crops of the finished dish.
- Step text that starts with “Step 1” or “Directions”, which Google says to leave out of the markup.
- Calories with no servings in recipeYield, which Google requires for nutrition per serving.
- A cook time without a prep time, or ratings and video markup missing fields Google requires.
How SwiftSchema helps
The generator follows Google’s Recipe documentation. It asks for the two required fields first, takes several image URLs, and writes servings the way Google asks: as a number, with an optional second yield such as “24 cookies”.
It warns you while you type: when a time isn’t an ISO 8601 duration, when a step starts with a label, when a keyword repeats your category or cuisine, when nutrition has no servings, and when a rating, review, or video is missing a field Google needs. It can also group steps into sections.
What Google requires and recommends
Google's Recipe documentation makes only two properties required. Everything else is recommended, but the recommended fields are what the rich result shows, so add each one your page displays.
| Property | Google says | Notes |
|---|---|---|
name | Required | The name of the dish. Use Recipe only for a dish, not for things like a face scrub or party ideas. |
image | Required | Images of the finished dish. See the image rules below. |
recipeIngredient | Recommended | One ingredient per entry, with only what's needed to make the dish. |
recipeInstructions | Recommended | HowToStep items (or HowToSection groups). Plain text works, but Google has to guess where steps break. |
prepTime, cookTime | Recommended | ISO 8601 durations. Always give them together. |
totalTime | Recommended | Use this, or both prepTime and cookTime. |
recipeYield | Recommended | Servings as just a number. Required if you add nutrition per serving. |
nutrition.calories | Recommended | Calories per serving, such as "520 calories". |
recipeCategory, recipeCuisine | Recommended | The meal or course, and the region. |
keywords | Recommended | Comma-separated terms that aren't your category or cuisine. |
author, datePublished, description | Recommended | Person or Organization, the publish date, and a short summary. |
aggregateRating | Recommended | Follows the review snippet rules. Only mark up ratings the page shows. |
video | Recommended | A VideoObject that meets Google's video requirements. |
Image rules
- Google recommends several high-resolution images with 16:9, 4:3, and 1:1 aspect ratios, each at least 50,000 pixels when you multiply width by height (for example, 400 × 300 = 120,000 passes).
- Images must be crawlable and indexable. Check them with the URL Inspection tool in Search Console.
- Images must show the dish you marked up, in a file format Google Images supports.
- Recipe
imagedoesn't control the thumbnail on a plain text result. That comes from general image SEO.
Writing recipeInstructions
- Give each step only the instruction. Don't start with “Step 1”, “Directions”, or “Watch the video”; Google says to put those on the page, outside the markup.
- Keep author, cuisine, category, and keywords in their own properties, not inside the steps.
- Use
HowToSectiononly when the recipe really has parts, such as crust and filling. Most recipes don't. Each section needs anameand itsHowToStepitems initemListElement. - Don't use a section for a different version of the dish. Mark up a separate Recipe for each version.
In the generator, tick Group steps into sections and name the section on the first step of each group. A step with a blank section joins the section above it.
Yield, nutrition, and times
- Servings as a number. Google's example is
"recipeYield": ["6", "24 cookies"]: the servings first, then any other unit. The generator outputs one value or both, depending on what you fill in. - Nutrition is per serving. If you include
nutrition.calories, Google requiresrecipeYieldwith the number of servings. - Times in ISO 8601.
PT20Mis 20 minutes,PT1H30Mis an hour and a half,P1DT2His a day and two hours. UsetotalTime, or bothprepTimeandcookTime. Don't give a cook time without a prep time.
Keywords
Google says to use keywords for other terms, such as a season (“summer”), a holiday (“Halloween”), or a descriptor (“quick”, “one-pan”). Don't repeat the category or cuisine. "keywords": "dessert, American" is the example Google calls out; "keywords": "winter apple pie, nutmeg crust" is the one it recommends.
Ratings and reviews
aggregateRating follows Google's review snippet guidelines (our AggregateRating guide walks through them): give both the average (ratingValue) and the count (ratingCount or reviewCount), and only mark up ratings visitors can see on the page. If you mark up a single review, Google requires the reviewer to be a real person or organization. A name like “50% off ingredients” doesn't count.
Video
A recipe video uses VideoObject. Google requires the video's name, thumbnailUrl, and uploadDate (include a timezone, such as 2026-04-12T08:00:00+00:00; otherwise Google uses Googlebot's). It recommends contentUrl (the video file itself) or, if you can't give that, an embedUrl, plus duration and description. The generator warns you if you start a video without the three required fields.
Recipe carousels and ItemList
ItemList isn't required for Recipe markup. To make your recipes eligible for a host carousel, you also need a summary page that lists the recipes, with ItemList markup where each ListItem gives its position and a unique canonical url on your site. Every listed page still needs its own Recipe markup. The last example above shows the summary page markup; the ItemList guide has more.
Recipe and HowTo
Recipe is a subtype of HowTo in schema.org, which is why its steps use HowToStep and HowToSection. Google retired HowTo rich results in September 2023, but that change doesn't affect recipes: Recipe rich results are still supported, and the HowTo guide explains what changed.
How to build one here
- 01
Enter the dish name and at least one image URL of the finished dish. Add 16:9, 4:3, and 1:1 crops if you have them.
- 02
Add the author, publish date, and a short description that match the page.
- 03
Enter prep and cook times, or a total time, as ISO 8601 durations.
- 04
Enter servings as a number. Add a second yield, such as a cookie count, if the page shows one.
- 05
List the ingredients one per row, then the steps without “Step 1” labels. Turn on sections only if the recipe has parts.
- 06
Add nutrition, ratings, and video only if the page shows them, then fix any warnings.
- 07
Copy the JSON-LD into the recipe page and check it with Google’s Rich Results Test.
Ready to build the markup?
Name and image first. Then everything your page shows.
Common mistakes
| Mistake | Fix |
|---|---|
| Treating ingredients and instructions as the only fields that matter | Google requires name and image. Recipe markup without an image isn't eligible. |
| One small image | Add 16:9, 4:3, and 1:1 images of at least 50,000 pixels each. |
"text": "Step 1. Heat oven to 425°F." | "text": "Heat oven to 425°F." |
"recipeYield": "Serves about 4 people" with calories | "recipeYield": "4" |
"cookTime": "45 minutes" | "cookTime": "PT45M", with a prepTime or a totalTime |
"keywords": "dinner, Italian" | Keep those in recipeCategory and recipeCuisine; use other terms as keywords. |
| A rating with no count | Add ratingCount, and only if the ratings appear on the page. |
| A video without a thumbnail or upload date | Add thumbnailUrl and uploadDate, or leave the video out. |
| Using Recipe for something that isn't a dish | Recipe is only for preparing a dish. Use another type for crafts, beauty, or party ideas. |
On-page parity checklist
- The dish name, description, and images on the page match
name,description, andimage. - The ingredients and steps on the page appear in the same order as
recipeIngredientandrecipeInstructions. - The times and servings shown match
prepTime,cookTime,totalTime, andrecipeYield. - The average rating and count shown match
aggregateRating. - The calories shown match
nutrition.calories, for the same serving size. - The video player on the page is the one in
video.
Maintenance
- Update the markup when you change ingredients, steps, times, servings, or photos, and update
dateModifiedif you use it. - Re-test with the Rich Results Test after a redesign or a CMS template change.
- Watch the Recipes report in Search Console for new errors and warnings after each release.
Required properties
nameimage
Recommended properties
recipeIngredientrecipeInstructionsdescriptionauthordatePublishedprepTimecookTimetotalTimerecipeYieldrecipeCategoryrecipeCuisinekeywordsnutrition.caloriesaggregateRatingvideo
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Lemon Garlic Roast Chicken",
"image": [
"https://example.com/photos/1x1/lemon-chicken.jpg",
"https://example.com/photos/4x3/lemon-chicken.jpg",
"https://example.com/photos/16x9/lemon-chicken.jpg"
],
"description": "A whole chicken roasted with lemon, garlic, and olive oil.",
"author": {
"@type": "Person",
"name": "Jamie Example",
"url": "https://example.com/about"
},
"datePublished": "2026-05-01",
"prepTime": "PT15M",
"cookTime": "PT1H",
"totalTime": "PT1H15M",
"recipeYield": [
"4",
"1 whole chicken"
],
"recipeCategory": "Dinner",
"recipeCuisine": "American",
"keywords": "sunday roast, one-pan",
"recipeIngredient": [
"1 whole chicken (about 3.5 lb)",
"2 lemons, halved",
"4 cloves garlic, minced",
"2 tbsp olive oil",
"1 tsp salt",
"1/2 tsp black pepper"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"text": "Heat the oven to 425°F (220°C)."
},
{
"@type": "HowToStep",
"text": "Pat the chicken dry and rub it with the olive oil, garlic, salt, and pepper."
},
{
"@type": "HowToStep",
"text": "Put the lemon halves in the cavity and roast for about 1 hour, until the thickest part of the thigh reaches 165°F (74°C)."
}
],
"nutrition": {
"@type": "NutritionInformation",
"calories": "520 calories"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.7,
"ratingCount": 256
}
}{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Apple Pie",
"image": [
"https://example.com/photos/16x9/apple-pie.jpg"
],
"recipeYield": "8",
"recipeIngredient": [
"2 1/2 cups flour",
"1 cup cold butter",
"6 apples, sliced",
"3/4 cup sugar"
],
"recipeInstructions": [
{
"@type": "HowToSection",
"name": "Crust",
"itemListElement": [
{
"@type": "HowToStep",
"text": "Cut the butter into the flour until it looks like coarse crumbs."
},
{
"@type": "HowToStep",
"text": "Add ice water a tablespoon at a time, form two discs, and chill for 1 hour."
}
]
},
{
"@type": "HowToSection",
"name": "Filling",
"itemListElement": [
{
"@type": "HowToStep",
"text": "Toss the apples with the sugar."
},
{
"@type": "HowToStep",
"text": "Fill the bottom crust, cover with the top crust, and bake at 400°F for 50 minutes."
}
]
}
]
}{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Five-Minute Hummus",
"image": [
"https://example.com/photos/1x1/hummus.jpg"
],
"recipeIngredient": [
"1 can chickpeas, drained",
"1/4 cup tahini",
"1 lemon, juiced",
"1 clove garlic"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"text": "Blend everything with 3 tbsp cold water until smooth."
}
],
"video": {
"@type": "VideoObject",
"name": "How to make five-minute hummus",
"description": "Blend chickpeas, tahini, lemon, and garlic into smooth hummus.",
"thumbnailUrl": "https://example.com/photos/hummus-video.jpg",
"uploadDate": "2026-04-12T08:00:00+00:00",
"duration": "PT2M10S",
"contentUrl": "https://example.com/video/hummus.mp4"
}
}{
"@context": "https://schema.org",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"url": "https://example.com/recipes/lemon-garlic-roast-chicken"
},
{
"@type": "ListItem",
"position": 2,
"url": "https://example.com/recipes/apple-pie"
},
{
"@type": "ListItem",
"position": 3,
"url": "https://example.com/recipes/five-minute-hummus"
}
]
}FAQs
Which Recipe properties does Google require?ShowHide
Only name and image. Google lists ingredients, instructions, times, yield, nutrition, ratings, and video as recommended. Add every one your page shows, because they are what the rich result displays.
What size should recipe images be?ShowHide
Google recommends several high-resolution images of the finished dish in 16:9, 4:3, and 1:1 aspect ratios, each at least 50,000 pixels (width × height). The images must be crawlable and show the dish you marked up.
Should I put “Step 1” in recipeInstructions?ShowHide
No. Google says to include only the instruction text in each HowToStep. Labels such as “Step 1”, “Directions”, or “Watch the video” belong on the page, outside the markup.
Why does my nutrition markup need recipeYield?ShowHide
nutrition.calories is calories per serving, so Google requires recipeYield with the number of servings whenever you include it. Give servings as just a number, such as "4", and add other units as an extra yield.
Can I use my category or cuisine as keywords?ShowHide
Google says not to. Use recipeCategory and recipeCuisine for those, and keep keywords for other terms such as the season, an occasion, or a descriptor like “one-pan”.
How do I get my recipes into a carousel?ShowHide
Add Recipe markup to each recipe page. To be eligible for a host carousel, also add ItemList markup to a summary page that lists the recipes, with a ListItem for each one that gives its position and unique canonical URL.