Якщо ваші товари не показуються у Google з зіркам рейтингу, ціною та статусом «в наявності» — справа майже завжди у відсутній або зламаній розмітці. Розібратися з цим простіше, ніж здається: у цій статті ви знайдете повний schema.org Product приклад для трьох найпопулярніших платформ в Україні (Shopify, Prom.ua, Horoshop), список обовʼязкових і бажаних полів, а також інструкцію, як перевірити все через Rich Results Test за 30 секунд. Розглянемо, чому Google може ігнорувати вашу розмітку навіть якщо технічно вона валідна, і як цього уникнути.
Навіщо взагалі потрібна розмітка Product
Schema.org Product — це словник властивостей, який ви додаєте у HTML сторінки товару, щоб пошуковики розуміли: ось назва, ось ціна, ось рейтинг, ось наявність. Без цієї розмітки Google бачить просто текст і картинки, а з нею — структуровану картку, яку можна показати у розширених сніпетах.
На практиці це означає:
- Ціна та валюта прямо у видачі (наприклад, «1 240 ₴»)
- Зірочки рейтингу під заголовком сторінки
- Статус «В наявності» або «Немає в наявності»
- Картинка товару у Google Images з ціною
- Підвищення CTR на 15–30% за даними кількох кейсів українських магазинів
Без розмітки ви програєте у видачі магазинам, які її налаштували — навіть якщо ваш товар дешевший і опис кращий. Тому далі розберемо, які саме поля Google вимагає від інтернет-магазину.
Обовʼязкові та бажані поля для Product
Google офіційно ділить поля schema.org Product на дві категорії: required (без них сніпет не зʼявиться взагалі) і recommended (без них працює, але гірше). Розглянемо обидві групи з прикладами реальних значень.
Обовʼязковий мінімум
Це той набір, який мусить бути в кожному товарі. Якщо чогось бракує — Rich Results Test видасть помилку, а не попередження.
- name — назва товару. Наприклад: «Кросівки Nike Air Max 90 чорні, розмір 42»
- image — URL картинки (мінімум 696 пікселів по довшому боку, формат JPG/PNG/WebP)
- description — опис від 50 до 5000 символів без HTML-тегів усередині поля
- sku або gtin/mpn — артикул або міжнародний код товару
- offers — обʼєкт з ціною, валютою та наявністю
Усередині offers Google окремо вимагає: price, priceCurrency (для України це «UAH»), availability (значення типу «https://schema.org/InStock») і url сторінки товару.
Бажані поля для розширених сніпетів
Ці поля не обовʼязкові, але саме вони дають зірочки рейтингу та інші «смаколики» у видачі:
- aggregateRating — середній рейтинг (наприклад, 4.7) і кількість оцінок
- review — масив окремих відгуків з автором і текстом
- brand — бренд товару (Nike, Samsung, локальний бренд)
- shippingDetails — інформація про доставку, час і вартість
- hasMerchantReturnPolicy — політика повернення (стала практично обовʼязковою з 2024)
Окрема порада щодо aggregateRating: Google карає за фейкові оцінки. Якщо ви ставите рейтинг 5.0 з кількістю відгуків 247, але на сторінці видно лише три відгуки — це манипуляція, і санкція прилетить швидко. Тому далі покажемо, як збирати реальні дані без накруток.
Schema.org Product приклад коду для Shopify
Shopify від коробки додає базову розмітку, але вона зазвичай неповна — не вистачає aggregateRating, shippingDetails та коректного availability для варіантів. Ось чистий JSON-LD приклад, який можна вставити у файл product.liquid або через додаток типу JSON-LD for SEO:
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "{{ product.title }}",
"image": "{{ product.featured_image | img_url: '1024x' }}",
"description": "{{ product.description | strip_html | truncate: 500 }}",
"sku": "{{ product.selected_or_first_available_variant.sku }}",
"brand": { "@type": "Brand", "name": "{{ product.vendor }}" },
"offers": {
"@type": "Offer",
"url": "{{ shop.url }}{{ product.url }}",
"priceCurrency": "UAH",
"price": "{{ product.price | money_without_currency }}",
"availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}"
}
}
</script>
Що тут важливо: {{ product.price | money_without_currency }} повертає число без символу гривні (наприклад, «1240.00»), бо Google не приймає «1240 ₴» у полі price. Якщо у вас мультивалютний магазин, динамічно підставляйте поточну валюту через cart.currency.iso_code.
Для додавання рейтингів використовуйте додатки Judge.me або Loox — вони автоматично вшивають aggregateRating у розмітку. Тепер подивимось, як те саме реалізувати на Prom.ua.
Розмітка Product для Prom.ua
Prom.ua — закрита платформа, ви не маєте прямого доступу до шаблонів. Але є три робочі варіанти.
Варіант 1: вбудована розмітка від Prom
Prom автоматично додає мінімальну Product-розмітку для всіх товарів. Перевірте через Rich Results Test — у багатьох випадках вона валідна, але без aggregateRating та shippingDetails. Якщо вас це влаштовує — нічого робити не треба.
Варіант 2: HTML-блок у описі
Prom дозволяє додавати власний HTML у поле «Опис товару». Туди можна вставити JSON-LD блок, який доповнить базову розмітку. Приклад фрагмента для aggregateRating:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Чайник електричний Bosch TWK7203",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "38"
}
}
</script>
Важливо: значення ratingValue і reviewCount мусять відповідати реальним відгукам на сторінці, інакше Google ігнорує блок.
Варіант 3: винесення товарів на власний домен
Якщо ви серйозно займаєтесь SEO, частина магазинів на Prom поступово переходять на власний сайт із кастомною розміткою. Це більше роботи, але повний контроль над schema.org та структурою URL. Для текстів на нових сторінках корисно подивитися SEO-опис товару у 2026: чек-лист на 15 пунктів — там розписано, що йде у description і яким його робити для розмітки.
Далі переходимо до Horoshop, де ситуація трохи інша.
Schema.org Product для Horoshop
Horoshop — платформа, заточена під український ринок, і базова розмітка Product у неї досить повна. Але є нюанси, які треба налаштувати руками.
У панелі адміністратора зайдіть у «SEO налаштування» → «Мікророзмітка» і перевірте, що ввімкнено:
- Тип: Product з вкладеним Offer
- Валюта: UAH (за замовчуванням може стояти інша)
- Передача наявності з товарного обліку
- Передача рейтингу з модуля відгуків
Якщо стандартного функціоналу не вистачає (наприклад, треба додати shippingDetails або hasMerchantReturnPolicy), вставте додатковий JSON-LD у блок «Скрипти у <head>» з підстановкою змінних шаблону Horoshop. Приклад для політики повернення:
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "UA",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 14,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
14 днів — це український стандарт згідно з Законом про захист прав споживачів. Не пишіть фейкових 30 чи 60 днів, якщо реально приймаєте товар лише два тижні. Окремо для Horoshop ми зібрали поради на сторінці генерації описів та SEO-контенту для Horoshop — там є шаблони, що добре стикуються з розміткою.
Тепер найважливіше: розмітка тільки тоді приносить трафік, коли вона валідна. Подивимось, як це перевірити.
Перевірка через Rich Results Test і Search Console
Google дає два безкоштовних інструменти, і обидва треба використовувати в парі.
Rich Results Test для одиничної перевірки
Перейдіть на search.google.com/test/rich-results, вставте URL сторінки товару або сам код, натисніть «Перевірити URL». За 10–20 секунд побачите:
- Які типи розмітки Google виявив (має бути «Товари (Product snippets)»)
- Які поля заповнені, а які пропущені
- Помилки (червоні — критичні) та попередження (жовті — бажано виправити)
- Превʼю того, як сніпет виглядатиме у видачі
Найчастіші помилки, які я бачу в українських магазинах: priceCurrency з пробілом («UAH »), картинки за HTTP замість HTTPS, опис коротший за 50 символів, рейтинг 0 при reviewCount 0 (треба або прибрати aggregateRating, або поставити хоча б один реальний відгук).
Search Console для масштабу
Rich Results Test перевіряє одну сторінку. Якщо у вас 5000 товарів, потрібен інший підхід: Google Search Console → «Покращення» → «Товари». Там видно динаміку — скільки сторінок мають валідну розмітку, скільки з помилками, які саме помилки повторюються.
Раджу заходити сюди раз на тиждень. Якщо бачите різкий стрибок помилок — значить, недавнє оновлення шаблону або зміна цін зламала розмітку, і це треба чинити швидко, поки Google не зняв розширені сніпети по всьому магазину.
Один важливий момент: валідна розмітка не гарантує показу розширеного сніпета. Google вирішує сам, спираючись на якість сайту і релевантність запиту. Тому паралельно з розміткою працюйте над контентом — про це далі.
Типові помилки і як їх уникнути
За три роки роботи з українськими магазинами я бачив ті самі граблі знову і знову. Ось список, складений за частотою:
- Дублювання розмітки — на сторінці два JSON-LD блоки Product з різними даними (наприклад, від теми Shopify і додатка). Google обирає випадковий — зазвичай не той.
- Ціна з пробілами та символом валюти — «1 240 грн» замість «1240». Поле price чекає чисте число.
- Опис обрізаний посередині речення — коли description тягнеться з повного тексту через
truncate: 500, виходить «...купуйте у нашому магаз». Краще тримати окреме коротке поле. - Картинки з водяним знаком магазину — Google не дискваліфікує, але CTR у видачі падає.
- aggregateRating без реальних відгуків на сторінці — пряме порушення політик, ручний санкційний відключ розширених сніпетів по всьому сайту.
- Однакові описи на варіантах товару — це не помилка розмітки, але вбиває індексацію. Тут допоможе матеріал Уніфікація описів товарів: як прибрати дублі від постачальника.
- Невідповідність розмітки і видимого вмісту — у JSON-LD ціна 990 грн, а на сторінці 1290 грн. Google вважає це шахрайством.
Окреме слово про опис. Розмітка — це обгортка, а всередині має бути якісний текст. Якщо ваш description короткий і шаблонний, навіть бездоганна schema.org не врятує позиції. Як писати тексти, що паралельно працюють і на SEO, і на читача, ми розібрали у статті Структурований опис товару: H2, списки, FAQ — приклади коду.
А тепер фінальний блок — короткі відповіді на запитання, які найчастіше ставлять у нашій підтримці.
FAQ: швидкі відповіді на часті запитання
Чи можна використовувати microdata замість JSON-LD?
Технічно можна — Google розуміє обидва формати. Але офіційна рекомендація Google з 2017 року — саме JSON-LD: його простіше підтримувати, він не плутається з HTML-розміткою, його легше додати через GTM. Microdata залишається у спадок від старих CMS.
Що робити, якщо товар закінчився?
Не видаляйте сторінку. Залиште її доступною, але змініть availability на https://schema.org/OutOfStock і додайте на сторінці блок «Повідомити про надходження». Google продовжить індексувати її, а коли товар повернеться — позиції відновляться швидше, ніж якби ви створювали URL з нуля.
Скільки відгуків потрібно, щоб зʼявилися зірочки у видачі?
Офіційного мінімуму немає, але на практиці Google показує рейтинг від 3–5 реальних відгуків. До цього порогу краще не додавати aggregateRating взагалі — буде виглядати штучно.
Чи потрібна gtin, якщо у мене унікальний товар власного виробництва?
Ні. Для унікальних товарів достатньо sku. GTIN/EAN/UPC потрібні тільки коли товар має міжнародний штрих-код (типово для брендів масмаркету).
Як часто Google переобходить сторінки після зміни розмітки?
Від кількох годин до 2–3 тижнів залежно від авторитету сайту і частоти обходу. Прискорити можна через «Перевірити URL» у Search Console → «Запросити індексацію». Робіть це після кожної серйозної зміни розмітки.
Що далі
Розмітка Product — це фундамент технічного SEO для магазину, але далеко не вся робота. Поруч стоять описи товарів, унікальні заголовки, картинки з alt-текстом, внутрішня перелінковка. Якщо вручну робити це для сотень або тисяч SKU — ви просто згорите. Тому ми зробили Revenza: платформу, яка генерує SEO-описи, заголовки, метатеги і структуровані блоки одразу для всіх ваших товарів, з підтримкою Shopify, Prom, Horoshop та WooCommerce. Можна зареєструватися безкоштовно і протестувати на десятці карток — побачите різницю у видачі за 2–3 тижні. А якщо вже маєте чіткий schema.org Product приклад, що працює — поділіться з командою, бережіть час один одного.
