гора.
запись · 16 мая 2026 г. · 10 мин чтения

JSON-LD Schema.org: какие типы выбрать

Кейс с одного из проектов. Лендинг с пятью вопросами в FAQ-секции внизу страницы. Висел в Google полтора года, импрессии шли, CTR около 1,8% — стандартно для коммерческого запроса на пятой позиции.

Добавил FAQPage schema. Просто завернул те же пять вопросов и ответов в JSON-LD блок, вставил в <head>. Текст на странице не трогал, ни одну букву.

Через три недели Google начал показывать в SERP аккордеон с этими вопросами прямо под snippet'ом. Раскрывающиеся плюсики, ответы видны без клика. Сначала только по одному запросу, потом по трём, потом по семи. CTR за месяц вырос с 1,8% до 3,9%. Позиция при этом не изменилась — пятая как пятая. Просто snippet стал занимать в выдаче в три раза больше места.

Это и есть rich results. Google рендерит твою страницу в выдаче иначе, чем у соседей — звёзды отзывов, карточка с шагами, аккордеон вопросов, breadcrumbs вместо длинного URL. И всё, что нужно — правильно разметить контент через schema.org, чтобы Google понял, что у тебя на странице, и согласился это показать особым образом.

Schema.org — это не про ранжирование напрямую. Это про то, как тебя покажут, когда ты уже в выдаче. И про то, чтобы Google вообще понял, что у тебя на странице — не угадывал, а знал точно.


Что такое Schema.org и JSON-LD

Schema.org — это общий словарь типов и свойств для семантической разметки веба. Создан в 2011-м совместно Google, Microsoft, Yahoo и Yandex. Сейчас содержит около 800 типов: Person, Organization, Article, Product, Event, Recipe, Movie, MusicAlbum, MedicalCondition — на каждое существенное явление, которое может быть на странице, есть свой тип со своим набором свойств.

Есть три формата разметки: Microdata, RDFa и JSON-LD. Microdata и RDFa встраиваются в HTML-теги через атрибуты itemprop, itemscope, property — то есть размечают сам контент по месту. JSON-LD — это отдельный <script type="application/ld+json"> блок, который не смешивается с HTML. Просто чистый JSON, который описывает страницу параллельно.

Google официально рекомендует JSON-LD. Причин три. Первая: легко поддерживать — разметка не привязана к структуре HTML, можешь менять верстку, не ломая schema. Вторая: можно генерировать программно — в Next.js или любом другом фреймворке вставляется через metadata API или dangerouslySetInnerHTML. Третья: легко валидировать — Google Rich Results Test читает именно JSON-LD блоки.

Без schema Google всё равно поймёт, что у тебя на странице. Он умеет читать обычный HTML, видит H1, видит цены, видит даты. Но он угадывает. С schema он не угадывает — он знает точно. Это блок Product с price: 1990, availability: InStock, brand: Apple. Никаких разночтений.

И главное — только с правильной schema Google имеет право показать rich results: звёзды отзывов под результатом, FAQ-аккордеон, карточку HowTo, breadcrumbs в SERP, preview видео. Без разметки этого не будет даже на идеальной странице.


Какие типы давать каждой странице

Website — на главной. Один блок sitewide, описывает сам сайт: имя, URL, потенциально SearchAction — если у тебя есть собственный поиск по сайту, Google может вытащить его прямо в SERP как «search box». Этот блок ставится один раз на главной, не дублируется на других страницах.

Organization — sitewide, на каждой странице. Название компании, логотип (URL картинки минимум 112×112 пикселей), контактные данные, sameAs — массив ссылок на твои соцсети и профили (Twitter, LinkedIn, Facebook, Wikipedia, Crunchbase). Это базовый сигнал для Knowledge Panel — той карточки справа в SERP, которая показывается по бренду. Без Organization Google не понимает, что несколько твоих доменов и аккаунтов — это одна сущность.

BreadcrumbList — на каждой странице глубже первого уровня. Описывает путь от главной до текущей страницы: Главная → Блог → Категория → Эта статья. Google рендерит этот путь в SERP вместо длинного URL — выглядит чище, занимает больше места, выделяется среди соседей. Самый простой schema-тип и одно из самых заметных улучшений в выдаче. Должен быть на ВСЁМ, что не главная.

BlogPosting — для статей блога. Поля: headline (заголовок), author (с типом Person и ссылкой на профиль автора), datePublished, dateModified, image (URL обложки), wordCount, articleSection, keywords. Опционально speakable — указывает, какие куски статьи можно зачитать голосовым ассистентом. Без BlogPosting Google понимает, что это статья, но не знает, кто автор и когда обновлено — а это E-E-A-T сигналы.

