My Tool Studio
Schema Markup·5 min read

Recipe Schema: A Practical Guide for Food Blogs

Recipe results are one of the few rich results Google still shows widely: a photo, a star rating, the cook time and sometimes calories, right in the search page. All of it comes from Recipe structured data on the page. This guide walks through the fields that matter, how times and steps are written, the mistakes that cost food blogs their rich results, and a worked example. The Recipe Schema Generator on this site builds the block from a form, or loads the markup your plugin already outputs so you can fix it.

{"@type": "Recipe","name": "…","url": "…"}RICH RESULTRecipe

What Recipe markup can earn

Why food sites still care about structured data.

Many rich results have been cut back since 2023. FAQ and HowTo results are gone, and several others shrank. Recipes are different. Google still shows recipe rich results with an image, rating and time, groups recipes into carousels, and uses recipe data in its guided cooking and recipe filters. For a food blog, that makes Recipe markup the single most useful block on the page.

Markup does not guarantee a rich result. Google decides what to show for each search, and the page itself has to be a genuine recipe with the content visible. But without the markup, the page is not eligible at all.

The two required fields and the ones that do the work

Name and image are the floor, not the goal.

Google requires only two properties: name, the dish's title, and image, a picture of the finished dish. Everything else is recommended. In practice the recommended fields decide how rich the result can be, so treat them as part of the job.

The ones that show up most in results are aggregateRating for the stars, totalTime or prepTime and cookTime for the clock, recipeYield for servings, and nutrition.calories. recipeIngredient and recipeInstructions matter for Google's recipe features beyond the snippet, and author and datePublished connect the recipe to a real person and a date.

Images deserve extra care. Google asks for several high-resolution crops, in 16x9, 4x3 and 1x1 ratios, each at least 50,000 pixels when you multiply width by height. The generator takes one URL per row and writes two or more as an array, so you can list all three crops.

Times, yield and nutrition done right

Small formats that trip up hand-written markup.

Times must be ISO 8601 durations. Fifteen minutes is PT15M and an hour and a half is PT1H30M. Writing 15 min or 1.5 hours in the markup breaks the field. In the generator you type minutes and it writes the duration, and if you leave total time empty it adds prep and cook time for you.

Google asks for prepTime and cookTime together, or totalTime on its own. Filling all three is fine as long as the total is not shorter than the other two combined; the tool warns when it is.

Calories are read per serving, which means Google needs recipeYield to make sense of them. Enter the number of servings, and a yield text such as 12 cookies if that describes the batch better. Enter nutrition as plain numbers and the tool adds the units Google expects: calories, g for fat, carbohydrates, fiber, protein and sugar, and mg for sodium and cholesterol.

Ingredients and steps

Keep the data as clean as the page.

Each ingredient is one line of text, such as 600 g baby potatoes, halved. Include only the ingredient itself, not headings like For the sauce or notes like see below. Paste your list into the generator one per line; bullets and dashes at the start of a line are removed.

Steps are HowToStep items with the instruction as text. Google asks you to leave out labels such as Step 1, since the order already numbers them. A step can also carry a short name, an image and a URL that points to an anchor for that step on the page, which lets Google link straight to it.

Longer recipes often have parts, such as the dough and the filling. Give those steps a section name in the generator and consecutive steps with the same name are grouped into a HowToSection, which is the structure Google documents for multi-part recipes.

A worked example

One-pan lemon garlic chicken.

Load the example in the tool to see this block. The recipe has a name, a one-line description, three image crops, an author, a publish date, category Dinner, cuisine Mediterranean, four servings, 15 minutes of prep and 40 of cooking, a gluten-free diet label, seven ingredients and four steps.

The output reads, in short: {"@type": "Recipe", "name": "One-Pan Lemon Garlic Chicken", "image": [three URLs], "recipeYield": ["4", "4 servings"], "prepTime": "PT15M", "cookTime": "PT40M", "totalTime": "PT55M", "suitableForDiet": "https://schema.org/GlutenFreeDiet", "recipeIngredient": [seven lines], "recipeInstructions": [four HowToStep items], "nutrition": {"calories": "520 calories", ...}}.

The Validation panel then lists what is still recommended, here an aggregateRating and a video. Add them only if the page really has reader ratings and a recipe video.

Common mistakes on recipe pages

Why valid markup still misses out.

These come up again and again when recipe sites are audited.

  • Times written as plain text instead of ISO 8601 durations.
  • Only one small image, or an image of the ingredients rather than the finished dish.
  • Calories without a yield, so Google cannot tell what the number refers to.
  • Step text that repeats the step name or starts with Step 1.
  • Ratings in the markup that readers cannot see on the page, or ratings copied from another site.
  • A roundup page marked up as one Recipe; roundups should use an ItemList that points to each recipe.
  • A plugin block and a hand-written block on the same page that disagree about times or servings.

Fixing the markup your plugin already outputs

Start from what is there.

Most food blogs run a recipe plugin that writes Recipe JSON-LD. You rarely need to replace it; more often a few fields are missing or wrong. Paste the page URL into Import existing JSON-LD, or run it through the Schema Markup Extractor and copy the Recipe block, and the generator loads every field it can read, including sections, nutrition and video.

Fix what the Validation panel flags, then either update the plugin settings to match or replace the plugin's block with yours. Keep only one Recipe block per recipe. For category pages that list many recipes, build an ItemList with the ItemList Schema Generator, choosing Recipe as the item type, so the page can join a recipe carousel.

Try it now

Open Recipe Schema Generator

The tool is one click away. No sign up, no upload, no payment.

Open Recipe Schema Generator