Структурированные данные: 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, но не гарантирует его — решает поисковик.