Article / NewsArticle — для общих статей и новостей. Article — родительский тип, BlogPosting и NewsArticle от него наследуются. NewsArticle используется для новостных публикаций — это сигнал для Google News. Если ты не зарегистрирован в Google News — обычно ставь BlogPosting или Article, не натягивай NewsArticle.

FAQPage — для страниц с вопросами и ответами. Внутри блока — массив Question, в каждом acceptedAnswer с типом Answer. Google рендерит это как раскрывающийся аккордеон в SERP. Работает только если вопросы реально похожи на пользовательские — «Что такое X?», «Сколько стоит Y?», «Как сделать Z?». Маркетинговое «Почему мы лучшие?» — Google проигнорит.

HowTo — для пошаговых гайдов. Внутри — массив HowToStep, у каждого text, image, опционально name и url. Дополнительно totalTime, tool, supply (инструменты и материалы). Google рендерит карточку с шагами и картинками прямо в SERP. Работает только на реально пошаговых инструкциях — «Как заменить аккумулятор», «Как настроить роутер». Не для статей вида «10 советов» — там нет последовательности шагов.

Product — для товаров. price, priceCurrency, availability (InStock / OutOfStock / PreOrder), brand, sku, gtin, condition. Внутри — aggregateRating (средняя оценка и количество отзывов) и review (отдельные отзывы). Google показывает звёзды, цену и доступность прямо в SERP. На e-commerce — это must-have, без Product schema товарные страницы в выдаче выглядят сильно хуже чем у конкурентов.

Event — для мероприятий. startDate, endDate, location (с типом Place и адресом), performer, organizer, offers (билеты с ценой). Eventstatus — EventScheduled / EventPostponed / EventCancelled / EventMovedOnline. Google рендерит карточку события в SERP и в Google Events, показывает дату, место и кнопку купить билет.

VideoObject — для видео. name, description, thumbnailUrl, uploadDate, duration, contentUrl или embedUrl. Google показывает превью видео в SERP с временем длительности. Работает даже если видео загружено не на YouTube — на свой CDN, на Vimeo, куда угодно. Без VideoObject Google вообще может не понять, что на странице есть видео.

WebApplication / SoftwareApplication — для онлайн-инструментов и приложений. applicationCategory, operatingSystem, offers (цена или freemium), featureList, aggregateRating. Google понимает, что у тебя не статья, а инструмент — и показывает соответствующие сигналы. Использую для всех своих SaaS-страниц с интерактивными чекерами.

Person — для авторских страниц и about-страниц. name, image, jobTitle, worksFor, sameAs (ссылки на профили автора в соцсетях, LinkedIn, Twitter). Это E-E-A-T сигнал: Google знает, кто автор, кем работает, где ещё его можно найти. Связываешь Person с author в BlogPosting — получаешь связанный граф автор-статьи.

Review / AggregateRating — отзывы. Review — отдельный отзыв с reviewBody, ratingValue, author и datePublished. AggregateRating — агрегированная оценка с ratingValue и reviewCount. Google показывает звёзды под результатом в SERP. Работает на товарах, услугах, рецептах, книгах, фильмах. Не работает «в среднем по сайту» — нужно привязывать к конкретной странице с конкретным контентом, который оценивается.



Распространённые ошибки

Schema не соответствует видимому контенту. Самая опасная ошибка. Ты разметил FAQPage с пятью вопросами, но на странице эти вопросы скрыты, или их там вообще нет, или они написаны другим текстом. Google это считывает. Если несоответствие систематическое — прилетает manual action: «Структурированные данные не соответствуют контенту». Snippet'ы выключаются по всему домену. Восстанавливаются месяцами. Правило простое: в schema ровно то, что видит пользователь на странице. Не больше, не меньше.

Дубли с разными @id. На одной странице два Organization блока с разными @id. Один из header.tsx, второй из layout.tsx, забыл удалить старый. Google видит, что у сайта якобы две разные организации, путается, может проигнорировать обе. Проверяй через Rich Results Test — он показывает все найденные блоки. Должен быть один Organization, один Website, один Article — по одному каждого типа.

Битый JSON. Лишняя запятая после последнего поля, незакрытая скобка, кавычки не того типа. JSON ломается весь, а не часть — Google не парсит ничего из блока. Особенно весело, когда вставляешь JSON-LD через шаблон с переменными — одна неэкранированная кавычка в title статьи, и блок мёртв. Всегда валидируй через https://search.google.com/test/rich-results после правки.

