Блог

SEO 7 хв читання

JSON-LD розмітка: готові приклади та генератор на PHP

JSON-LD – формат структурованих даних, який рекомендує Google. У цьому гайді пояснюємо, що варто розмічати, показуємо готові приклади для найкорисніших типів schema.org та патерн на PHP, яким ми генеруємо коректну розмітку на кожній сторінці без ручного JSON.

Обкладинка статті: JSON-LD розмітка: готові приклади та генератор на PHP

Коротко

  • 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 у цьому блозі.

Перевірка та моніторинг

  1. Rich Results Test – придатність для типів розширених результатів Google.
  2. Schema Markup Validator – загальний синтаксис schema.org для будь-якого типу.
  3. Звіти про покращення в Search Console (хлібні крихти, товари, FAQ та інші) - помилки та попередження в масштабі сайту після сканування сторінок Google.
  4. Юніт-тест, який рендерить кожен шаблон і перевіряє, що 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 лишається в контурі.