JSON-LD разметка: готовые примеры и генератор на PHP
JSON-LD - формат структурированных данных, который рекомендует Google. В этом гайде объясняем, что стоит размечать, показываем готовые примеры для самых полезных типов schema.org и паттерн на PHP, которым мы генерируем корректную разметку на каждой странице без ручного JSON.
Коротко
- JSON-LD - это блок
<script type="application/ld+json">на странице, который описывает её машинам словарём schema.org. - Размечайте только то, что пользователь видит на странице. Разметка, не совпадающая с контентом, грозит ручными санкциями и ничего не даёт.
- Начните с
Organization,BreadcrumbListиArticleилиProduct, аFAQPage,ServiceиLocalBusinessдобавляйте там, где они подходят. - Генерируйте JSON на PHP из массивов через
json_encode, один@graphна страницу, со стабильными значениями@id. - Проверяйте шаблоны в Rich Results Test и Schema Markup Validator и следите за отчётами улучшений в Search Console.
JSON-LD разметка сообщает поисковым системам в машиночитаемом виде, чем является страница: статьёй, товаром с ценой, компанией с контактами, списком вопросов и ответов. Посетители её не видят, она не заменяет хороший контент и сама по себе не поднимает позиции. Зато она делает страницу пригодной для расширенных результатов, помогает поисковикам связать ваши страницы с нужной сущностью и даёт ИИ-поиску более чистый источник. Мы генерируем её на каждой странице integrono.com и других своих сайтов, а этот гайд - практическая версия этой работы.
JSON-LD, Microdata и RDFa
Словарь schema.org можно встроить тремя синтаксисами. Microdata и RDFa добавляют атрибуты в HTML-теги, из-за чего разметка переплетается с шаблонами. JSON-LD живёт в одном блоке script отдельно от вёрстки, его проще генерировать, тестировать и менять. Google рекомендует JSON-LD, и мы используем именно его везде.
Принципы до примеров
- Описывайте видимый контент. Если цены, рейтинга или FAQ нет на странице, их не должно быть и в разметке.
- Используйте абсолютные URL и канонический адрес страницы.
- Заполняйте обязательные свойства полностью и добавляйте рекомендуемые, когда у вас есть реальные данные.
- Связывайте сущности через
@id. Автор статьи - организация, описанная один раз с@id, а не новая копия каждый раз. - Используйте даты в формате ISO 8601 (
2026-10-28или со временем и часовым поясом). - Не выдумывайте отзывы и рейтинги. Фальшивый
AggregateRating- частая причина ручных санкций.
Пример 1. Organization (и WebSite)
Разместите на главной странице или в общем для сайта графе. Он описывает сущность, на которую ссылается остальная разметка.
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Example Studio",
"url": "https://example.com/",
"logo": "https://example.com/images/logo.png",
"email": "[email protected]",
"sameAs": [
"https://github.com/example",
"https://www.linkedin.com/company/example"
]
}
Пример 2. BreadcrumbList
Разметка хлебных крошек позволяет Google показывать путь к странице вместо сырого URL в выдаче. Она должна совпадать с видимыми крошками.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/"},
{"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://example.com/blog"},
{"@type": "ListItem", "position": 3, "name": "JSON-LD guide", "item": "https://example.com/blog/json-ld-guide"}
]
}
Пример 3. Article
Для статей блога и гайдов. Важные свойства: заголовок, даты, автор, издатель, изображение и адрес страницы.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "JSON-LD structured data: examples",
"description": "Short summary of the article.",
"url": "https://example.com/blog/json-ld-guide",
"mainEntityOfPage": "https://example.com/blog/json-ld-guide",
"inLanguage": "en",
"datePublished": "2026-08-23",
"dateModified": "2026-10-28",
"author": {"@id": "https://example.com/#organization"},
"publisher": {"@id": "https://example.com/#organization"},
"image": {"@type": "ImageObject", "url": "https://example.com/images/blog/json-ld.webp", "width": 1200, "height": 630}
}
Меняйте dateModified только когда контент действительно изменился. Обновление даты при каждом деплое - тихий способ потерять доверие.
Пример 4. Product с Offer
Для страниц товаров с видимой ценой. Укажите наличие и валюту, а aggregateRating или review добавляйте, только если реальные отзывы показаны на странице.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Example product",
"description": "What it is and who it is for.",
"image": ["https://example.com/images/product.webp"],
"sku": "EX-001",
"brand": {"@type": "Brand", "name": "Example"},
"offers": {
"@type": "Offer",
"url": "https://example.com/product/ex-001",
"priceCurrency": "EUR",
"price": "49.00",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}
Пример 5. Service с Offer
Для платных услуг, например аудита с фиксированной ценой или почасовой консультации. Такой паттерн мы используем на страницах собственных услуг.
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Architecture review",
"serviceType": "Software architecture analysis",
"provider": {"@id": "https://example.com/#organization"},
"areaServed": "Worldwide",
"offers": {
"@type": "Offer",
"price": "200",
"priceCurrency": "EUR",
"url": "https://example.com/services/architecture-review"
}
}
Пример 6. FAQPage
Разметка FAQ описывает список вопросов и ответов, которые видны на странице. Учтите, что с 2023 года Google показывает FAQ-сниппеты только для ограниченного круга авторитетных сайтов, поэтому не ждите раскрывающихся ответов в выдаче. Разметка остаётся валидной, её читают другие поисковики и ИИ-системы, и она держит FAQ в структуре, которую машины могут цитировать.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Do I need structured data to rank?",
"acceptedAnswer": {"@type": "Answer", "text": "No. It is not a ranking requirement, but it can make pages eligible for rich results."}
}
]
}
Объедините всё в одном @graph
На странице редко бывает одна сущность. Поместите все в один script с помощью @graph и ссылайтесь на общие сущности по @id:
{
"@context": "https://schema.org",
"@graph": [
{"@type": "Organization", "@id": "https://example.com/#organization", "name": "Example Studio"},
{"@type": "Article", "headline": "...", "author": {"@id": "https://example.com/#organization"}},
{"@type": "BreadcrumbList", "itemListElement": []},
{"@type": "FAQPage", "mainEntity": []}
]
}
Безопасная генерация JSON-LD на PHP
Не собирайте JSON строками вручную. Кавычка в заголовке ломает весь блок, и поисковик молча его игнорирует. Соберите массив PHP и закодируйте его. Важны два набора флагов: читаемый Unicode и защита HTML-контекста через экранирование слэшей и тегов.
function jsonLdScript(array $graph): string
{
$data = ['@context' => 'https://schema.org', '@graph' => $graph];
$json = json_encode(
$data,
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP | JSON_THROW_ON_ERROR
);
return '<script type="application/ld+json">' . $json . '</script>';
}
$graph = [
['@type' => 'Organization', '@id' => $site . '/#organization', 'name' => 'Example Studio', 'url' => $site . '/'],
[
'@type' => 'Article',
'headline' => $title,
'url' => $canonical,
'datePublished' => $published,
'dateModified' => $modified,
'author' => ['@id' => $site . '/#organization'],
],
];
echo jsonLdScript($graph);
JSON_HEX_TAG превращает < и > в escape-последовательности, поэтому пользовательский контент не сможет досрочно закрыть тег script. Передавайте в генератор те же данные, из которых строится страница (заголовок, цена, даты), чтобы разметка и видимый контент не расходились. На многоязычном сайте переводите текстовые поля и задавайте inLanguage для каждой локали: именно так сделана разметка статей и FAQ в этом блоге.
Проверка и мониторинг
- Rich Results Test - пригодность для типов расширенных результатов Google.
- Schema Markup Validator - общий синтаксис schema.org для любого типа.
- Отчёты об улучшениях в Search Console (хлебные крошки, товары, FAQ и другие) - ошибки и предупреждения в масштабе сайта после сканирования страниц Google.
- Юнит-тест, который рендерит каждый шаблон и проверяет, что JSON-LD парсится и содержит нужные ключи, предотвращает регрессии после рефакторинга.
Ошибки, которые стоят дорого
- Разметка контента, которого нет на странице (скрытый FAQ, выдуманные рейтинги, цены, отличающиеся от видимых).
- Несколько конфликтующих блоков от плагина и шаблона с разными
Organization. - Относительные URL, неверные даты или отсутствие
@id. - Сломанный JSON из-за ручной сборки строк и неэкранированных кавычек.
- Разметка как трюк для ранжирования. Это инструмент ясности, а страница всё равно должна заслужить позиции.
Чем мы можем помочь
Структурированные данные - часть нашей работы по техническому SEO: мы проектируем схему для ваших шаблонов, реализуем генератор в вашем стеке и настраиваем проверки, чтобы разметка оставалась корректной после релизов. Если хотите увидеть общую картину проблем сайта, начните с нашего чек-листа технического SEO-аудита или запишитесь на консультацию.
Частые вопросы
Что такое JSON-LD разметка?
Это блок script с данными schema.org в формате JSON, который описывает содержимое страницы для поисковых систем, например статью, товар, организацию или FAQ.
Улучшает ли структурированная разметка позиции?
Напрямую нет. Она помогает поисковикам понять страницу и делает её пригодной для расширенных результатов, что может повысить CTR, но не является требованием ранжирования.
Куда вставлять скрипт JSON-LD?
В любое место HTML, чаще всего в head. Он должен присутствовать в отрисованном HTML, который получает Google, поэтому надёжнее всего генерировать его на сервере.
Стоит ли добавлять разметку FAQPage?
Google показывает FAQ-сниппеты только для ограниченного круга сайтов, но валидную разметку читают другие поисковики и ИИ-системы. Добавляйте её только для вопросов и ответов, которые видны на странице.
Как проверить структурированные данные?
Используйте Rich Results Test от Google для расширенных результатов, Schema Markup Validator для общего синтаксиса и отчёты об улучшениях в Search Console для отслеживания ошибок по всему сайту.
Бесплатный discovery-звонок
Хаотичный стек или зависшая интеграция - Integrono наметит самый умный первый шаг.
Вы получаете senior-взгляд на бюджетные ловушки, зависимости и когда покупать, склеивать или писать - до старта оплаты. CEO остаётся в контуре.