Перейти к основному содержанию
🇷🇺

Пример Product Schema для Shopify-одежды

Готовые к копированию JSON-LD Product и ProductGroup примеры для Shopify-одежды — охватывает варианты по размеру и цвету, offers, хлебные крошки, и правила AggregateRating, которые определяют, действительно ли AI-движки цитируют вашу страницу товара.

4 min read

Страницы товаров одежды на Shopify цитируются AI-движками шопинга на основе того, насколько точно JSON-LD описывает ландшафт вариантов. Покупатель, спрашивающий «льняная рубашка, которая сидит по размеру в medium» в ChatGPT, Perplexity или Gemini, нуждается в том, чтобы AI распознал, что конкретный вариант существует, есть в наличии, имеет цену, и описан отдельно от вариантов L и XL. Общая schema Product без деталей вариантов заставляет AI угадывать; ProductGroup с hasVariant даёт ему данные для уверенного цитирования.

Этот пример даёт два готовых к копированию JSON-LD блока: ProductGroup для матрицы вариантов и BreadcrumbList для контекста категории. Оба откалиброваны для чистого прохождения Google Rich Results Test и отражения видимого содержимого страницы (правило, которое AI-движки действительно применяют на практике).

Когда использовать Product vs ProductGroup

СлучайSchemaПочему
Моно-SKU товар (один размер, один цвет)ProductНет матрицы вариантов — ProductGroup излишен.
Одежда только с вариантами размераProductGroup + variesBy: sizeAI-запросы шопинга обусловлены размером.
Одежда только с вариантами цветаProductGroup + variesBy: colorAI-запросы обусловлены цветом.
Одежда с матрицей размер × цветProductGroup + оба variesByДекартово произведение вариантов; каждый hasVariant уникальный SKU.
Bundle / kit (несколько родителей)Product на item + кастомный isRelatedToProductGroup описывает варианты одного товара, не мульти-товарные bundle-ы.

Стандартные Liquid-шаблоны Shopify выдают Product независимо от количества вариантов. Апгрейд до ProductGroup для любого магазина одежды с несколькими размерами — одноразовое редактирование темы (или Shopify-приложение, которое делает это автоматически); прирост цитирования AI-шопингом стоит усилий.

ProductGroup JSON-LD (одежда с вариантами)

Вставьте в шаблон страницы товара, заменив значения-заглушки. Пример показывает подмножество из 2 вариантов; в продакшене у вас будет одна запись hasVariant на реальный SKU.

ProductGroup JSON-LD (варианты одежды) json
{
  "@context": "https://schema.org",
  "@type": "ProductGroup",
  "name": "Linen Relaxed Shirt",
  "description": "A breathable linen shirt in three colors, sizes XS–XL. 100% European linen, pre-washed for softness.",
  "brand": {
    "@type": "Brand",
    "name": "Example Apparel"
  },
  "productGroupID": "linen-shirt-001",
  "variesBy": ["https://schema.org/size", "https://schema.org/color"],
  "hasVariant": [
    {
      "@type": "Product",
      "sku": "LINEN-SHIRT-WHITE-M",
      "name": "Linen Relaxed Shirt — White / M",
      "color": "White",
      "size": "M",
      "material": "Linen",
      "image": "https://example.com/products/linen-shirt-white.jpg",
      "offers": {
        "@type": "Offer",
        "url": "https://example.com/products/linen-shirt?variant=white-m",
        "priceCurrency": "USD",
        "price": "79.00",
        "availability": "https://schema.org/InStock",
        "itemCondition": "https://schema.org/NewCondition"
      }
    },
    {
      "@type": "Product",
      "sku": "LINEN-SHIRT-BLACK-S",
      "name": "Linen Relaxed Shirt — Black / S",
      "color": "Black",
      "size": "S",
      "material": "Linen",
      "image": "https://example.com/products/linen-shirt-black.jpg",
      "offers": {
        "@type": "Offer",
        "url": "https://example.com/products/linen-shirt?variant=black-s",
        "priceCurrency": "USD",
        "price": "79.00",
        "availability": "https://schema.org/InStock",
        "itemCondition": "https://schema.org/NewCondition"
      }
    }
  ]
}

Свяжите ProductGroup с BreadcrumbList, чтобы AI-движки понимали иерархию категории, в которой живёт ваш товар. URL хлебных крошек должны точно совпадать с видимыми хлебными крошками страницы.

BreadcrumbList JSON-LD json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://example.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Shirts",
      "item": "https://example.com/collections/shirts"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Linen Relaxed Shirt",
      "item": "https://example.com/products/linen-shirt"
    }
  ]
}

