Why You Are Here
Recipe is one of the most valuable structured data types still fully supported by Google, and it is worth saying that plainly because several once-prominent types are not.
FAQ rich results were retired in May 2026. HowTo rich results were retired in 2023. Recipe remains one of the most visually prominent results Google displays.
A correctly marked-up recipe becomes eligible for a card showing the dish photograph, a star rating, the cooking time, and the calorie count, sitting above or alongside ordinary blue links. On a query where every competing result is a plain text listing, that is a substantial difference in how much attention the result attracts.
The first situation is a food blog or recipe site with no plugin handling structured data, or one whose plugin output is incomplete.
The second is fixing eligibility. Your recipes are marked up but not appearing as rich results, and you need to work out which properties are missing.
The third is a custom or headless build where the markup has to be written deliberately.
What This Tool Does
The Recipe Schema Generator builds valid Recipe JSON-LD from a simple form.
Enter the recipe name, image, ingredients, instructions, preparation and cooking times, yield, and nutrition details, and the tool assembles correctly structured JSON-LD with the script tag included. Copy it and paste it into your page.
Recipe Earns Rich Results on Three Surfaces
Most guides describe only the search result card. Recipe markup can appear in three distinct places, and they have different requirements.
| Surface | What appears | Extra requirement |
|
Google Search |
Card with photo, star rating, cook time, calories |
Recipe properties |
|
Google Images |
Badge on the thumbnail showing recipe name and cook time |
Recipe properties |
|
Host carousel |
Horizontal carousel of several recipes from your site |
ItemList markup in addition |
It shows a scrollable row of recipes from a single site when someone searches a recipe category, and it is a large amount of search real estate for one domain. Earning it requires wrapping your recipes in ItemList markup on a listing page, in addition to the Recipe markup on each individual recipe page. Recipe properties alone will not produce it.
Required and Recommended Properties
Google requires only two properties. That is enough for ELIGIBILITY, but not enough for a result worth having.
| Property | Status | Notes |
|
name |
REQUIRED |
The recipe title |
|
image |
REQUIRED |
High resolution, multiple aspect ratios preferred |
|
recipeIngredient |
Strongly recommended |
One entry per ingredient, quantity included |
|
recipeInstructions |
Strongly recommended |
Use HowToStep objects rather than plain text |
|
totalTime |
Strongly recommended |
ISO 8601 format |
|
prepTime |
Recommended |
Pair with cookTime |
|
cookTime |
Recommended |
Pair with prepTime |
|
recipeYield |
Recommended |
Servings or quantity produced |
|
nutrition |
Recommended |
calories is the field that appears on the card |
|
aggregateRating |
Recommended |
Genuine user ratings only |
|
author |
Recommended |
Person object |
|
datePublished |
Recommended |
ISO 8601 |
|
description |
Recommended |
Short summary |
|
recipeCategory |
Optional |
Dessert, main course |
|
recipeCuisine |
Optional |
Italian, Thai |
|
keywords |
Optional |
Descriptive terms, not a keyword dump |
|
suitableForDiet |
Optional |
Schema.org diet values |
|
video |
Optional |
Not needed for any rich result surface |
Instructions — Use HowToStep, Not Plain Text
recipeInstructions accepts a plain string, but structuring it as HowToStep objects is considerably better. Each step becomes individually identifiable, which is what allows step-by-step extraction by search engines and AI systems.
"recipeInstructions": [
{
"@type": "HowToStep",
"name": "Prepare the dough",
"text": "Combine the flour, salt, and water until a dough forms."
},
{
"@type": "HowToStep",
"name": "First rise",
"text": "Cover and leave at room temperature for four hours."
}
]
Example Output
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Classic Sourdough Loaf",
"image": [
"https://example.com/images/sourdough-1x1.jpg",
"https://example.com/images/sourdough-4x3.jpg",
"https://example.com/images/sourdough-16x9.jpg"
],
"author": { "@type": "Person", "name": "Jane Smith" },
"datePublished": "2026-03-14",
"description": "A slow-fermented sourdough with an open crumb.",
"prepTime": "PT30M",
"cookTime": "PT45M",
"totalTime": "PT8H15M",
"recipeYield": "1 loaf",
"recipeCategory": "Bread",
"recipeCuisine": "European",
"nutrition": {
"@type": "NutritionInformation",
"calories": "180 calories",
"servingSize": "1 slice"
},
"recipeIngredient": [
"500g strong white bread flour",
"350ml water",
"100g active sourdough starter",
"10g fine sea salt"
],
"recipeInstructions": [
{ "@type": "HowToStep", "name": "Mix",
"text": "Combine flour and water and rest for one hour." },
{ "@type": "HowToStep", "name": "Add starter and salt",
"text": "Work the starter and salt through the dough." },
{ "@type": "HowToStep", "name": "Bulk ferment",
"text": "Leave five hours, folding every forty-five minutes." },
{ "@type": "HowToStep", "name": "Shape and prove",
"text": "Shape into a round and prove in a banneton for two hours." },
{ "@type": "HowToStep", "name": "Bake",
"text": "Bake at 230C covered for thirty minutes, then uncovered." }
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"ratingCount": "128"
}
}
Duration Format
Times use ISO 8601 duration format, which trips people up consistently.
| Time | Value |
|
15 minutes |
PT15M |
|
45 minutes |
PT45M |
|
1 hour |
PT1H |
|
1 hour 30 minutes |
PT1H30M |
|
8 hours 15 minutes |
PT8H15M |
P opens the duration and T separates date units from time units. The T is not optional: P30M means thirty MONTHS, not thirty minutes.
Ratings — The Rule With Real Consequences
aggregateRating produces the stars on the card, which makes it the most visually valuable property. It is also the one with the sharpest penalty attached.
That means ratings must come from genuine reviews left by real people. You cannot rate your own recipe. You cannot invent a plausible-looking rating and count. The rating shown in the markup must match what is visible on the page. And if your page displays individual reviews, the markup must include all of them, not a flattering selection.
Do Not Use Recipe for Non-Food Content
Google cites a woodworking site that labelled its instructions as recipes as an example of a violation. The word recipe is used loosely in everyday speech for any set of instructions. In Schema.org it means food or drink specifically.
| Your Content | Correct Type |
|
Cooking or baking instructions |
Recipe |
|
Cocktail or drink preparation |
Recipe |
|
Woodworking or craft project |
HowTo |
|
Repair or assembly guide |
HowTo |
|
Software tutorial |
HowTo |
|
A formula or method described in an article |
Article |
Common Mistakes to Avoid
Google explicitly states that ratings not left by actual users may result in a manual action, which removes rich result eligibility across the whole site until a reconsideration request succeeds. A recipe card displays perfectly well without a star rating. Adding aggregateRating before you have genuine reviews risks the entire feature to gain one visual element.
Providing prepTime without cookTime, or either without totalTime, leaves the timing incomplete and is commonly flagged by validators. Either give prepTime and cookTime as a pair, or give totalTime on its own. If you supply all three, make sure the total genuinely reflects the sum, including any resting or proving time that falls outside active preparation.
recipeInstructions accepts a plain string, so a single paragraph containing every step validates without complaint. But nothing can then identify where one step ends and the next begins, which defeats step-by-step extraction by both search engines and AI systems. Use an array of HowToStep objects instead, with one object per step.
Quick Reference
| Item | Detail |
|
Type |
Recipe |
|
Rich result |
Fully supported |
|
Surfaces |
Search, Google Images, host carousel |
|
Required |
name, image |
|
Card details from |
Image, rating, times, calories |
|
Instructions |
Array of HowToStep |
|
Grouping |
HowToSection |
|
Times |
ISO 8601, PT45M for 45 minutes |
|
Watch the T |
P45M means 45 months |
|
Ratings |
Genuine user reviews only |
|
Fake ratings |
Risk a manual action |
|
Non-food content |
Use HowTo instead |
|
Video |
Optional, not needed for any surface |
|
Host carousel |
Needs ItemList as well |
