Структурированные данные для рецептов (Recipe, HowTo, ItemList)

Чтобы ваши рецепты было проще найти, предоставьте сведения об отзывах, времени приготовления и калорийности, используя структурированные данные. Google будет распознавать их и выделять ваши рецепты в результатах поиска. Рецепты могут показываться в результатах Google Поиска и Google Картинок.

Изображение с рецептом в Google Поиске. Здесь представлено четыре расширенных результата с разных сайтов, а также сведения о времени приготовления, фотография и отзывы. Изображение с рецептом в Google Картинках. На шести результатах поиска по картинкам представлены разные блюда, причем на трех из них есть пометка о том, что это рецепты.

В зависимости от того, какую разметку вы используете, мы можем показывать ваши рецепты в результатах поиска по-разному:

Как рецепты могут выглядеть в результатах поиска
Карусель рецептов с вашего сайта. Если добавить структурированные данные ItemList, пользователям будет удобнее просматривать ваши рецепты, поскольку они будут представлены в виде галереи. Изображение с каруселью рецептов в Google Поиске. На карусели показаны три разных рецепта с одного сайта, из которых посетители могут выбрать подходящий

Как добавлять структурированные данные

Структурированные данные – стандартизированный формат, который позволяет предоставлять информацию о странице и классифицировать ее контент. О том, как это работает, рассказывается в другой статье.

Ниже в общих чертах описано, как создать, проверить и добавить на сайт структурированные данные. Пошаговые инструкции вы найдете в практической работе, посвященной добавлению структурированных данных на веб-страницу.

  1. Добавьте обязательные свойства. Узнайте, в каких частях страницы нужно размещать структурированные данные выбранного вами формата.
  2. Следуйте рекомендациям.
  3. Протестируйте свой код с помощью инструмента проверки расширенных результатов. Если будут обнаружены критические ошибки, устраните их. Мы также рекомендуем устранить некритические ошибки, отмеченные в инструменте. Это может привести к повышению качества структурированных данных, хотя страницы будут подходить для создания расширенных результатов и без этого.
  4. Опубликуйте страницу и с помощью инструмента проверки URL выясните, как она выглядит для робота Googlebot. Убедитесь, что доступ Google к странице не заблокирован файлом robots.txt или метатегом noindex и авторизация на ней не требуется. Если все в порядке, то запросите повторное сканирование ваших URL.
  5. Отправляйте нам файл Sitemap, чтобы информировать нас об изменениях на сайте. Отправку такого файла можно автоматизировать с помощью Search Console Sitemap API.

Примеры

В этом разделе собрано несколько примеров кода JSON-LD для рецептов.

Рецепты в Поиске

Ниже представлен пример страницы, которая допущена к показу в Google Поиске.

<html>
  <head>
    <title>Non-Alcoholic Piña Colada</title>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org/",
      "@type": "Recipe",
      "name": "Non-Alcoholic Piña Colada",
      "image": [
      "https://example.com/photos/1x1/photo.jpg",
      "https://example.com/photos/4x3/photo.jpg",
      "https://example.com/photos/16x9/photo.jpg"
      ],
      "author": {
        "@type": "Person",
        "name": "Mary Stone"
      },
      "datePublished": "2018-03-10",
      "description": "This non-alcoholic pina colada is everyone's favorite!",
      "recipeCuisine": "American",
      "prepTime": "PT1M",
      "cookTime": "PT2M",
      "totalTime": "PT3M",
      "keywords": "non-alcoholic",
      "recipeYield": "4 servings",
      "recipeCategory": "Drink",
      "nutrition": {
        "@type": "NutritionInformation",
        "calories": "120 calories"
      },
      "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": "5",
        "ratingCount": "18"
      },
      "recipeIngredient": [
        "400ml of pineapple juice",
        "100ml cream of coconut",
        "ice"
      ],
      "recipeInstructions": [
        {
          "@type": "HowToStep",
          "name": "Blend",
          "text": "Blend 400ml of pineapple juice and 100ml cream of coconut until smooth.",
          "url": "https://example.com/non-alcoholic-pina-colada#step1",
          "image": "https://example.com/photos/non-alcoholic-pina-colada/step1.jpg"
        },
        {
          "@type": "HowToStep",
          "name": "Fill",
          "text": "Fill a glass with ice.",
          "url": "https://example.com/non-alcoholic-pina-colada#step2",
          "image": "https://example.com/photos/non-alcoholic-pina-colada/step2.jpg"
        },
        {
          "@type": "HowToStep",
          "name": "Pour",
          "text": "Pour the pineapple juice and coconut mixture over ice.",
          "url": "https://example.com/non-alcoholic-pina-colada#step3",
          "image": "https://example.com/photos/non-alcoholic-pina-colada/step3.jpg"
        }
      ],
      "video": {
        "@type": "VideoObject",
        "name": "How to Make a Non-Alcoholic Piña Colada",
        "description": "This is how you make a non-alcoholic piña colada.",
        "thumbnailUrl": [
          "https://example.com/photos/1x1/photo.jpg",
          "https://example.com/photos/4x3/photo.jpg",
          "https://example.com/photos/16x9/photo.jpg"
         ],
        "contentUrl": "https://www.example.com/video123.mp4",
        "embedUrl": "https://www.example.com/videoplayer?video=123",
        "uploadDate": "2018-02-05T08:00:00+08:00",
        "duration": "PT1M33S",
        "interactionStatistic": {
          "@type": "InteractionCounter",
          "interactionType": { "@type": "WatchAction" },
          "userInteractionCount": 2347
        },
        "expires": "2019-02-05T08:00:00+08:00"
       }
    }
    </script>
  </head>
  <body>
  </body>
