Recipe schema generator (JSON-LD)
A single recipe with ingredients, steps, and cooking times.
Rich result available: Recipe. Schema.org type Recipe.
Recipe rich results in Google
Recipes can show an image, rating, cooking time, and calories in Search and in recipe carousels. Google requires a name and an image.
When to use Recipe schema
Add Recipe JSON-LD to a page whose main content is a single recipe. Food blogs, publisher recipe pages, and brand recipe hubs are the usual fit. Do not mark up a category page or a list of unrelated recipes with one Recipe object.
Recipe properties Google requires and recommends
| Property | Status | In the form |
|---|---|---|
| name | Required | Recipe name |
| image | Required | Images |
| description | Recommended | Description |
| author | Recommended | Author |
| datePublished | Recommended | Published |
| prepTime | Recommended | Prep time (minutes) |
| cookTime | Recommended | Cook time (minutes) |
| totalTime | Recommended | Total time (minutes) |
| recipeYield | Recommended | Servings |
| recipeIngredient | Recommended | Ingredients |
| recipeInstructions | Recommended | Steps |
| recipeCategory | Recommended | Category |
| recipeCuisine | Recommended | Cuisine |
| calories | Recommended | Calories per serving |
| keywords | Recommended | Keywords |
| aggregateRating | Recommended | Average rating |
Recipe JSON-LD example
This is what the builder produces from the example data. Paste it into the page's HTML, in the <head> or the body.
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Berliner Kartoffelsuppe",
"image": [
"https://example.com/images/kartoffelsuppe.jpg"
],
"description": "Thick potato soup with marjoram and smoked sausage.",
"author": {
"@type": "Person",
"name": "Jane Doe"
},
"datePublished": "2026-01-12",
"prepTime": "PT20M",
"cookTime": "PT40M",
"totalTime": "PT1H",
"recipeYield": "4",
"recipeCategory": "Soup",
"recipeCuisine": "German",
"nutrition": {
"@type": "NutritionInformation",
"calories": "420 calories"
},
"recipeIngredient": [
"1 kg floury potatoes",
"2 carrots",
"1 leek",
"4 smoked sausages",
"1 tsp dried marjoram"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"text": "Peel and dice the potatoes and carrots. Slice the leek."
},
{
"@type": "HowToStep",
"text": "Simmer the vegetables in 1.5 l stock for 30 minutes."
},
{
"@type": "HowToStep",
"text": "Mash roughly, add marjoram, and warm the sliced sausages in the soup."
}
]
}Recipe schema FAQ
- What format should cooking times use?
- Schema.org expects ISO 8601 durations: PT15M is 15 minutes, PT1H30M is an hour and a half. The builder asks for plain minutes and converts them, so 90 becomes PT1H30M.
- Can instructions be plain strings?
- Yes. Google accepts an array of strings or HowToStep objects. HowToStep is better when you need position, images, or section groupings.
- Should I add ratings to every recipe?
- Only if the page shows real aggregate ratings or individual reviews. Markup must match visible content.