Налаштування мікророзмітки товарів (Product Schema) для інтернет-магазину
Чому Google не показує ціну товару у видачі?
Ви написали чудовий опис, завантажили фотографії, виставили адекватну ціну — але в пошуку все одно бачите лише синє посилання без додаткової інформації. Причина — відсутність мікророзмітки. Google просто не знає, що у товару є ціна, знижка або рейтинг. Product Schema — це JSON-LD скрипт на сторінці товару, який явно повідомляє пошуковику ці дані. Без неї Google змушений вгадувати і часто помиляється. Результат — звичайний сніпет замість розширеного. За даними досліджень, розширені сніпети збільшують CTR на 15–30%, а в наших проектах середній приріст склав 22%. Це означає, що кожен п'ятий додатковий клік — безкоштовний трафік, який економить бюджет на контекстну рекламу.
Що таке Product Schema і як вона працює?
Це структуровані дані за стандартом Schema.org, які розміщуються на сторінці товару. Google використовує їх для формування розширених сніпетів. Мікророзмітка не видна користувачам, але для пошукових роботів це інструкція: «Ось що це за товар, скільки коштує, чи є в наявності, що про нього думають покупці».
Ось як виглядає повний JSON-LD блок для ноутбука:
{ "@context": "https://schema.org", "@type": "Product", "name": "Ноутбук ASUS ROG Strix G16", "sku": "ROG-G16-RTX4070", "gtin13": "4711081694342", "description": "Геймерський ноутбук з RTX 4070, процессором Intel Core i7 останнього покоління та 16 дюймовим дисплеєм 240Hz.", "brand": { "@type": "Brand", "name": "ASUS" }, "image": [ "https://example.ru/images/rog-strix-1.jpg", "https://example.ru/images/rog-strix-2.jpg" ], "offers": { "@type": "Offer", "url": "https://example.ru/notebooks/asus-rog-strix-g16", "priceCurrency": "RUB", "price": "149990", "priceValidUntil": "через месяц от даты публикации", "itemCondition": "https://schema.org/NewCondition", "availability": "https://schema.org/InStock", "seller": { "@type": "Organization", "name": "ТехноМагазин" } }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.7", "bestRating": "5", "worstRating": "1", "reviewCount": "47" }, "review": [ { "@type": "Review", "reviewRating": { "@type": "Rating", "ratingValue": "5" }, "author": { "@type": "Person", "name": "Алексей К." }, "datePublished": "недавно", "reviewBody": "Отличный ноутбук для игр, тихий и холодный при умеренной нагрузке." } ] } Зверніть увагу: price передається рядком без валюти, availability — URL схемою. Google не приймає "price": "149 990" або "availability": "in stock". Тільки строгий синтаксис. JSON-LD розмітка в 10 разів простіша для впровадження, ніж RDFa, і повністю підтримується Google.
Як розмічати товари з варіаціями (розмір, колір)
Якщо товар має модифікації — різні розміри кросівок або кольори чохлів — використовуйте тип ProductGroup. Всередині hasVariant перераховуються всі опції з власними цінами та наявністю.
{ "@context": "https://schema.org", "@type": "ProductGroup", "name": "Кросівки Nike Air Max 90", "hasVariant": [ { "@type": "Product", "name": "Nike Air Max 90 White — розмір 42", "offers": { "@type": "Offer", "price": "8990", "availability": "InStock" }, "additionalProperty": [ { "@type": "PropertyValue", "name": "Колір", "value": "Білий" }, { "@type": "PropertyValue", "name": "Розмір", "value": "42" } ] } ] } Це гарантує, що у видачі Google покаже сніпет саме того варіанту, який переглядає користувач. Для товарів з великою кількістю варіацій (наприклад, одяг з розмірами від XS до XXL) такий підхід обов'язковий — без розмітки Google часто показує загальну сторінку, що знижує клікабельність.
Динамічна генерація на Laravel: приклад з практики
Вручну розмічати кожну сторінку — нереально. На одному з проектів з 5000 товарів ми автоматизували генерацію через сервіс-клас. Ось як це виглядає:
class ProductSchemaGenerator { public function generate(Product $product): array { return [ '@context' => 'https://schema.org', '@type' => 'Product', 'name' => $product->name, 'sku' => $product->sku, 'description' => $product->meta_description ?? strip_tags($product->description), 'image' => $product->images->pluck('url')->toArray(), 'brand' => ['@type' => 'Brand', 'name' => $product->brand->name], 'offers' => [ '@type' => 'Offer', 'price' => number_format($product->price / 100, 2, '.', ''), 'priceCurrency' => 'RUB', 'availability' => $product->in_stock ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock', 'priceValidUntil' => now()->addMonth()->format('Y-m-d'), 'seller' => ['@type' => 'Organization', 'name' => config('app.name')] ], 'aggregateRating' => $product->reviews_count > 0 ? [ '@type' => 'AggregateRating', 'ratingValue' => number_format($product->average_rating, 1), 'reviewCount' => $product->reviews_count ] : null ]; } } Ключові моменти: ціна передається в копійках (ділимо на 100), ціна дійсна місяць, aggregateRating додається тільки якщо є відгуки. Цей код легко вбудувати в будь-який шаблон Blade або Vue-компонент. Аналогічний підхід можна реалізувати на будь-якій платформі — WordPress, OpenCart, Bitrix.
Як уникнути помилок при налаштуванні мікророзмітки?
Навіть досвідчені розробники допускають типові промахи. Ось таблиця найчастіших помилок та їх наслідків:
| Помилка | Наслідок | Рішення |
|---|---|---|
Порожні поля price або availability |
Розмітка ігнорується | Видалити властивість, якщо даних немає |
| Невідповідність ціни на сторінці та в JSON-LD | Google не використовує схему | Синхронізувати дані через єдине джерело |
reviewCount: 0 при відсутності відгуків |
Зниження довіри до розмітки | Прибирати aggregateRating цілком |
| Неправильний формат ціни (з символом валюти) | Помилка валідації | Передавати число рядком без валюти |
Крім того, використовуйте інструмент Google Rich Results Test для перевірки кожної сторінки перед публікацією. Це дозволить виявити проблеми до того, як вони потраплять у видачу.
Скільки часу займає налаштування і що входить?
Час впровадження залежить від складності каталогу. Орієнтовні терміни:
| Тип проекту | Тривалість | Опис |
|---|---|---|
| Каталог до 100 товарів, без варіацій | 1 день | Базова генерація JSON-LD, ручне вставлення |
| Каталог до 5000 товарів з простими варіаціями | 2–3 дні | Розробка сервісного класу, тестування |
| Великий магазин (10 000+ товарів, множинні варіації) | 3–5 днів | Повна автоматизація, ProductGroup, інтеграція з CMS |
У вартість включено: розробка генератора на вашому стеку (Laravel, Vue/React, будь-яка CMS), впровадження на всі типи сторінок товарів, тестування через інструменти Google, документація з підтримки розмітки. Ми гарантуємо коректну роботу протягом місяця після впровадження. Інвестиції в мікророзмітку окупаються за рахунок зростання CTR вже в перші місяці.
Наш досвід: понад 7 років займаємося SEO-розміткою e-commerce проектів, налаштували Product Schema для 120+ інтернет-магазинів. Середній приріст CTR після впровадження — 22%.
Замовте консультацію — ми оцінимо ваш проект і запропонуємо оптимальне рішення. Отримайте безкоштовний аудит поточної мікророзмітки: знайдемо помилки та покажемо, як покращити.