</html>

Ниже представлен пример сводной страницы рецептов (страницы со списком рецептов) со структурированными данными типа itemList. Этот контент может показываться в виде сетки в результатах поиска Google.

<html>
  <head>
    <title>Grandma's Best Pie Recipes</title>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "ItemList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "url": "https://example.com/apple-pie.html"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "url": "https://example.com/blueberry-pie.html"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "url": "https://example.com/cherry-pie.html"
        }]
    }
    </script>
  </head>
  <body>
  </body>
</html>

Правила

Чтобы ваша разметка была допущена к показу в результатах поиска, соблюдайте общие рекомендации по использованию структурированных данных.

Рекомендации по структурированным данным Recipe:

  • Структурированные данные Recipe подходят для контента, где рассказывается о том, как приготовить конкретное блюдо. Их нельзя использовать для других материалов, например советов по организации праздника или по приготовлению скраба для лица.
  • Чтобы рецепты появлялись в карусели или сетке, следуйте следующим правилам:
    • Добавьте структурированные данные ItemList, чтобы объединить рецепты в список. Структурированные данные ItemList можно добавлять как отдельно, так и вместе со структурированными данными для рецептов.
    • На вашем сайте должна быть страница, где перечислены все рецепты, входящие в подборку. Когда пользователь нажимает на общую ссылку в результатах поиска, должен выполняться переход на страницу со списком рецептов, соответствующих его запросу.

Типы структурированных данных

Чтобы ваш контент мог появляться в расширенных результатах поиска, необходимо задать все обязательные свойства. Вы также можете добавить рекомендуемые свойства, чтобы пользователям было удобнее изучать информацию.

Recipe

В разметке schema.org Recipe для рецепта нужно использовать перечисленные ниже свойства. Полное описание типа Recipe приведено на странице schema.org/Recipe. Google поддерживает следующие свойства:

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

URL или ImageObject

Изображение готового блюда.

Дополнительные рекомендации:

  • На каждой странице (с разметкой или без нее) должно присутствовать хотя бы одно изображение. Робот Google выберет лучшее изображение для показа в результатах поиска с учетом соотношения сторон и разрешения.
  • URL изображений должны быть доступны для сканирования и индексирования. Проверить, есть ли у поискового робота Google доступ к URL вашего контента, можно с помощью инструмента проверки URL.
  • Изображения должны соответствовать размеченному контенту.
  • Допускаются только графические файлы форматов, совместимых с Google Картинками.
  • Предоставьте несколько изображений в высоком разрешении (не менее 50 000 пикселей по произведению ширины и высоты) со следующими соотношениями сторон: 16 × 9, 4 × 3 или 1 × 1.

Пример:

"image": [
  "https://example.com/photos/1x1/photo.jpg",
  "https://example.com/photos/4x3/photo.jpg",
  "https://example.com/photos/16x9/photo.jpg"
]
name

Text

Название блюда.

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

AggregateRating

Аннотация к средней оценке по отзывам, которая присваивается блюду. Следуйте рекомендациям по созданию фрагмента отзыва и списку обязательных и рекомендуемых свойств типа AggregateRating.

Если в структурированных данных Recipe содержится только один отзыв, в качестве имени автора должно быть указано настоящее имя человека или название организации. К примеру, имя "Скидка 50 % на ингредиенты" является недопустимым.

author

Person или Organization

Автор рецепта (имя человека или название организации). Чтобы роботам Google было проще найти информацию об авторе среди кода, относящегося к различным функциям, следуйте рекомендациям по разметке, относящейся к автору.