Частые ошибки (по частоте)

  1. Размечать варианты, которые не видны и не выбираемы на странице. Schema должна отражать видимую реальность. Если ваша страница товара показывает только S / M / L, но JSON-LD объявляет XS до XXL, AI-движки рано или поздно попытаются процитировать вариант, который 404, и понизят магазин.

  2. Использовать AggregateRating без виджета отзывов. Либо отображайте отзывы видимо (приложение Shopify Reviews), либо удалите поле schema. Не фабрикуйте.

  3. Несоответствие currency, цены или наличия между schema и видимой страницей товара. Покупатель видит $79, но schema объявляет 89.00 — AI-движки берут число из schema, цитируют его, покупатель чувствует себя обманутым. Хуже: Google помечает schema как ненадёжную.

  4. Повторное использование того же sku для нескольких вариантов. Shopify генерирует уникальные SKU, но мерчанты часто перезаписывают их. Дублирующиеся SKU в hasVariant приводят к тому, что AI-движки неправильно объединяют варианты.

  5. Смешивание ProductGroup и Product так, что специфичные для варианта имена теряются. Если вы выдаёте оба для одного и того же item, убедитесь, что экземпляр Product — это родитель (без деталей вариантов) и ProductGroup.hasVariant содержит варианты. Не выдавайте Product для каждого варианта вне группы.

  6. Добавление медицинских или неподтверждённых заявлений к описаниям одежды. «Корректирующая осанку» / «улучшает кровообращение» / «антибактериальная ткань предотвращает кожные болезни» — это регулируемые заявления на большинстве рынков и триггерят понижение AI даже когда законно. Оставайтесь при описаниях посадки и материала.

  7. Указание URL schema на неканонические URL вариантов. Если страница использует одну каноническую URL товара (например, /products/linen-shirt), а варианты выбираются через query-param (?variant=white-m), hasVariant[].offers.url должен всё равно указывать на специфичную для варианта URL — там приземляются покупатели (и AI-агенты).

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

  1. Вставьте развёрнутую URL товара в

    Google Rich Results Test

    . Элементы Product и BreadcrumbList должны валидироваться.
  2. Пройдите чек-лист валидации выше поле за полем.
  3. Откройте страницу в режиме инкогнито и проверьте, что видимый H1 товара, цена, наличие и хлебные крошки все совпадают с тем, что объявляет schema.
  4. Перезапустите Генератор Schema, если меняете структуру товара (новый цвет, удалённый размер), и передеплойте.

JSON-LD — это один сигнал в стеке AI-шопинга. Свяжите с шаблоном llms.txt fashion для стороны карты контента, и проверьте с помощью Анализатора Robots, что GPTBot может достучаться до страницы товара.

Контрольный список проверки

  • Название товара в schema совпадает с видимым H1

    Поле `name` ProductGroup точно совпадает с H1 на странице товара (регистр + пунктуация). AI-движки понижают несовпадения как сигнал низкого доверия.

  • У каждого варианта уникальный SKU

    Никакие два значения `hasVariant[].sku` не сталкиваются. Shopify авто-генерирует SKU, но мерчанты часто перезаписывают — дублирующиеся SKU в schema приводят к тому, что AI-движки неправильно объединяют варианты.

  • Названия вариантов идентифицируют размер / цвет / материал

    Каждый `hasVariant[].name` читается как реальная этикетка товара (например, «Linen Relaxed Shirt — White / M»), не заглушка. AI-ответы шопинга цитируют это поле напрямую.

  • productGroupID стабилен между развёртываниями

    `productGroupID` должен быть стабильным внутренним идентификатором (Shopify product GID или собственный slug), не случайным build-time UUID. AI-движки используют его для дедупликации одного товара между перезагрузками страницы.

  • У каждого Offer есть currency + price + availability + URL

    Блок `offers` каждого варианта имеет `priceCurrency`, `price`, `availability`, `url`. Отсутствие currency — причина №1, по которой Google Rich Results Test понижает результат Product.

  • AggregateRating присутствует только если видны реальные отзывы

    Если вы выдаёте `aggregateRating`, тот же рейтинг + число отзывов должны быть видны на странице товара. AI-движки сравнивают schema с видимым содержимым; сфабрикованные рейтинги триггерят понижение.

  • BreadcrumbList совпадает с видимыми хлебными крошками

    Цепочка URL `itemListElement` schema точно совпадает с видимыми хлебными крошками страницы (тот же путь, те же метки). Расхождения сбивают с толку AI-движки, использующие контекст хлебных крошек для понимания категории.

  • Rich Results Test не возвращает критических ошибок

    После развёртывания вставьте URL товара в https://search.google.com/test/rich-results — элементы Product и BreadcrumbList должны валидироваться без критических ошибок.

Открыть в генераторе Schema

Предзаполнено заглушками одежды для названия товара, описания, бренда, цены, наличия и рейтингов. Замените заглушки реальными данными товара и скачайте готовый для Shopify JSON-LD блок.

Часто задаваемые вопросы

Должен ли товар Shopify-одежды использовать Product или ProductGroup?

Используйте `Product` для простого товара без вариантов. Используйте `ProductGroup`, как только существуют варианты по размеру, цвету или материалу — это позволяет AI-движкам цитировать правильный вариант для конкретного запроса («льняная рубашка размера M») вместо их смешения. Стандартные Liquid-шаблоны Shopify выдают только `Product`; апгрейд до `ProductGroup` ручной, но стоит того для любого магазина одежды с несколькими размерами.

Можно ли выдавать AggregateRating без видимых отзывов на странице?

Нет. Schema должна отражать видимое содержимое. Если вы выдаёте `aggregateRating: 4.7 from 32 reviews`, но на странице товара нет виджета отзывов, AI-движки и Google помечают это как ненадёжное. Либо отрендерите отзывы видимо (приложения Shopify такие как Judge.me или нативный Shopify Reviews), либо удалите поле schema полностью.

Должен ли каждый вариант цвета быть отдельной записью hasVariant?

Да, когда у варианта различные SKU, цвет, размер, изображение, цена или наличие. AI-движкам шопинга, отвечающим «есть ли ещё в наличии чёрная льняная рубашка», нужен каждый вариант как отдельно адресуемый узел Product с собственным `offers.availability`. Только цвет → один `hasVariant` на цвет; только размер → один на размер; размер+цвет → декартово произведение.

Заменяет ли schema ProductGroup продуктовые feed-ы Shopify?

Нет. JSON-LD на странице дополняет feed-ы (авто-генерируемый Shopify `/products.json`, Google Merchant feed, Meta Catalog). AI-движки шопинга сканируют страницы напрямую *и* читают feed-ы — оба сигнала важны. Не отказывайтесь от одного ради другого.

Связанные ресурсы