/ โ† Rich Snippet Fixes / Recipe Carousel
In this guide
  1. Two different carousels
  2. What each recipe page needs before any carousel
  3. Images that work in a carousel
  4. ItemList markup for category and collection pages
  5. Roundup posts with several full recipes
  6. The fix, step by step
  7. Platform notes
  8. Keeping recipes in carousels
  9. Questions and answers

Two different carousels

"Recipe carousel" is used for two things that behave differently, and the fix depends on which one you are missing from.

Mixed recipe carouselYour-site carousel
What it looks likeA row of recipes from several sites for a dish searchA row of recipes all from one site, shown under or with that site's listing
Where it appearsMainly mobile searchMobile search
What earns a placeRecipe markup on the individual recipe page, good images, and Google choosing the page for the queryRecipe markup on each detail page plus ItemList markup on a page that lists them
What you controlEligibility and quality of each recipe pageEligibility of each page and the list structure

Google's documentation calls the second kind a host carousel and supports it for a small set of content types, recipes among them. It is built from the ItemList markup described below. The mixed carousel does not use ItemList at all; it is assembled from individual recipe pages Google already considers eligible and relevant.

Both are shown mainly on mobile. If you are checking on a desktop browser you may simply never see them. Use a phone, or the device toolbar in your browser's developer tools, when you look.

๐Ÿ’ก The Rich Snippets Suite reports whether a page is eligible for recipe results and previews how the result could look. For field-by-field errors inside the Recipe block, such as bad durations or ingredient formatting, see fixing Recipe schema errors; this page assumes those are already clean.

What each recipe page needs before any carousel

Neither carousel can include a recipe whose own page is not eligible. At the page level, Google requires a name and an image for the Recipe, and recommends much more. For carousel cards, a few of the recommended properties matter more than the rest because they are what the card can display or use to judge the recipe:

Two structural rules trip up food sites more than missing fields:

  1. One recipe, one page, one Recipe block. A page for a single dish should describe that dish. Marking up the main recipe plus "you might also like" suggestions as separate Recipe items confuses which recipe the page is about.
  2. The recipe must be on the page. A page that shows a photo and a link to a PDF, a video only, or the recipe behind a login is not a full recipe page in Google's eyes, however complete the markup looks.

Images that work in a carousel

Image problems are the most common reason an otherwise eligible recipe never appears in a carousel, because the card cannot be drawn without one. Google's recipe guidance recommends several high-resolution images, and asks that each image has at least 50,000 pixels when width and height are multiplied, in the aspect ratios 16:9, 4:3 and 1:1. Supplying all three lets Google crop to whatever the card needs without cutting off the food.

"image": [
  "https://example.co.uk/img/lemon-drizzle-16x9.jpg",
  "https://example.co.uk/img/lemon-drizzle-4x3.jpg",
  "https://example.co.uk/img/lemon-drizzle-1x1.jpg"
]

Beyond size and shape, the images must be reachable by Google:

โš ๏ธ Image CDNs that resize on the fly sometimes serve a tiny thumbnail when the requester does not send the headers the CDN expects. Fetch each image URL from the markup in a plain browser tab, check its real dimensions, and confirm it is the large version.

ItemList markup for category and collection pages

For the your-site carousel, Google needs a page that lists your recipes and describes that list with ItemList. The simplest and most common pattern is a summary page, such as a category page for "Traybakes", that links to separate recipe pages. The ItemList on the summary page contains a ListItem for each recipe with a position and the url of the recipe page. The Recipe markup itself stays on each recipe page.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "name": "Traybake recipes",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "url": "https://example.co.uk/recipes/lemon-drizzle-traybake/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "url": "https://example.co.uk/recipes/chocolate-flapjack/"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "url": "https://example.co.uk/recipes/millionaires-shortbread/"
    }
  ]
}
</script>

Points that matter:

Roundup posts with several full recipes

