> JSON-LD Recipe Example Code
Example JSON-LD schema markup RECIPE type validated with Google structured data testing tool, great for any website with a recipe.
- published
- modified
- size
- 2.1K
- path
- /recipe/
Last updated June 30, 2025 by Patrick Coombe
As with many schema types, there can be many variations of this type. You can learn more about this type straight from the horses mouth at Google’s documentation.
I ran across this recipe JSON-LD example in the wild today (June 30, 2025) while browsing Gist from Bill Blss:
{
"@type": "application\/tibls+json",
"itemListElement": [
{
"id": "16F17A14-BEAE-4F13-A2AE-69AB38127064",
"urlSource": "https:\/\/www.amateurgourmet.com\/blog\/2020\/12\/nancy-silvertons-epic-eggplant-lasagna.html",
"lastQueued": 0,
"updated": 978307200,
"created": 1750141629.5972791,
"lastCooked": 0,
"notes": [
{
"text": "Time ranges: roast 15–20 min (used 15 min), bake 35–45 min (used 35 min)."
},
{
"text": "Metric equivalents added."
},
{
"text": "Estimated total calories ~6,800 kcal: ~1,900 from olive oil, ~1,400 from cheese, ~1,600 from noodles, ~600 from milk, ~250 from eggplant, ~600 from flour and butter, ~200 from olives and tomato, ~140 from eggs, and ~100 from sugar and other minor ingredients. Based on typical values for raw ingredients; actual values may vary."
}
],
"servings": 9,
"urlHost": "",
"summary": "An incredibly involved but highly rewarding vegetarian lasagna good enough for the holidays.",
"name": "Nancy Silverton’s Epic Eggplant Lasagna",
"calories": 6800,
"steps": [
{
"text": "Preheat oven to 500 °F (260 °C).",
"sectionHeader": "Roast Eggplant"
},
{
"text": "Cut eggplants into 1‑inch cubes; toss with olive oil and spread on baking sheets.",
"sectionHeader": ""
},
{
"sectionHeader": "",
"time": 900,
"text": "Roast cubes on lowest rack (or oven floor) 15 min, toss, then roast 5‑20 min until dark brown all over."
},
{
"text": "Season roasted eggplant with 1 tsp salt.",
"sectionHeader": ""
},
{
"sectionHeader": "Tomato‑Eggplant Sauce",
"time": 300,
"text": "In a Dutch oven, cook garlic in remaining ¼ cup oil until soft (~5 min)."
},
{
"text": "Add tomatoes, sugar, and 1½ tsp salt; cook 5‑6 min until thickened.",
"sectionHeader": "",
"time": 300
},
{
"text": "Reserve ½ cup tomato sauce. Add eggplant, olives, za’atar, pepper and chile flakes; cook ~5 min.",
"sectionHeader": "",
"time": 300
},
{
"text": "Set sauce aside.",
"sectionHeader": ""
},
{
"text": "Reduce oven to 350 °F (175 °C).",
"sectionHeader": "Cheese Sauce"
},
{
"sectionHeader": "",
"time": 600,
"text": "In saucepan over medium‑low, cook butter, onion, chile pod and bay leaves ~10 min until onion is soft."
},
{
"time": 120,
"sectionHeader": "",
"text": "Whisk in flour and cook 2 min."
},
{
"time": 180,
"text": "Gradually add milk, whisking, bring to boil and simmer until thick enough to coat spoon (~3‑4 min).",
"sectionHeader": ""
},
{
"sectionHeader": "",
"text": "Strain sauce, reserve 1 cup bechamel; to remaining white sauce add cheeses and eggs, whisk to combine."
},
{
"text": "Bring large pot of water and 6 Tbsp salt to boil; prepare ice bath and towels.",
"sectionHeader": "Pasta & Assembly"
},
{
"text": "Boil noodles one minute less than package directions.",
"sectionHeader": ""
},
{
"sectionHeader": "",
"text": "Shock noodles in ice water, then dry on towels (oiled if sticking)."
},
{
"text": "Layer in 13×9\" pan: ½ cup tomato sauce → 3 noodles → half eggplant sauce → half cheese sauce → 3 noodles → remaining eggplant sauce → remaining cheese sauce → final noodles → reserved bechamel → 1 cup Parmesan.",
"sectionHeader": ""
},
{
"sectionHeader": "Bake & Broil",
"text": "Cut into 9‑12 pieces. Bake 35‑45 min until edges golden and puffed.",
"time": 2100
},
{
"sectionHeader": "",
"text": "Broil top until golden brown, watching carefully."
},
{
"time": 3600,
"text": "Cool at least 1 hour before serving.",
"sectionHeader": ""
}
],
"cookTime": 150,
"cookCount": 0,
"@type": "https:\/\/tibls.app\/types\/recipe",
"totalTime": 150,
"prepTime": 0,
"ingredients": [
{
"sectionHeader": "Eggplants & Tomato Sauce",
"text": "2 large eggplants (2 to 2½ lb \/ 900 g–1.1 kg)"
},
{
"text": "1 cup extra‑virgin olive oil (240 ml)",
"sectionHeader": ""
},
{
"sectionHeader": "",
"text": "3½ tsp kosher salt (≈18 g)"
},
{
"text": "½ cup garlic cloves (≈20), sliced",
"sectionHeader": ""
},
{
"text": "1 28‑oz can crushed San Marzano tomatoes (800 g)",
"sectionHeader": ""
},
{
"sectionHeader": "",
"text": "1½ tsp sugar (≈6 g)"
},
{
"sectionHeader": "",
"text": "½ cup pitted small black olives (≈75 g)"
},
{
"sectionHeader": "",
"text": "3 Tbsp za’atar (≈20 g)"
},
{
"text": "½ tsp freshly ground black pepper",
"sectionHeader": ""
},
{
"text": "¼ tsp red chile flakes",
"sectionHeader": ""
},
{
"text": "½ large Spanish onion, thinly sliced",
"sectionHeader": "Cheese Sauce"
},
{
"text": "4 Tbsp unsalted butter (≈56 g)",
"sectionHeader": ""
},
{
"sectionHeader": "",
"text": "1 arbol chile pod"
},
{
"text": "2 bay leaves",
"sectionHeader": ""
},
{
"text": "¼ cup all‑purpose flour (≈30 g)",
"sectionHeader": ""
},
{
"text": "1 qt whole milk (960 ml)",
"sectionHeader": ""
},
{
"sectionHeader": "",
"text": "2 tsp kosher salt (≈10 g)"
},
{
"text": "12 oz shredded low‑moisture mozzarella (≈340 g)",
"sectionHeader": ""
},
{
"sectionHeader": "",
"text": "8 oz fresh ricotta (≈225 g)"
},
{
"sectionHeader": "",
"text": "½ cup finely grated Parmesan (≈50 g)"
},
{
"text": "2 extra‑large eggs, beaten",
"sectionHeader": ""
},
{
"sectionHeader": "Pasta & Assembly",
"text": "6 Tbsp kosher salt (for pasta water)"
},
{
"text": "1 lb dried lasagna noodles (16 oz \/ 450 g)",
"sectionHeader": ""
},
{
"text": "1 cup finely grated Parmesan (for topping, ≈100 g)",
"sectionHeader": ""
}
]
}
]
}
Here is an example from 2024 from Google’s own documentation:
{
"@context": "https://schema.org/",
"@type": "Recipe",
"name": "Non-Alcoholic Piña Colada",
"image": [
"https://example.com/photos/1x1/photo.jpg",
"https://example.com/photos/4x3/photo.jpg",
"https://example.com/photos/16x9/photo.jpg"
],
"author": {
"@type": "Person",
"name": "Mary Stone"
},
"datePublished": "2018-03-10",
"description": "This non-alcoholic pina colada is everyone's favorite!",
"recipeCuisine": "American",
"prepTime": "PT1M",
"cookTime": "PT2M",
"totalTime": "PT3M",
"keywords": "non-alcoholic",
"recipeYield": "4 servings",
"recipeCategory": "Drink",
"nutrition": {
"@type": "NutritionInformation",
"calories": "120 calories"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "5",
"ratingCount": "18"
},
"recipeIngredient": [
"400ml of pineapple juice",
"100ml cream of coconut",
"ice"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"name": "Blend",
"text": "Blend 400ml of pineapple juice and 100ml cream of coconut until smooth.",
"url": "https://example.com/non-alcoholic-pina-colada#step1",
"image": "https://example.com/photos/non-alcoholic-pina-colada/step1.jpg"
},
{
"@type": "HowToStep",
"name": "Fill",
"text": "Fill a glass with ice.",
"url": "https://example.com/non-alcoholic-pina-colada#step2",
"image": "https://example.com/photos/non-alcoholic-pina-colada/step2.jpg"
},
{
"@type": "HowToStep",
"name": "Pour",
"text": "Pour the pineapple juice and coconut mixture over ice.",
"url": "https://example.com/non-alcoholic-pina-colada#step3",
"image": "https://example.com/photos/non-alcoholic-pina-colada/step3.jpg"
}
],
"video": {
"@type": "VideoObject",
"name": "How to Make a Non-Alcoholic Piña Colada",
"description": "This is how you make a non-alcoholic piña colada.",
"thumbnailUrl": [
"https://example.com/photos/1x1/photo.jpg",
"https://example.com/photos/4x3/photo.jpg",
"https://example.com/photos/16x9/photo.jpg"
],
"contentUrl": "https://www.example.com/video123.mp4",
"embedUrl": "https://www.example.com/videoplayer?video=123",
"uploadDate": "2018-02-05T08:00:00+08:00",
"duration": "PT1M33S",
"interactionStatistic": {
"@type": "InteractionCounter",
"interactionType": { "@type": "WatchAction" },
"userInteractionCount": 2347
},
"expires": "2019-02-05T08:00:00+08:00"
}
}
And a few more examples from 2023.
{
"@context": "https://schema.org",
"@type": "Recipe",
"author": "Jake Smith",
"cookTime": "PT2H",
"datePublished": "2015-05-18",
"description": "Your recipe description goes here",
"image": "http://www.example.com/images.jpg",
"recipeIngredient": [
"ingredient 1",
"ingredient 2",
"ingredient 3",
"ingredient 4",
"ingredient 5"
],
"interactionStatistic": {
"@type": "InteractionCounter",
"interactionType": "http://schema.org/Comment",
"userInteractionCount": "5"
},
"name": "Rand's Cookies",
"nutrition": {
"@type": "NutritionInformation",
"calories": "1200 calories",
"carbohydrateContent": "12 carbs",
"proteinContent": "9 grams of protein",
"fatContent": "9 grams fat"
},
"prepTime": "PT15M",
"recipeInstructions": "This is the long part, etc.",
"recipeYield": "12 cookies"
}
We recently came across another example via Google’s AMP (accelerated mobile project) via their Github account.
//Code borrowed from Google's AMP project Github
// The document referenced in mainEntityOfPage should be the same as the
// canonical link above.
//
// Also, please be aware that some platforms that use AMP HTML have
// further restrictions with regards to some schema components.
//
// For example:
//
// * The leader "image" referenced in the markup below must appear
// somewhere on the AMP HTML document itself.
//
// * The URL for that "image" must precisely match the src of the
// amp-img tag.
//
// * All marked-up URLs should be absolute.
//
// * The "logo" dimensions must not exceed 600x60.
{
"@context": "https://schema.org/",
"@type": "Recipe",
"mainEntityOfPage": "http://example.ampproject.org/recipe-metadata.html",
"name": "Grandma's Holiday Apple Pie",
"image": {
"@type": "ImageObject",
"url": "http://cdn.ampproject.org/leader.jpg",
"height": 200,
"width": 200
},
"author": {
"@type":"Person",
"name":"Carol Smith"
},
"datePublished": "2009-11-05",
"description": "This is my grandmother's apple pie recipe. I like to add a dash of nutmeg.",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.0",
"reviewCount": "35"
},
"prepTime": "PT30M",
"cookTime": "PT1H",
"totalTime": "PT1H30M",
"recipeYield": "1 9\" pie (8 servings)",
"nutrition": {
"@type": "NutritionInformation",
"servingSize": "1 medium slice",
"calories": "250 cal",
"fatContent": "12 g"
},
"ingredients": [
"apples",
"White sugar"
],
"recipeInstructions": "1. Cut and peel apples\n 2. Mix sugar and cinnamon. Use additional sugar for tart apples.\n...",
"publisher": {
"@type": "Organization",
"name": "Google",
"logo": {
"@type": "ImageObject",
"url": "http://cdn.ampproject.org/logo.jpg",
"width": 600,
"height": 60
}
}
}
Results
The really cool thing about this SERP result, is that you can actually get a 3 in 1 result: recipe markup, review markup, and website. Even cooler about the recipe markup type is that you can actually get a picture in the search results, which is quite rare in this day in age. If you are in the food / recipe niche, you’d be a fool not to structure your data.

