Recipe schema: required vs recommended properties
Google requires only a name and an image for Recipe markup, but the recommended properties — times, yield, ingredients, instructions and nutrition — are what make a recipe eligible for the richer results.
| Property | Status | Format | Notes |
|---|---|---|---|
| Recipe name | Required | Text | |
| Image URLs | Required | List | Photos of the finished dish, one URL per line. Several aspect ratios (16:9, 4:3, 1:1) are recommended. |
| Instructions › Step | Required | Text | |
| Author name | Recommended | Text | |
| Date published | Recommended | Date, YYYY-MM-DD | |
| Description | Recommended | Text | |
| Preparation time | Recommended | Duration, ISO 8601 | ISO 8601 duration: PT20M is 20 minutes, PT1H30M is 90 minutes. |
| Cooking time | Recommended | Duration, ISO 8601 | |
| Servings | Recommended | Text | |
| Category | Recommended | Text | |
| Cuisine | Recommended | Text | |
| Ingredients | Recommended | List | One ingredient per line, exactly as listed on the page. |
| Instructions | Recommended | Repeated group | |
| Total time | Optional | Duration, ISO 8601 | Use this instead of prep and cook time if you only know the total. |
| Keywords | Optional | Text | |
| Calories per serving | Optional | Text | Needs the servings field too. |
| Aggregate rating | Optional | Group | Only if the page shows real ratings. |
| Aggregate rating › Rating value | Optional | Number | |
| Aggregate rating › Number of ratings | Optional | Number |
Is Recipe markup eligible for a Google rich result?
Recipe markup can make a recipe eligible for a rich result with image, rating, cooking time and calories, and for the recipe carousel. Google requires a name and an image.
Status verified on 24 September 2026. Google’s documentation: https://developers.google.com/search/docs/appearance/structured-data/recipe
About Recipe structured data
Recipe is one of the structured data types that Google displays most richly: a result can show a photo, a star rating, the cooking time and the calories, and eligible recipes can appear in a carousel. That makes complete, accurate markup worthwhile.
Where a recipe has a video, marking it up as a VideoObject inside the Recipe can help. Keep the markup a faithful summary of the page: ingredients and steps should be what visitors read.
Common Recipe schema mistakes
- Writing durations in plain text such as “1 hour 30 minutes”. Times must be ISO 8601 durations: PT1H30M. PT20M is twenty minutes.
- Adding calories without servings. Calories are per serving, so Google needs recipeYield to interpret the number.
- Listing the ingredients or steps in the markup but not on the page. Everything in the markup should be visible to visitors.
- Using one long block of text for the instructions. Splitting it into HowToStep entries makes each step clear.
- Marking up something that is not a recipe — a restaurant menu, a list of recipes on a category page, or a general cooking article.
- Adding ratings that visitors cannot see, or that you wrote yourself.
Recipe schema example
A complete recipe with two images, six ingredients, four steps, times, calories and a rating, as generated on this page, is shown below.
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Chicken Karahi",
"image": [
"https://example.com/img/chicken-karahi-16x9.jpg",
"https://example.com/img/chicken-karahi-1x1.jpg"
],
"author": {
"@type": "Person",
"name": "Amina Rahman"
},
"datePublished": "2026-02-10",
"description": "A quick, tomato-based karahi with ginger, green chilli and fresh coriander.",
"prepTime": "PT20M",
"cookTime": "PT40M",
"recipeYield": "4 servings",
"recipeCategory": "Dinner",
"recipeCuisine": "Pakistani",
"keywords": "chicken, karahi, one-pot",
"recipeIngredient": [
"1 kg chicken, cut into pieces",
"6 ripe tomatoes, chopped",
"3 tbsp oil",
"2 tbsp ginger-garlic paste",
"4 green chillies",
"Fresh coriander to serve"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"text": "Heat the oil in a wok and fry the ginger-garlic paste for one minute."
},
{
"@type": "HowToStep",
"text": "Add the chicken and cook on high heat until it changes colour."
},
{
"@type": "HowToStep",
"text": "Add the tomatoes and chillies, cover and cook for 30 minutes, stirring occasionally."
},
{
"@type": "HowToStep",
"text": "Finish with coriander and serve hot."
}
],
"nutrition": {
"@type": "NutritionInformation",
"calories": "320 calories"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.8,
"ratingCount": 210
}
}How to use it
- Fill in the recipe details — the form marks each field Required, Recommended or Optional.
- Watch the JSON-LD and the validation list update as you type.
- Copy the JSON-LD, the HTML script tag or the Next.js snippet, or download the .json file.
- Paste it into your page, then check it with Google’s Rich Results Test.
Frequently asked questions
Which properties are required for Recipe schema?
A name and an image. Author, date published, description, times, yield, ingredients, instructions, category, cuisine, calories, rating and video are recommended.
How do I write cooking time in schema?
As an ISO 8601 duration: PT15M for 15 minutes, PT1H for an hour, PT1H30M for an hour and a half. The generator checks the format.
Do I need both prep time and cook time?
Google recommends prepTime and cookTime together, or a totalTime on its own. Use whichever you can state accurately.
How are instructions marked up?
As a list of HowToStep objects, each with the text of one step. You can group steps into sections, and steps can include images.
Does Recipe markup guarantee a rich result?
No. It makes the recipe eligible; Google decides whether to show the rating, image and times.
Valid markup makes a page eligible for a rich result; it does not guarantee one. Google decides what to show. Test your page with Google’s Rich Results Test before relying on it.