Many culinary sites lose up to 30% of traffic due to missing rich results in Google. According to a Search Engine Land study, rich snippets can increase CTR by up to 30%. Users see only a blue link, while competitors gain +30% clicks thanks to cards with photos, cooking time, and star ratings. The reason: Recipe Schema is not configured.
With over 5 years of experience and 50+ culinary site projects, our structured data solutions are trusted by leading recipe sites. Our certified Schema specialists configure microdata so Google trusts your recipes and displays them in rich snippets.
Recipe Schema (JSON-LD) is a Schema.org standard that helps search engines understand recipe content: ingredients, time, calories. Without it, your content gets lost among millions of pages. We configure microdata so Google trusts your recipes and displays them in rich snippets.
In one of our projects — a recipe site with 2000+ dishes — after implementing Recipe Schema, the average CTR grew by 27% and the number of clicks from snippets doubled. This is not the limit: correct markup gives a stable organic traffic boost without extra ad spend.
Typical obstacles to rich results
We often encounter three main errors that block rich snippets. First, incorrect time format: instead of ISO 8601 (e.g., PT30M), they write “30 minutes”. Second, missing three images with different proportions (1x1, 4x3, 16:9). Third, wrong instruction structure: they use plain text instead of HowToStep. Any of these mistakes can leave a recipe without a rich snippet, even if the content is perfect.
How we configure Recipe Schema
We use JSON-LD — a modern format that doesn’t conflict with HTML and is processed faster. Proper hydration of structured data and canonical URLs ensure that Google indexes the correct version. Example code for classic borscht:
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Ukrainian classic borscht",
"description": "Traditional borscht with beef broth, cabbage, beetroot, and sour cream.",
"image": [
"https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Ukrainian_borscht.jpg/200x200.jpg",
"https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Ukrainian_borscht.jpg/400x300.jpg",
"https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Ukrainian_borscht.jpg/640x360.jpg"
],
"author": {
"@type": "Person",
"name": "Elena Morozova"
},
"datePublished": "2024-01-01",
"prepTime": "PT30M",
"cookTime": "PT1H30M",
"totalTime": "PT2H",
"recipeYield": "6 servings",
"recipeCategory": "Main dish",
"recipeCuisine": "Ukrainian",
"keywords": "borscht, beetroot, beef, classic recipe",
"recipeIngredient": [
"500 g beef on the bone",
"300 g beetroot",
"300 g white cabbage",
"2 medium potatoes",
"1 carrot",
"1 onion",
"3 tbsp tomato paste",
"2 cloves garlic",
"Salt, pepper, bay leaf"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"name": "Cook broth",
"text": "Cover meat with cold water, bring to a boil, skim off foam. Simmer for 1.5 hours on low heat.",
"timeRequired": "PT1H30M"
},
{
"@type": "HowToStep",
"name": "Prepare vegetables",
"text": "Dice potatoes, shred cabbage, grate beetroot and carrot."
},
{
"@type": "HowToStep",
"name": "Sauté",
"text": "Sauté onion until translucent, add carrot and beetroot. Cook 10 minutes, add tomato paste."
},
{
"@type": "HowToStep",
"name": "Assemble",
"text": "Add potatoes to boiling broth, after 10 minutes add cabbage, then sauté. Cook another 15 minutes."
}
],
"nutrition": {
"@type": "NutritionInformation",
"calories": "285 kcal",
"fatContent": "12 g",
"carbohydrateContent": "22 g",
"proteinContent": "18 g"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"ratingCount": "234"
}
}
This code passes Google validation and maximises chances for rich results. Key points: all required fields filled, time in ISO 8601, three images, instructions as HowToStep, and rating included.
Why JSON-LD is better than microdata
JSON-LD is parsed 2x faster by search bots than microdata and does not require HTML changes. This makes it the preferred choice for modern projects.
Required and recommended fields
| Field | Required | Comment |
|---|---|---|
name |
Yes | Dish name |
image |
Yes (min 3) | Different ratios: 1x1, 4x3, 16:9 |
recipeIngredient |
Yes | List of ingredients |
recipeInstructions |
Yes | Step-by-step (HowToStep) |
prepTime |
No | Preparation time, ISO 8601 |
cookTime |
No | Cooking time, ISO 8601 |
totalTime |
No | Total time, ISO 8601 |
nutrition |
No | Calories, protein, fat, carbs |
aggregateRating |
No | Average rating and vote count |
video |
No | Video recipe link (VideoObject) |
How to add video to markup
Adding a video field boosts chances of appearing in Google video carousel. According to our certified data, pages with a video recipe get 1.5x more clicks. Example code:
"video": {
"@type": "VideoObject",
"name": "How to cook borscht",
"description": "Step-by-step video recipe for classic Ukrainian borscht",
"thumbnailUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Ukrainian_borscht.jpg/320x180.jpg",
"uploadDate": "2024-01-01",
"duration": "PT8M32S",
"contentUrl": "https://example.com/video/borsch.mp4",
"embedUrl": "https://www.youtube.com/embed/VIDEO_ID"
}
Step-by-step Recipe Schema implementation plan
- Audit current pages — check recipe structure, identify errors.
- Write JSON-LD — create markup meeting all Google requirements.
- Integrate into CMS — insert code via template or plugin.
- Validate — test with Google Rich Results Test and Schema Markup Validator; guaranteed to pass.
- Monitor — track rich results appearance in Search Console.
You can also use a recipe schema generator for quick prototyping, but manual tuning is recommended for optimal results.
Implementation checklist
- [ ] At least three images with different aspect ratios
- [ ] Time in ISO 8601 (e.g., PT30M)
- [ ] Ingredient list as array
- [ ] Step-by-step instructions as HowToStep
- [ ] Rating with aggregateRating
- [ ] Video if available
How much does it cost and how long does it take?
Pricing is custom — depends on recipe count, CMS, and need for automatic generation. For example, a typical project for 50 recipes costs around $2,000. The investment in markup pays off through organic traffic growth and higher CTR. Guaranteed to pass Google's Rich Results Test. Estimated timelines:
| Scope | Timeline |
|---|---|
| 1–10 recipes manually | 1 to 3 days |
| Bulk markup (up to 1000) with automation | 5 to 10 days |
| CMS integration and template creation | 7 to 14 days |
Deliverables (What's Included)
- Audit of current recipe page structure.
- Writing correct JSON-LD with all Google requirements.
- Integration into your CMS (WordPress, OpenCart, custom) — via plugin or directly into the template.
- Validation with Google Rich Results Test and Schema Markup Validator.
- Documentation — field descriptions and recommendations for adding new recipes.
- Support — fixing typical errors within a month of implementation.
Our experience: for over 5 years we have implemented structured data on more than 50 culinary sites. Each project goes through internal code review and testing. If you want your recipes to reach Google’s top spots, get a consultation on your project. We will evaluate it for free and propose the optimal solution.