cookTime

Duration

Время, которое требуется на приготовление блюда. Значение следует вводить в формате ISO 8601 (если применимо).

Всегда используйте это свойство вместе с элементом prepTime.

datePublished

Date

Дата публикации рецепта в формате ISO 8601 (если применимо).

description

Text

Краткое описание блюда.

keywords

Text

Ключевые слова, например время года ("лето"), праздник ("Восьмое марта"), особое событие ("свадьба", "день рождения") или другие характеристики ("быстрый", "бюджетный", "аутентичный").

Дополнительные правила

  • Разделяйте ключевые слова запятыми.
  • Не используйте тег, который на самом деле представляет собой свойство recipeCategory или recipeCuisine.

    Неправильно:

    "keywords": "dessert, American"
    

    Правильно:

    "keywords": "winter apple pie, nutmeg crust"
    
nutrition.calories

Energy

Количество калорий в каждой порции блюда, приготовленного по этому рецепту. Если задано свойство nutrition.calories, для свойства recipeYield нужно указать количество порций.

prepTime

Duration

Общее время подготовки и приготовления блюда, указанное в формате ISO 8601 (если применимо).

Всегда используйте это свойство вместе с элементом cookTime.

recipeCategory

Text

Вид блюда. Например "ужин", "основное блюдо", "десерт".

recipeCuisine

Text

К какой кухне мира относится рецепт. Например, "средиземноморская", "американская", "французская".

recipeIngredient

Text

Ингредиенты, используемые в рецепте.

Пример:

"recipeIngredient": [
  "1 (15 ounce) package double crust ready-to-use pie crust",
  "6 cups thinly sliced, peeled apples (6 medium)",
  "3/4 cup sugar",
  "2 tablespoons all-purpose flour",
  "3/4 teaspoon ground cinnamon",
  "1/4 teaspoon salt",
  "1/8 teaspoon ground nutmeg",
  "1 tablespoon lemon juice"
]

Дополнительные рекомендации

  • Добавьте только ингредиенты, которые требуются для приготовления блюда по рецепту.
  • Не добавляйте ненужную информацию, такую как описание ингредиента.
recipeInstructions

HowToStep, HowToSection или Text

Этапы приготовления блюда.

Указывать значения свойства recipeInstructions можно несколькими способами. Мы рекомендуем делать это при помощи элементов HowToStep. Если в рецепте несколько разделов, то элементы HowToStep можно сгруппировать с помощью свойства HowToSection.

  • HowToStep: задайте этапы приготовления с помощью свойства HowToStep.
    "recipeInstructions": [
      {
        "@type": "HowToStep",
        "name": "Preheat",
        "text": "Heat oven to 425°F.",
        "url": "https://example.com/recipe#step1",
        "image": "https://example.com/photos/recipe/step1.jpg"
      }, {
        "@type": "HowToStep",
        "name": "Prepare crust",
        "text": "Place 1 pie crust in ungreased 9-inch glass pie plate, pressing firmly against side and bottom.",
        "url": "https://example.com/recipe#step2",
        "image": "https://example.com/photos/recipe/step2.jpg"
      }, {
        "@type": "HowToStep",
        "name": "Make filling",
        "text": "In large bowl, gently mix filling ingredients; spoon into crust-lined pie plate.",
        "url": "https://example.com/recipe#step3",
        "image": "https://example.com/photos/recipe/step3.jpg"
      }, {
        "@type": "HowToStep",
        "name": "Cover",
        "text": "Top with second crust. Cut slits or shapes in several places in top crust.",
        "url": "https://example.com/recipe#step4",
        "image": "https://example.com/photos/recipe/step4.jpg"
      }, {
        "@type": "HowToStep",
        "name": "Bake",
        "text": "Bake 40 to 45 minutes. The pie is ready when the apples are tender and the crust is golden brown.",
        "url": "https://example.com/recipe#step5",
        "image": "https://example.com/photos/recipe/step5.jpg"
      }, {
        "@type": "HowToStep",
        "name": "Cool",
        "text": "Cool on cooling rack at least 2 hours before serving.",
        "url": "https://example.com/recipe#step6",
        "image": "https://example.com/photos/recipe/step6.jpg"
      }
    ]
    
  • HowToSection. Это свойство позволяет сгруппировать этапы приготовления блюда в разделы. Пример см. в описании типа HowToSection.
  • Одиночное или повторяющееся свойство текста – текстовый блок, который включает один или несколько этапов. Все этапы рассматриваются как относящиеся к одному разделу. Если в свойстве указано несколько значений, все они объединяются в один текстовый блок. Затем Google пытается автоматически разделить этот блок на отдельные этапы. Кроме того, Google находит и удаляет названия разделов, номера этапов, ключевые слова и другие данные, которые могут некорректно отображаться в тексте рецепта. Чтобы структурированные данные были обработаны точно и однозначно, рекомендуем вместо текстовых описаний добавлять свойства HowToStep.
    "recipeInstructions": [
      "In large bowl, gently mix filling ingredients; spoon into crust-lined pie
    plate. Top with second crust. Cut slits or shapes in several places in top
    crust. Bake 40 to 45 minutes. The pie is ready when the or until apples are
    tender and the crust is golden brown. Cool on cooling rack at least 2 hours
    before serving."
    ]
    