FAQPage с маркетинговыми «вопросами». «Почему стоит выбрать нас?», «Какие преимущества?», «Что нас отличает?» — Google это видит и не показывает. Алгоритм специально натренирован отсекать маркетинг. FAQPage работает, когда вопросы похожи на то, что пользователь реально вбивает в поиск: «Сколько стоит подключение?», «Сколько идёт доставка?», «Можно ли вернуть товар?». Информационные, конкретные, на одну тему.

HowTo не на пошаговом гайде. Google рендерит HowTo карточкой со шагами — потому требует, чтобы шаги действительно были последовательными и независимыми. «10 советов по SEO» — это не HowTo, это список. «Как настроить SSL-сертификат» с пятью шагами — это HowTo. Если натянешь HowTo на список советов — Google либо проигнорит, либо в худшем случае выдаст manual action за вводящую в заблуждение разметку.

Schema на статьях без author и datePublished. BlogPosting без автора — это не BlogPosting. Google не считает это валидной статьёй, не показывает в Top Stories, не учитывает как E-E-A-T сигнал. Минимум: headline, author (Person с name), datePublished, image. Без этих четырёх полей блок бесполезен.


Как добавить и проверить

JSON-LD — это inline <script type="application/ld+json">, который вставляется в <head> или <body>. Google парсит и там, и там, разницы по эффекту нет. По привычке ставят в <head>, потому что это метаданные.

В Next.js есть два пути. Первый — metadata API, начиная с App Router. В layout.tsx или page.tsx экспортируешь объект metadata, в нём можно добавить блок other → JSON-LD. Удобно для типовых случаев — Organization, Website. Второй — через dangerouslySetInnerHTML в самой странице. Создаёшь объект JS, делаешь JSON.stringify, вставляешь в <script>. Удобно для динамической schema — BlogPosting под конкретную статью, Product под конкретный товар, FAQPage с данными из CMS.

После добавления — обязательная проверка. Два инструмента:

Google Rich Results Testhttps://search.google.com/test/rich-results. Вставляешь URL или сырой код. Google показывает, какие типы он нашёл, какие поля валидны, какие rich results доступны для этой страницы. Если показывает «No items detected» — schema или не загрузилась, или невалидна.

Schema.org Validatorhttps://validator.schema.org. Более строгий, проверяет на соответствие самой спецификации schema.org. Полезен, когда ставишь экзотический тип, который Google ещё не поддерживает для rich results, но который семантически корректен.

После публикации — мониторинг в Google Search Console. Раздел Performance → Search Appearance. Google разделяет твои импрессии по типу snippet'а: обычный текст, FAQ rich result, HowTo rich result, sitelinks. Видно, какие типы реально работают, какие — не дают эффекта. Если добавил FAQPage, и через два месяца в Search Appearance не появилось «FAQ rich result» — значит, Google твою разметку не принял, или вопросы не прошли качественный фильтр.


Итог

Приоритизация по эффекту на CTR и охват:

  1. BreadcrumbList — на всём, что не главная. Простейший тип, заметный эффект в SERP, никаких рисков. Если schema нет нигде — начинай с этого.
  2. Organization и Website — sitewide. Один раз настроил, работает на всём сайте. Базовый сигнал для Knowledge Graph и бренд-выдачи.
  3. BlogPosting / Product / Event — per-page. На каждой странице соответствующего типа. Это E-E-A-T для статей и rich results для товаров и мероприятий.
  4. FAQPage — где уместно. Если у тебя реально есть FAQ-блок с пользовательскими вопросами. Не натягивай ради аккордеона.
  5. HowTo — только на реальных пошаговых гайдах. Самый строгий тип в плане качества, но и самый заметный rich result.
  6. VideoObject, Review, Person — точечно. Под конкретный контент: видео-страницы, отзывы, авторские страницы.

Schema.org — это про управление тем, как Google видит и показывает твой сайт. Сам по себе schema не двинет тебя в топ-10. Но когда ты в топ-10 — schema двигает CTR за счёт rich results, и общая позиция через 3–6 месяцев растёт уже на этом сигнале. Это один из 30 факторов SEO 2026, который недооценивают. Все возятся с meta description'ом и canonical-тегами, забывая, что rich results — это +50–200% к видимости snippet'а в выдаче, при той же позиции.

Начни с BreadcrumbList и Organization. Добавь BlogPosting на статьи. Дальше — по ситуации.

JSON-LD Schema.org: какие типы выбрать · hiregora.com