Free Recipe Schema Generator

Fill in the facts visible on your page, copy the Recipe JSON-LD, and validate it before you publish. The guide, examples, and FAQs are below the tool. Generate this schema with AI

Type to filter 121 supported schema types.

Schema workflow

Use only facts a visitor can verify on the page, then validate the JSON-LD before publishing.

Google requires only the dish name and an image. Ingredients, steps, times, yield, and ratings are recommended, and every value should match what the recipe page shows.

Google recommends several high-resolution images (at least 50,000 pixels, width × height) in 16:9, 4:3, and 1:1 crops. Googlebot must be able to crawl them.

Google asks for servings as just a number. Add another unit, such as a cookie count, as a second yield.

Required

  • Visible Recipe content
  • Canonical page URL
  • Clear page owner/publisher
  • Fields that match the visible page

Recommended

  • A representative image when the schema supports it
  • SameAs or related links when visible
  • Validation before publishing

Avoid

  • Adding properties that are not visible
  • Copying example URLs into production
  • Skipping Google and Schema.org validation

Schema stacks

Use Recipe schema in a stack

Complete JSON-LD bundles that combine Recipe with the other types a real page needs. Browse all stacks

  • Recipe + HowTo Stack

    Recipe pages paired with HowTo steps, FAQs, and breadcrumb context for cooking guides.

Next step

Validate, repair, and publish clean structured data.

Check the generated JSON-LD against the visible page, then run both SwiftSchema and external validators before publishing.

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 Generator

Why 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.

PropertyGoogle saysNotes
nameRequiredThe name of the dish. Use Recipe only for a dish, not for things like a face scrub or party ideas.
imageRequiredImages of the finished dish. See the image rules below.
recipeIngredientRecommendedOne ingredient per entry, with only what's needed to make the dish.
recipeInstructionsRecommendedHowToStep items (or HowToSection groups). Plain text works, but Google has to guess where steps break.
prepTime, cookTimeRecommendedISO 8601 durations. Always give them together.
totalTimeRecommendedUse this, or both prepTime and cookTime.
recipeYieldRecommendedServings as just a number. Required if you add nutrition per serving.
nutrition.caloriesRecommendedCalories per serving, such as "520 calories".
recipeCategory, recipeCuisineRecommendedThe meal or course, and the region.
keywordsRecommendedComma-separated terms that aren't your category or cuisine.
author, datePublished, descriptionRecommendedPerson or Organization, the publish date, and a short summary.
aggregateRatingRecommendedFollows the review snippet rules. Only mark up ratings the page shows.
videoRecommendedA 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 image doesn'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 HowToSection only when the recipe really has parts, such as crust and filling. Most recipes don't. Each section needs a name and its HowToStep items in itemListElement.
  • 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 requires recipeYield with the number of servings.
  • Times in ISO 8601. PT20M is 20 minutes, PT1H30M is an hour and a half, P1DT2H is a day and two hours. Use totalTime, or both prepTime and cookTime. 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

  1. 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.

  2. 02

    Add the author, publish date, and a short description that match the page.

  3. 03

    Enter prep and cook times, or a total time, as ISO 8601 durations.

  4. 04

    Enter servings as a number. Add a second yield, such as a cookie count, if the page shows one.

  5. 05

    List the ingredients one per row, then the steps without “Step 1” labels. Turn on sections only if the recipe has parts.

  6. 06

    Add nutrition, ratings, and video only if the page shows them, then fix any warnings.

  7. 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.

Generate Recipe JSON-LD

Common mistakes

MistakeFix
Treating ingredients and instructions as the only fields that matterGoogle requires name and image. Recipe markup without an image isn't eligible.
One small imageAdd 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 countAdd ratingCount, and only if the ratings appear on the page.
A video without a thumbnail or upload dateAdd thumbnailUrl and uploadDate, or leave the video out.
Using Recipe for something that isn't a dishRecipe 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, and image.
  • The ingredients and steps on the page appear in the same order as recipeIngredient and recipeInstructions.
  • The times and servings shown match prepTime, cookTime, totalTime, and recipeYield.
  • 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 dateModified if 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

  • name
  • image

Recommended properties

  • recipeIngredient
  • recipeInstructions
  • description
  • author
  • datePublished
  • prepTime
  • cookTime
  • totalTime
  • recipeYield
  • recipeCategory
  • recipeCuisine
  • keywords
  • nutrition.calories
  • aggregateRating
  • video
Recipe JSON-LD with the properties Google recommends
Validate
{
  "@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
  }
}
Steps grouped with HowToSection
Validate
{
  "@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."
        }
      ]
    }
  ]
}
Recipe with a video
Validate
{
  "@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"
  }
}
ItemList on a recipe summary page (host carousel)
Validate
{
  "@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?Show

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?Show

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?Show

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?Show

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?Show

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?Show

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.

Related types

Browse all schema types

References