Дополнительные правила

  • Следите за тем, чтобы все метаданные были размещены в предназначенных для них разделах. Например, автора рецепта нужно указать в свойстве author, тип кухни – в свойстве recipeCuisine, категорию – в свойстве recipeCategory, а другие ключевые слова – в свойстве keywords.
  • Добавляйте только само описание приготовления блюда без посторонней информации, такой как "Инструкции", "Смотрите видео", "Шаг 1" (их нужно указывать вне структурированных данных).

    Неправильно:

    "recipeInstructions": [{
      "@type": "HowToStep",
      "text": "Step 1. Heat oven to 425°F."
    }]
    

    Правильно:

    "recipeInstructions": [{
      "@type": "HowToStep",
      "text": "Heat oven to 425°F."
    }]
    
recipeYield

Text или Integer

Количество итогового продукта (если применимо). Уточните итоговое количество порций, которое будет приготовлено по этому рецепту. Если вы хотите указать выход готового блюда и в других единицах (например, не в порциях, а в штуках), то можете добавить несколько элементов этого типа. Это обязательное свойство, если вы хотите указать энергетическую ценность порций (например, с помощью свойства nutrition.calories).

Пример

"recipeYield": [
  "6",
  "24 cookies"
]
totalTime

Duration

Общее время приготовления блюда в формате ISO 8601 (если применимо).

Используйте свойство totalTime или же комбинацию cookTime и prepTime.

video VideoObject

Видео, иллюстрирующее этапы приготовления блюда. Ознакомьтесь со списком обязательных и рекомендуемых свойств для видео.

HowToSection

Свойство HowToSection позволяет группировать шаги (или подразделы), составляющие часть действий по рецепту. Задайте HowToSection непосредственно как описание свойства recipeInstructions или как элемент itemListElement другого свойства HowToSection.

Тип HowToSection определяет раздел одного рецепта и может содержать один или несколько шагов. Не используйте HowToSection для разных рецептов приготовления одного блюда. Применяйте HowToSection только как часть одного рецепта. Если вам нужно привести несколько рецептов одного и того же блюда, используйте несколько объектов Recipe. Например, различные способы выпекания яблочного пирога следует размечать с помощью нескольких объектов Recipe, а не объектов HowToSection.

Полное определение типа HowToSection приведено на странице schema.org/HowToSection.

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

Список этапов приготовления, а также подразделов (если они есть). Например, в описании приготовления пиццы может быть три раздела: о тесте, начинке и выпечке.

Пример:

{
  "@type": "HowToSection",
  "name": "Assemble the pie",
  "itemListElement": [
    {
      "@type": "HowToStep",
      "text": "In large bowl, gently mix filling ingredients; spoon into crust-lined pie plate."
    }, {
      "@type": "HowToStep",
      "text": "Top with second crust. Cut slits or shapes in several places in top crust."
    }
  ]
}
name Text

Название раздела.

HowToStep

Свойство HowToStep позволяет группировать предложения, в которых описывается, как выполнить часть действий по рецепту, если это уместно для контента. Укажите такие предложения в свойстве text или укажите в свойстве itemListElement вариант HowToDirection или HowToTip для каждого такого предложения.

В разметке HowToStep для шагов рецепта нужно использовать перечисленные ниже свойства. Задайте HowToStep непосредственно как определение свойства recipeInstructions или как элемент itemListElement свойства HowToSection.

Полное определение типа HowToStep приведено на странице schema.org/HowToStep.

Обязательные свойства
itemListElement HowToDirection или HowToTip

Список шагов, в том числе указаний и рекомендаций.

Можно не использовать при наличии элемента text.

text Text

Полный текст шага инструкции.