Some posts contain several complete recipes on one page, such as "Five easy weeknight soups" with ingredients and method for each. That page is not a single recipe page, and marking it up as one Recipe is wrong. Google supports an all-in-one list for this case: the ItemList holds each full Recipe inside its ListItem, and each item's url points to an anchor on the same page where that recipe starts.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "url": "https://example.co.uk/weeknight-soups/#leek-and-potato",
      "item": {
        "@type": "Recipe",
        "name": "Leek and potato soup",
        "image": ["https://example.co.uk/img/leek-potato-1x1.jpg"],
        "totalTime": "PT40M",
        "recipeIngredient": ["3 leeks", "2 potatoes", "1 litre vegetable stock"],
        "recipeInstructions": [
          {"@type": "HowToStep", "text": "Soften the sliced leeks in butter for 10 minutes."},
          {"@type": "HowToStep", "text": "Add the diced potatoes and stock and simmer for 20 minutes, then blend."}
        ]
      }
    },
    {
      "@type": "ListItem",
      "position": 2,
      "url": "https://example.co.uk/weeknight-soups/#tomato-and-lentil",
      "item": {
        "@type": "Recipe",
        "name": "Tomato and red lentil soup",
        "image": ["https://example.co.uk/img/tomato-lentil-1x1.jpg"],
        "totalTime": "PT35M",
        "recipeIngredient": ["1 onion", "150g red lentils", "400g chopped tomatoes"],
        "recipeInstructions": [
          {"@type": "HowToStep", "text": "Fry the onion until soft, then add lentils, tomatoes and 800ml water."},
          {"@type": "HowToStep", "text": "Simmer for 25 minutes until the lentils collapse, then season."}
        ]
      }
    }
  ]
}
</script>

Each anchor, such as #leek-and-potato, must exist as an id on the heading where that recipe begins. If the post only lists recipes with a photo and a link to each full recipe elsewhere on your site, use the summary pattern from the previous section instead; the all-in-one pattern is only for recipes that are complete on the page.

The fix, step by step

Step 1

Work out which carousel you are missing from

Search for a few of your dishes on a phone, or with mobile emulation in developer tools, and note what appears: a mixed row from several sites, a row from a single competitor, or nothing. If you want to appear in the mixed row, the work is on individual recipe pages. If you want a row of your own recipes, you also need ItemList on your category or roundup pages. Many food sites need both, so note which pages serve which aim.

Step 2

Make every recipe page eligible on its own

Run a sample of recipe pages from each template through the Rich Snippets Suite and the Rich Results Test. Each should have exactly one Recipe block with name and image, plus the recommended times, ingredients, instructions, author and, where readers have really rated it, aggregateRating. Remove Recipe markup from related-recipe widgets on the page. Confirm the full recipe is visible on the page itself, not behind a login, in a PDF or in a video only.

Step 3

Give Google large, crawlable images in three shapes

For each recipe, list three image URLs in the markup: a 16:9, a 4:3 and a 1:1 crop of a real photo of the finished dish, each at least 50,000 pixels in area. Open every URL directly to confirm it returns the large file with a 200 status. Check robots.txt does not block the upload or CDN path, and make sure lazy-loading never puts a placeholder address into the markup. Keep image URLs stable once published.

Step 4

Add ItemList markup to collection pages

On category, cuisine and collection pages that link to separate recipe pages, add an ItemList whose itemListElement contains one ListItem per recipe shown, each with a position and the full url of the recipe page. Generate it from the same query that builds the visible grid, so the order and contents always match. Do not add Recipe markup to the collection page, and do not include items that are not recipes on your own site.

Step 5

Handle roundup posts with an all-in-one list

For posts that contain several complete recipes on one page, replace any single Recipe block with an ItemList in which each ListItem has a position, a url ending in an anchor for that recipe, and an item holding the full Recipe. Add a matching id to the heading where each recipe starts. For roundups that only link out to recipes, use the summary pattern with plain URLs instead of embedding recipes.

Step 6

Keep list URLs and canonicals consistent

Check that every URL in your ItemList is the canonical URL of its recipe page, with the same protocol, host, trailing slash and case. A list that points to URLs which redirect, or to variants whose canonical is somewhere else, weakens the connection Google needs. Also check that each collection page is itself indexable: not set to noindex, not canonicalised to page one when it is page two, and linked from your navigation.

Step 7

Test on mobile and watch the Recipe appearance

Test a recipe page and a collection page in the Rich Results Test, which reports Recipe and carousel items it can detect, then request indexing for both in Search Console. Over the following weeks, filter the Performance report by the Recipe search appearance and by device to see mobile impressions. Carousel inclusion is at Google's discretion and depends on the query, so judge progress over several weeks rather than day by day.

