Структурированные данные: schema.org и JSON-LD

Структурированные данные — это способ объяснить поисковику не словами, а машиночитаемо: «это рецепт», «это товар за 990 рублей», «это вопрос и ответ».

Структурированные данные — разметка содержимого по словарю schema.org, которая описывает смысл данных в машиночитаемом виде, чтобы поисковик мог показать расширенный результат (rich snippet).

Поисковый робот видит текст страницы, но смысл понимает приблизительно. Для него «990 ₽» — просто строка; он не уверен, цена это, артикул или год. Структурированные данные снимают догадки: вы прямо помечаете «это Product, у него name, price и review». Взамен в выдаче появляются богатые сниппеты — звёзды рейтинга, цена, наличие, раскрывающиеся вопросы. Они занимают больше места и привлекают взгляд, повышая кликабельность даже без подъёма позиции.

Зачем это на практике

Две ссылки на одинаковых позициях выдачи. У первой под заголовком — золотые звёзды «4.8», цена и «в наличии». У второй — обычный текст. Пользователь почти наверняка кликнет по первой: она выглядит надёжнее и информативнее. Для интернет-магазина это рост переходов, для статьи с FAQ — захват большего пространства на экране. Размеченные данные не гарантируют rich snippet (решает поисковик), но без них он невозможен в принципе.

JSON-LD: рекомендуемый формат

Есть два способа разметки. Первый — микроразметка прямо в HTML-тегах через атрибуты itemscope, itemtype, itemprop. Второй и сегодня основной — JSON-LD: отдельный блок в head, не трогающий вёрстку. Его кладут в <script> со специальным типом:

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Структурированные данные на практике",
  "author": { "@type": "Person", "name": "Редакция CodeChick" },
  "datePublished": "2026-06-27"
}

В HTML этот объект оборачивают в скрипт с типом application/ld+json. Ключ @context указывает словарь (schema.org), а @type — тип сущности. Главное достоинство JSON-LD: разметка отделена от контента, её легко генерировать на сервере и не нужно расставлять атрибуты по сотне тегов.

Где именно лежит блок — в head или в body — для робота не принципиально: он находит JSON-LD в любом месте документа. На практике его чаще ставят в head рядом с остальными метаданными, чтобы вся «служебная» информация о странице была собрана в одном месте. Поскольку это обычный JSON, его удобно собирать шаблонизатором на бэкенде из тех же данных, которыми наполняется страница, — например, подставлять реальную цену товара из базы. Так разметка и видимый контент остаются синхронными автоматически, без ручного дублирования.

Полезные типы: Article, Product, FAQ

schema.org описывает сотни типов, но на практике чаще всего нужны несколько. Article — для статей и новостей (заголовок, автор, дата). Product — для товара: имя, цена, валюта, рейтинг, наличие. FAQPage — для страниц «вопрос-ответ», даёт раскрывающиеся блоки прямо в выдаче:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Нужен ли JSON-LD маленькому сайту?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Да: даже один блок Article помогает поисковику понять страницу."
      }
    }
  ]
}

Ещё часто встречаются BreadcrumbList (хлебные крошки в выдаче), Organization и WebSite (данные о сайте), Recipe, Event, Review. Выбор типа — это выбор того, какой именно расширенный результат вы хотите получить.

Микроразметка кратко

Иногда данные размечают прямо в верстке атрибутами — это microdata. Подход компактен для маленьких блоков, но загромождает HTML:

<div itemscope itemtype="https://schema.org/Product">
  <span itemprop="name">Учебник по HTML</span>
  <span itemprop="price">990</span>
</div>

Здесь itemscope открывает сущность, itemtype задаёт её тип по schema.org, а itemprop помечает отдельные свойства. Семантически это равноценно JSON-LD, но из-за смешивания разметки с содержимым большинство проектов выбирают именно JSON-LD: его проще поддерживать и не сломаешь при редизайне.

У microdata есть и плюс: данные физически берутся из того, что видит пользователь, поэтому они не могут «разойтись» с контентом — цена в разметке и есть цена на экране. Но плата за это — захламлённый HTML и хрупкость: достаточно поменять вёрстку блока, перенести itemprop не туда, и разметка молча сломается. JSON-LD в этом смысле надёжнее в поддержке, а риск рассинхронизации снимается тем, что блок генерируется из тех же серверных данных. Существует и третий синтаксис — RDFa, тоже через атрибуты, — но на практике он встречается реже двух названных. Для подавляющего большинства задач выбор стоит между microdata и JSON-LD, и перевес сегодня на стороне JSON-LD.

Как это работает под капотом

Робот скачивает страницу и ищет два источника разметки: блоки application/ld+json и атрибуты microdata в тегах. Найденное он сверяет со словарём schema.org — это общий «справочник типов», на который ссылается @context. Если данные валидны и соответствуют требованиям конкретного rich-результата (например, у Product есть и название, и цена), страница становится кандидатом на расширенный сниппет. Слово «кандидат» здесь ключевое: разметка — необходимое, но не достаточное условие, окончательное решение принимает алгоритм поисковика. Проверить, что робот всё распарсил, помогают официальные инструменты тестирования структурированных данных и Rich Results Test.

Частые ошибки

  • Неверный type у скрипта. JSON-LD работает только в <script type="application/ld+json">; с обычным text/javascript браузер попробует исполнить JSON как код.
  • Разметка не совпадает с контентом. Указали в Product цену, которой нет на странице, — это нарушение правил, рискуете потерять сниппет или санкции.
  • Пропущены обязательные поля. Без обязательных свойств (например, цены у товара) поисковик не покажет rich snippet, даже если остальное верно.
  • Невалидный JSON. Лишняя запятая или незакрытая кавычка — и весь блок игнорируется. Проверяйте валидатором.
  • Ожидание гарантии. Разметка не «включает» звёзды принудительно: она делает страницу кандидатом, решение за алгоритмом.

Итоги

  • Структурированные данные описывают смысл контента по словарю schema.org в машиночитаемом виде.
  • Рекомендуемый формат — JSON-LD в <script type="application/ld+json">, отделённый от вёрстки.
  • Чаще всего нужны типы Article, Product и FAQPage; есть также BreadcrumbList, Organization и другие.
  • Микроразметка (microdata) делает то же через атрибуты itemscope/itemtype/itemprop, но загромождает HTML.
  • Корректная разметка делает страницу кандидатом на rich snippet, но не гарантирует его — решает поисковик.
Проверьте себя
1. В какой тег нужно поместить JSON-LD, чтобы поисковик его прочитал, а браузер не пытался исполнить как код?
A<script type="text/javascript">
B<script type="application/ld+json">
C<style type="application/ld+json">
D<meta name="ld+json">
2. Магазин разметил товар типом Product с рейтингом и ценой, всё валидно, но звёзды в выдаче так и не появились. Как корректнее всего это объяснить?
AJSON-LD вообще не влияет на выдачу, нужна только микроразметка
BРазметка делает страницу лишь кандидатом на rich snippet — окончательное решение принимает алгоритм поисковика
CЗвёзды появляются только при использовании атрибута itemprop, а не JSON-LD
DЗначит, в JSON-LD точно синтаксическая ошибка, других причин нет