Как исправить ошибки в JSON-LD и заставить Яндекс показывать расширенные сниппеты
Если структурированные данные не отображаются в поиске — это почти всегда синтаксическая ошибка в JSON-LD. Яндекс не принимает некорректную разметку, даже если она логически верна. Проверка и исправление — обязательный шаг. Мы разберём, как это сделать, чтобы сниппеты появились в выдаче.
Почему JSON-LD не работает в Яндексе
Критические ошибки в синтаксисе JSON-LD — одна из самых частых причин, по которым расширенные сниппеты не отображаются в Яндексе. Даже если вы используете правильную структуру Schema.org, синтаксическая ошибка в одном из элементов может привести к полному игнорированию разметки. Это не ошибка в логике, а в формате — и Яндекс не делает исключений. Неправильное использование кавычек, запятых, скобок или ключевых слов может привести к тому, что разметка будет полностью проигнорирована, даже если логика корректна.
Часто сисадмины полагают, что если JSON-LD проходит валидацию в Google Rich Results Test, он будет работать и в Яндексе. Это ошибка. Google и Яндекс используют разные алгоритмы анализа, и то, что считается корректным в одном, может быть неприемлемо в другом. Особенно это касается структуры, где используются сложные вложенные объекты или некорректные типы значений. Яндекс может не принимать разметку, если она не соответствует его внутренним шаблонам, даже если она технически верна.
Особенно часто ошибка возникает при использовании @context. Если он указан как http://schema.org, это может быть воспринято как ошибка, если в документе нет поддержки новых версий. Также часто проблема в @type, который может быть указан как Product, но при этом отсутствует обязательное поле name или image. Яндекс не будет показывать сниппет, если хотя бы одно обязательное поле отсутствует, даже если оно указано в @type.
Если вы используете JSON-LD для страницы товара, но не указываете offers, Яндекс может не показать цену. Это не ошибка в синтаксисе, но она всё равно блокирует отображение. Важно помнить, что Яндекс не только проверяет синтаксис, но и оценивает логику. Если разметка не соответствует ожиданиям, она будет проигнорирована. Это не значит, что вы не можете использовать JSON-LD — просто нужно убедиться, что всё корректно.
Иногда ошибка кроется в том, что JSON-LD находится в файле, который не индексируется. Например, если разметка находится в JavaScript-файле или в файле, который не загружается, Яндекс не сможет её прочитать. Это не ошибка в синтаксисе, но она всё равно приводит к тому, что сниппет не появляется. Проверьте, что разметка доступна для индексации и находится в правильном месте, например, в <head> или в <script type="application/ld+json">.
Инструменты для проверки JSON-LD
Первый шаг — использовать валидаторы. Google Rich Results Test — стандартный инструмент, который показывает синтаксические и логические ошибки. Он работает с JSON-LD, но не всегда отражает реальное поведение Яндекса. Для более точной проверки рекомендуется использовать JSON-LD Playground, который позволяет визуально отслеживать структуру и выявлять синтаксические ошибки, такие как лишние запятые, неправильные кавычки или отсутствие закрывающих скобок.
Дополнительно стоит проверить разметку через инструменты Яндекса, хотя они не всегда предоставляют детальную информацию о типе ошибки. Важно помнить, что валидация — это не гарантия, а лишь первый шаг. Даже валидный JSON-LD может не отображаться, если он не соответствует ожиданиям поисковой системы. Поэтому после проверки через Google и Яндекс нужно провести ручную проверку на соответствие требованиям для конкретного типа страницы.
Иногда ошибка кроется в том, что инструменты не учитывают контекст. Например, если image указан как строка, а не как URL, Google может считать это ошибкой, но Яндекс может не заметить. Поэтому важно проверять разметку не только через инструменты, но и вручную. Проверьте, что все поля, которые должны быть URL-адресами, действительно являются URL-адресами. Также убедитесь, что все ссылки ведут на корректные страницы.
Если вы используете JSON-LD для FAQ-страниц, убедитесь, что каждый вопрос и ответ указан в правильном формате. Например, acceptedAnswer должен быть объектом, а не строкой. Если acceptedAnswer указан как строка, это может быть воспринято как ошибка. Также важно, чтобы name и acceptedAnswer были в правильной вложенности. Неправильная вложенность может привести к тому, что Яндекс не сможет прочитать разметку.
Иногда ошибка возникает из-за того, что JSON-LD находится в файле, который не индексируется. Например, если разметка находится в JavaScript-файле или в файле, который не загружается, Яндекс не сможет её прочитать. Это не ошибка в синтаксисе, но она всё равно приводит к тому, что сниппет не появляется. Проверьте, что разметка доступна для индексации и находится в правильном месте, например, в <head> или в <script type="application/ld+json">.
Что делать, если JSON-LD не проходит проверку
Если валидатор выявил ошибку, нужно исправить её. Неправильная структура JSON-LD может блокировать отображение сниппета. Например, если поле @type указано как Product, а в документе нет обязательных полей, таких как name или image, это может привести к тому, что Яндекс не будет показывать сниппет. Также часто встречаются ошибки, связанные с неправильным использованием ключевых слов, таких как @context или @id, которые должны быть в определённом формате.
После исправления кода необходимо перепроверить его через тот же инструмент. Если ошибка сохраняется, стоит обратить внимание на вложенность объектов и типы данных. Например, image должен быть URL-адресом, а не строкой с описанием. Некоторые инструменты, такие как JSON-LD Validator, позволяют указать точную строку с ошибкой, что значительно ускоряет процесс исправления. Также стоит проверить, что все поля, которые должны быть URL-адресами, действительно являются URL-адресами.
Если ошибка сохраняется, попробуйте упростить разметку. Удалите необязательные поля и проверьте, работает ли разметка. Это поможет выявить, какой именно элемент вызывает проблему. Например, если offers не указан, но он необходим для типа Product, это может быть причиной. Также проверьте, что все ссылки ведут на корректные страницы. Некорректные ссылки могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Если ошибка сохраняется, стоит проверить, что разметка находится в правильном месте. Например, если JSON-LD находится в файле, который не индексируется, Яндекс не сможет его прочитать. Это не ошибка в синтаксисе, но она всё равно приводит к тому, что сниппет не появляется. Проверьте, что разметка доступна для индексации и находится в правильном месте, например, в <head> или в <script type="application/ld+json">.
Если ошибка сохраняется, стоит проверить, что все поля, которые должны быть URL-адресами, действительно являются URL-адресами. Например, если image указан как строка, а не как URL, это может быть воспринято как ошибка. Также убедитесь, что все ссылки ведут на корректные страницы. Некорректные ссылки могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Особенности разметки для Яндекса
Яндекс не всегда поддерживает JSON-LD, как Google. В некоторых случаях рекомендуется использовать Microdata или RDFa, особенно если речь идёт о сложных страницах, таких как статьи или FAQ. Однако, если вы используете JSON-LD, важно убедиться, что структура соответствует ожиданиям Яндекса. Например, для страницы товара нужно использовать Product, а для статьи — Article. Неправильный тип может привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Также важно учитывать, что Яндекс может игнорировать JSON-LD, если он находится не в правильном месте. Например, разметка должна быть в <head> или в <script type="application/ld+json"> в теле документа. Если JSON-LD находится в файле, который не индексируется, он не будет прочитан. Важно проверить, что разметка доступна для индексации и не скрыта за JavaScript или другими механизмами.
Если вы используете JSON-LD для страницы товара, убедитесь, что все обязательные поля указаны. Например, name, description, image и offers должны быть в правильном формате. Если хотя бы одно из обязательных полей отсутствует, Яндекс может не показывать сниппет. Это не ошибка в синтаксисе, но она всё равно блокирует отображение.
Также важно убедиться, что все ссылки, указанные в url, ведут на корректные страницы. Некорректные ссылки могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна. Проверьте, что все ссылки ведут на корректные страницы и не ведут на 404-страницы. Некорректные ссылки могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Как проверить JSON-LD по типу страницы
Разметка должна быть адаптирована под тип страницы. Для статей используется Article, для товаров — Product, для FAQ — FAQPage. Каждый тип имеет свои обязательные и необязательные поля. Например, для Product обязательно наличие name, description, image и offers. Если хотя бы одно из обязательных полей отсутствует, Яндекс может не показывать сниппет. Это не ошибка в синтаксисе, но она всё равно блокирует отображение.
Проверка по типу страницы включает в себя не только структуру, но и содержание. Например, если в description указано слишком много текста, он может быть обрезан, что повлияет на внешний вид сниппета. Также важно убедиться, что все ссылки, указанные в url, ведут на корректные страницы. Некорректные ссылки могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Практические шаги по исправлению ошибок
Первый шаг — проверка синтаксиса. Используйте JSON-LD Playground или Google Rich Results Test. Если ошибка найдена, исправьте её. Часто проблема в лишних запятых, кавычках или неправильном порядке объектов. После исправления — повторная проверка. Если ошибка сохраняется, попробуйте упростить разметку: удалите необязательные поля и проверьте, работает ли разметка. Это поможет выявить, какой именно элемент вызывает проблему.
Второй шаг — проверка на соответствие требованиям Яндекса. Убедитесь, что тип разметки соответствует типу страницы. Проверьте обязательные поля для этого типа. Например, для Product обязательно наличие name, description, image и offers. Если хотя бы одно из обязательных полей отсутствует, добавьте его. Также проверьте, что все ссылки ведут на корректные страницы. Некорректные ссылки могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Третий шаг — проверка, что разметка находится в правильном месте. Например, если JSON-LD находится в файле, который не индексируется, Яндекс не сможет его прочитать. Это не ошибка в синтаксисе, но она всё равно приводит к тому, что сниппет не появляется. Проверьте, что разметка доступна для индексации и находится в правильном месте, например, в <head> или в <script type="application/ld+json">.
Четвёртый шаг — проверка, что все поля, которые должны быть URL-адресами, действительно являются URL-адресами. Например, если image указан как строка, а не как URL, это может быть воспринято как ошибка. Также убедитесь, что все ссылки ведут на корректные страницы. Некорректные ссылки могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Пятый шаг — проверка, что все поля, которые должны быть URL-адресами, действительно являются URL-адресами. Например, если image указан как строка, а не как URL, это может быть воспринято как ошибка. Также убедитесь, что все ссылки ведут на корректные страницы. Некорректные ссылки могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Типовые ошибки в JSON-LD
Одна из самых частых ошибок — неправильное использование @context. Если он указан как http://schema.org, это может быть воспринято как ошибка, если в документе нет поддержки новых версий. Также часто проблема в @type, который может быть указан как Product, но при этом отсутствует обязательное поле name или image. Яндекс не будет показывать сниппет, если хотя бы одно обязательное поле отсутствует, даже если оно указано в @type.
Другая частая ошибка — неправильное использование image. Если image указан как строка, а не как URL, это может быть воспринято как ошибка. Также важно, чтобы все ссылки в url ведели на корректные страницы. Некорректные ссылки могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Третья частая ошибка — неправильная вложенность объектов. Например, если acceptedAnswer указан как строка, а не как объект, это может быть воспринято как ошибка. Также важно, чтобы name и acceptedAnswer были в правильной вложенности. Неправильная вложенность может привести к тому, что Яндекс не сможет прочитать разметку.
Четвёртая частая ошибка — использование @id в неправильном формате. Например, если @id указан как #product, это может быть воспринято как ошибка. Также важно, чтобы @id был уникальным и вел на корректную страницу. Некорректные @id могут привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Пятая частая ошибка — использование @type в неправильном формате. Например, если @type указан как Product, но при этом отсутствует обязательное поле name, это может быть воспринято как ошибка. Также важно, чтобы @type соответствовал типу страницы. Неправильный @type может привести к тому, что сниппет не будет показан, даже если разметка синтаксически верна.
Частые вопросы
Почему валидный JSON-LD не отображается в Яндексе?
Валидный JSON-LD не гарантирует появление расширенного сниппета. Яндекс может игнорировать разметку из-за несоответствия типу страницы, отсутствия обязательных полей или неправильной структуры, даже если синтаксис корректен.
Можно ли использовать JSON-LD для FAQ-страниц?
Да, но важно использовать правильный тип — `FAQPage`. Также необходимо указать обязательные поля, такие как `name` и `acceptedAnswer`. Если поля отсутствуют, Яндекс может не показывать сниппет.
Какие инструменты лучше использовать для проверки JSON-LD?
Google Rich Results Test и JSON-LD Playground — самые надежные. Они показывают синтаксические ошибки и помогают исправить их. Также стоит проверить разметку через инструменты Яндекса, хотя они менее детализированы.
Что делать, если ошибка сохраняется после исправления?
Проверьте, что разметка находится в правильном месте (в `<head>` или в `<script type="application/ld+json">`). Убедитесь, что все ссылки ведут на корректные страницы. Если проблема сохраняется, попробуйте упростить разметку и проверить по частям.
Можно ли использовать JSON-LD для статей?
Да, но важно использовать правильный тип — `Article`. Также необходимо указать обязательные поля, такие как `name`, `description` и `image`. Если поля отсутствуют, Яндекс может не показывать сниппет.
Какие поля обязательны для типа `Product`?
Для типа `Product` обязательны поля `name`, `description`, `image` и `offers`. Если хотя бы одно из них отсутствует, Яндекс может не показывать сниппет.
Источники
- Google Rich Results Test — https://search.google.com/test/rich-results
- JSON-LD Playground — https://json-ld.org/playground/
- Яндекс.Метрика и инструменты поиска — https://yandex.ru/internet
- SeoSync — https://seosync.io/tools
- Webmaster-Tools — https://webmaster-tools.online/tool/json-ld-validator
- Prowth — https://www.prowth.com/blog/structured-data-testing-tools