Platform notes

WordPress recipe plugins

Dedicated recipe card plugins output Recipe markup from the card you fill in, and most let you set image sizes and ratings. The common problems are an SEO plugin adding a second Recipe or an Article that claims to be the main entity, image sizes set too small in the plugin settings, and recipe cards placed in a sidebar or related-posts block, which then output extra Recipe items. Category pages in most themes output no ItemList, so the list markup usually has to be added by a snippet or a plugin that supports it.

Headless and custom sites

Build both the ItemList and each Recipe from the same content source as the visible page, and render them on the server so they are in the initial HTML. If a collection page loads more recipes as you scroll, mark up only the recipes present in the initial HTML, or give paginated URLs their own lists.

Recipe videos

A recipe with a video can add a video property holding a VideoObject. The page still needs the written recipe. A video-only page does not become a recipe page because it has Recipe markup.

Keeping recipes in carousels

For how Google treats recipe ratings, see fixing review and rating snippets. For recipe sites on WordPress more generally, see fixing rich snippets for content sites.

Questions and answers

1. Why do my recipes never appear in the recipe carousel on Google?

Usually because the individual recipe pages are not fully eligible, the images are too small or cannot be fetched by Google, or Google is not choosing your pages for the searches you tried. Recipe carousels appear mainly on mobile, so checking on a desktop can be misleading. Start by testing recipe pages for a single valid Recipe block with a large image, then check the images load for Googlebot, then look at mobile impressions for the Recipe search appearance in Search Console.

2. Do I need ItemList markup to appear in recipe carousels?

Not for the mixed carousel that shows recipes from several sites for a dish search. That is built from individual recipe pages with valid Recipe markup. ItemList matters for a carousel made up only of your own recipes, which Google builds from a page that lists them. If you want both, keep Recipe markup on every recipe page and add ItemList to your category, collection and roundup pages that group those recipes.

3. What size should recipe images be for Google?

Google's recipe guidance recommends several high-resolution images, each with at least 50,000 pixels when you multiply width by height, in 16:9, 4:3 and 1:1 aspect ratios. Supplying all three shapes lets Google crop the photo for different layouts without losing the food. The images should be real photos of the finished dish, reachable at a full https address, not blocked by robots.txt, and not replaced by a lazy-loading placeholder in the markup.

4. Can a roundup post with several recipes get into a carousel?

Yes, if the recipes are complete on the page. Use an ItemList in which each ListItem includes the full Recipe in its item property and a url pointing to an anchor on the page where that recipe starts. Do not mark the whole post up as one Recipe. If the roundup only shows a photo and a link to each recipe elsewhere, use a plain ItemList of URLs instead, with the Recipe markup kept on each linked page.

5. Why do I see my recipes in a carousel on my phone but not on my computer?

Recipe carousels are mainly a mobile search feature, so the same search on a desktop often shows ordinary listings or a different layout. That is expected and does not mean anything is broken. When you measure results, filter the Search Console Performance report by device and by the Recipe search appearance, and look at mobile impressions. Use a phone or your browser's mobile emulation when checking by hand, and try several dish searches.

6. Should my recipe category pages have Recipe markup?

No. A category page lists recipes rather than being one, so Recipe markup there misdescribes the page and can confuse which page Google should treat as the recipe. Put an ItemList on the category page with one ListItem per recipe shown, each linking to the recipe page by its canonical URL, and keep the Recipe markup on the individual recipe pages. Generate the list from the same query that builds the visible grid so the two stay in step.

7. Do ratings affect whether a recipe appears in the carousel?

Ratings are not required, but they are one of the details a carousel card can show, alongside the photo and cooking time. Google does not publish how it ranks recipes within a carousel, so it is not possible to say how much ratings count. What is certain is that ratings must come from real readers and be visible on the page. Invented or hidden ratings break Google's guidelines and can cost the site its rich results entirely.

Check whether your recipe pages are carousel-ready

The Rich Snippets Suite identifies the rich result types each recipe page is eligible for, validates the schema, previews how the result could look and tracks the rich result coverage your pages actually get over time.

Open Rich Snippet Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Rich Snippet Fixes  ·  Recipe Schema Errors  ·  Rich Snippets for Content Sites  ·  Eligible but Not Shown  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.