Top-10 фильмов года. Список бестселлеров. Каталог товаров по категории. Лента новостей. Все эти форматы контента — списки. И у Google для них есть отдельный формат Rich Result — Carousel: горизонтальная прокручиваемая лента карточек прямо в поисковой выдаче. Собирается такой Carousel из разметки ItemList. Официальные требования — Google Search Central: Carousel.

ItemList универсальна — она подходит для списков любых типов элементов: статей, товаров, курсов, событий, рецептов. Ключевой сдвиг: без ItemList отдельные схемы (Article, Product, Course) «живут сами по себе»; с ItemList они собираются в упорядоченный набор с явным смыслом «это подборка N штук».

Два способа использования ItemList

Google поддерживает два формата разметки списка — в зависимости от того, где живёт контент:

  1. Summary page + отдельные страницы — страница-подборка со ссылками, каждый элемент имеет свою страницу с полной разметкой. Разметка на summary-странице: ItemList → ListItem → URL. Google подтягивает детали каждого элемента с целевых страниц.
  2. All-in-one page — вся подборка на одной странице с полными данными по каждому элементу (например, топ-10 статей блога с картинкой, кратким описанием, ссылкой). Разметка ItemList → ListItem → вложенный тип (Article/Product) с полными свойствами.

Пример 1: summary page (список статей)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "url": "https://fruntend.com/posts/pochemu-pora-osvaivat-typescript"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "url": "https://fruntend.com/posts/svoystvo-contain-pomoshch-v-optimizatsii-brauzera"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "url": "https://fruntend.com/posts/background-blend-mode"
    }
  ]
}
</script>

Минимальный формат. Google переходит по URL каждого ListItem и подтягивает разметку Article/Product/Course оттуда. Работает, если каждая целевая страница правильно размечена.

Пример 2: all-in-one (топ-10 фильмов)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "item": {
        "@type": "Movie",
        "name": "Крёстный отец",
        "image": "https://example.com/movies/godfather.jpg",
        "url": "https://example.com/movies/godfather",
        "aggregateRating": {
          "@type": "AggregateRating",
          "ratingValue": "9.2",
          "reviewCount": "1953"
        }
      }
    },
    {
      "@type": "ListItem",
      "position": 2,
      "item": {
        "@type": "Movie",
        "name": "Побег из Шоушенка",
        "image": "https://example.com/movies/shawshank.jpg",
        "url": "https://example.com/movies/shawshank",
        "aggregateRating": {
          "@type": "AggregateRating",
          "ratingValue": "9.3",
          "reviewCount": "2437"
        }
      }
    }
  ]
}
</script>

Формат all-in-one даёт больше контроля: полные данные по каждому элементу сразу, без походов Google на отдельные страницы. Подходит для топ-листов, где отдельных URL нет или они слишком узкие.

Обязательные свойства

  • itemListElement — массив ListItem-объектов.
  • Каждый ListItem:
    • position — номер в списке (1, 2, 3…).
    • Либо url (для summary-формата), либо item с вложенным типом (для all-in-one).

Рекомендуемые свойства

  • name — название всего списка («Топ-10 фильмов 2026»).
  • description — описание подборки.
  • numberOfItems — количество элементов. Google может использовать для оптимизации отображения.

Ограничения Carousel Rich Results

Google Carousel Rich Result поддерживает не все типы. Поддерживаемые (по Google docs):

  • Article (и подтипы)
  • Course
  • Movie
  • Recipe
  • Restaurant

Для других типов (Product, Book, Event) — ItemList работает, но не превращается в Carousel. Всё равно полезно для семантики.

Типовые ошибки

  • Пропущенные позиции. position должны идти подряд: 1, 2, 3… Пропуск (например, 1, 2, 5) — ошибка.
  • Смешивание форматов. Одни ListItem с url, другие с item в одном списке. Правильно — либо все с URL, либо все с вложенным типом.
  • Слишком мало элементов. Carousel Rich Result требует минимум 3 элемента. Одноэлементный ItemList работает как разметка, но не даёт Rich Result.
  • Разметка на listing-странице без ссылок. Если ListItem с url, но URL ведёт на несуществующую или неразмеченную страницу — Google выкинет весь ItemList из индекса.