Carousel Structured Data: Complete Implementation Guide

Carousel structured data uses the ItemList schema type to present a collection of items as a swipeable carousel directly in Google Search results. This rich result format is available for recipes, courses, movies, restaurants, and other content types. By marking up your list pages with ItemList, you can occupy significantly more visual space in search results and drive higher engagement with your content. This guide explains how to implement carousel markup correctly for maximum impact.

Why Use ItemList Schema?

  • Occupy a large, visually prominent area in search results with a horizontal scrollable carousel
  • Showcase multiple pieces of content from a single page, increasing the chances of a user clicking through
  • Drive traffic to individual item pages by linking each carousel card to its dedicated URL
  • Stand out from competitors who only have standard blue link listings in the same results
  • Works across multiple content types including recipes, courses, films, restaurants, and products

Required Properties

These properties are required by Google for ItemList structured data to be eligible for rich results.

PropertyDescription
@typeMust be set to 'ItemList'. This tells Google the page contains a list of items eligible for carousel display.
itemListElementAn array of ListItem objects representing each item in the carousel. Each must include its own structured data for the specific content type.
ListItem.positionAn integer indicating the item's position in the list, starting at 1. Items are displayed in the carousel in this order.
ListItem.urlThe canonical URL of the detailed page for each item. Users who tap a carousel card are taken to this page.

JSON-LD Example

Here is a complete ItemList structured data example you can use as a starting point. Or use our ItemList generator to create one automatically.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "name": "Best Vegetarian Curry Recipes",
  "numberOfItems": 4,
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "url": "https://example.com/recipes/chickpea-tikka-masala",
      "item": {
        "@type": "Recipe",
        "name": "Chickpea Tikka Masala",
        "image": "https://example.com/images/chickpea-tikka.jpg",
        "author": {
          "@type": "Person",
          "name": "Priya Sharma"
        },
        "prepTime": "PT15M",
        "cookTime": "PT30M",
        "recipeYield": "4 servings"
      }
    },
    {
      "@type": "ListItem",
      "position": 2,
      "url": "https://example.com/recipes/thai-green-curry",
      "item": {
        "@type": "Recipe",
        "name": "Thai Green Vegetable Curry",
        "image": "https://example.com/images/thai-green.jpg",
        "author": {
          "@type": "Person",
          "name": "Priya Sharma"
        },
        "prepTime": "PT20M",
        "cookTime": "PT25M",
        "recipeYield": "4 servings"
      }
    },
    {
      "@type": "ListItem",
      "position": 3,
      "url": "https://example.com/recipes/aloo-gobi",
      "item": {
        "@type": "Recipe",
        "name": "Aloo Gobi",
        "image": "https://example.com/images/aloo-gobi.jpg",
        "author": {
          "@type": "Person",
          "name": "Priya Sharma"
        },
        "prepTime": "PT10M",
        "cookTime": "PT35M",
        "recipeYield": "3 servings"
      }
    },
    {
      "@type": "ListItem",
      "position": 4,
      "url": "https://example.com/recipes/palak-paneer",
      "item": {
        "@type": "Recipe",
        "name": "Palak Paneer",
        "image": "https://example.com/images/palak-paneer.jpg",
        "author": {
          "@type": "Person",
          "name": "Priya Sharma"
        },
        "prepTime": "PT10M",
        "cookTime": "PT20M",
        "recipeYield": "4 servings"
      }
    }
  ]
}
</script>

How to Implement ItemList Schema

  1. 1Determine which carousel approach suits your site: the 'summary page' approach (all items described on one page) or the 'multiple detail pages' approach (list page links to individual item pages).
  2. 2Create an ItemList JSON-LD block with an itemListElement array. Each entry should be a ListItem with a position starting at 1 and a url pointing to the item's detail page.
  3. 3For the summary page approach, nest the full structured data for each item inside the ListItem's item property. For the detail pages approach, ensure each linked page has its own complete structured data.
  4. 4Ensure each item in the list uses a supported content type: Recipe, Course, Movie, Restaurant, or another carousel-eligible schema type.
  5. 5Validate the carousel markup using Google's Rich Results Test. Test both the list page and individual item pages to confirm the full chain of structured data is correct.
  6. 6Submit the list page URL for indexing in Google Search Console and monitor the Enhancements report for any carousel-related issues.

Common Mistakes to Avoid

  • Mixing different schema types within a single ItemList. All items in a carousel must be the same type (e.g. all Recipe or all Course).
  • Forgetting to include complete structured data on each item's detail page when using the multiple detail pages approach. Both the list page and item pages need valid markup.
  • Using position values that are not sequential integers starting at 1. Gaps or duplicates will cause validation errors.
  • Including fewer than two items in the list. A carousel requires at least two items to be eligible for the rich result.
  • Not providing a url for each ListItem. Without URLs, Google cannot link carousel cards to the appropriate detail pages.

Testing & Validation

Before deploying your ItemList structured data, validate it using these tools:

  1. 1Google Rich Results Test — Paste your page URL or code snippet to check if your structured data is eligible for rich results.
  2. 2Schema Markup Validator — Validates your JSON-LD syntax against the schema.org specification.
  3. 3Google Search Console — After deployment, monitor the Enhancements report for any errors or warnings.

Frequently Asked Questions

What content types are eligible for carousel rich results?

Google currently supports carousel rich results for Recipes, Courses, Movies, and Restaurants. Other types may use ItemList markup for general list purposes, but the visual carousel display in search is limited to these supported categories.

What is the difference between the summary page and detail page approaches?

With the summary page approach, all item data lives on a single page and each ListItem contains the full structured data. With the detail pages approach, the list page only provides URLs, and each individual page contains its own complete structured data. Google supports both methods.

How many items should I include in a carousel?

You need a minimum of two items for carousel eligibility. There is no strict maximum, but Google typically displays between four and ten items in the carousel. Include all relevant items and let Google decide how many to show.

Can I use carousel structured data on paginated list pages?

It is best to include all items on a single page rather than splitting them across paginated pages. If your list is paginated, consider implementing the ItemList markup only on the first page or creating a view-all page with complete markup.

Will Google always show my content as a carousel?

No. Adding ItemList structured data makes your page eligible for carousel display, but Google decides whether to show it based on relevance, content quality, and the specific search query. Valid markup is a prerequisite, not a guarantee.

Ready to Generate Your ItemList Schema?

Use our free generator to create valid ItemList structured data in seconds.

Open ItemList Generator

Related Guides