Можно не использовать при наличии элемента itemListElement. Дополнительные рекомендации:

  • Добавляйте только сам текст инструкций, а не такие фразы, как "Инструкции", "Посмотрите видео", "Шаг 1" (их нужно указывать вне этого свойства).

    Неправильно:

    {
      "@type": "HowToStep",
      "text": "Step 1. Heat oven to 425°F."
    }
    

    Правильно:

    {
      "@type": "HowToStep",
      "text": "Heat oven to 425°F."
    }
    
Рекомендуемые свойства
image ImageObject или URL

Иллюстрация к шагу инструкции. Дополнительные рекомендации для изображений:

  • URL изображений должны быть доступны для сканирования и индексирования.
  • Изображения должны соответствовать размеченному контенту.
  • Допустимые форматы изображений: JPG, PNG и GIF.
name Text

От одного до нескольких слов, кратко описывающих шаг (например, "Выложите тесто в форму"). Не используйте такие конструкции, как "Шаг 1: [текст]" или "1. [текст]". В названии шага должна быть только описательная часть, без указания на его номер.

url URL

URL прямой ссылки на шаг (если таковой существует). Например, ссылка привязки.

video VideoObject или Clip

Видео, иллюстрирующее текущий шаг.

Если вы используете тип VideoObject, изучите список обязательных и рекомендуемых свойств для видео или фрагментов.

HowToDirection и HowToTip

Чтобы добавить описания инструкций или советов, применяйте типы HowToDirection и HowToTip (если применимо). В них используются одинаковые обязательные и рекомендуемые свойства.

Полное описание типов HowToDirection и HowToTip приведено на страницах schema.org/HowToDirection и schema.org/HowToTip.

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

Текст описания или совета.

ItemList

Помимо свойств рецепта, для тематических списков нужны и другие перечисленные ниже свойства. Указывать ItemList необязательно, но вам нужно добавить следующие свойства, иначе Google не сможет составить карусель рецептов с вашего сайта. Подробные сведения о карусели результатов с сайта представлены в разделе Карусель.

Полное определение типа ItemList приведено на странице schema.org/ItemList.

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

ListItem

Описание страницы отдельного элемента списка.

ListItem.position

Integer

Порядковый номер страницы элемента в списке. Пример:

"itemListElement": [
  {
    "@type": "ListItem",
    "position": 1,
  }, {
    "@type": "ListItem",
    "position": 2,
  }
]
ListItem.url

URL

Канонический URL страницы со сведениями об элементе. У каждого элемента должен быть уникальный URL.

Сбор статистики по расширенным результатам в Search Console

С помощью Search Console вы можете собирать данные об эффективности страниц вашего ресурса в Google Поиске. Вам не обязательно регистрироваться в этом сервисе, чтобы ваши страницы попали в результаты поиска. Однако это позволит узнать, как роботы Google воспринимают сайт, и упростить им его обработку. Рекомендуем проверять информацию в Search Console в следующих случаях:

  1. После первого размещения структурированных данных
  2. После выпуска новых шаблонов или обновления кода
  3. При регулярном анализе трафика

После первого размещения структурированных данных

Когда ваши страницы будут проиндексированы, проверьте их на наличие ошибок с помощью отчета о статусе расширенных результатов. Желательно, чтобы количество объектов с правильной разметкой выросло, а число объектов с ошибками – нет. Если в структурированных данных будут обнаружены ошибки, примите следующие меры:

  1. Устраните проблемы в объектах.
  2. Проверьте исправленную страницу, чтобы узнать, обнаруживаются ли ошибки.
  3. Запросите проверку ресурса, используя отчет о статусе расширенных результатов.

После выпуска новых шаблонов или обновления кода

Если вы внесли значительные изменения на сайт, проверьте, не увеличилось ли число недействительных объектов, связанных со структурированными данными.
  • Увеличилось число недействительных объектов? Возможно, вы создали шаблон, с которым что-то не так, или имеющийся шаблон используется некорректно.
  • Уменьшилось число действительных элементов, но не увеличилось количество недействительных? Возможно, на ваших страницах не размещены структурированные данные. Выяснить, с чем связаны ошибки, можно при помощи инструмента проверки URL.

При регулярном анализе трафика

Анализировать трафик сайта из Google Поиска можно с помощью отчета об эффективности. Из этого отчета вы узнаете, как часто страница появляется в Поиске в виде расширенного результата, с какой регулярностью пользователи нажимают на нее и какова ее средняя позиция в результатах поиска. Эти сведения также можно автоматически получать с помощью Search Console API.

Устранение неполадок

Если у вас возникли трудности с добавлением или отладкой структурированных данных, вам помогут ресурсы и сведения, доступные по приведенным ниже ссылкам.