Микроразметка Product — это машиночитаемый оффер на URL карточки: имя, цена, валюта и наличие, которые совпадают с тем, что видит человек. Это не словарь типов и не обещание звёзд в выдаче. Хаб — SEO интернет-магазина. Как пишется сам документ покупки — SEO карточек товаров. Формат JSON-LD и политики соответствия — structured data. Каталог типов — Schema.org. Как Google рисует расширение — rich snippets.
Плагин, который вешает Product на категорию, статью «как выбрать» и главную, даёт кабинету ошибки, а Поиску — одну «цену от» на чужой интент. Разметка не заменяет видимое предложение и не чинит пустую карточку.
Какой тип на какой URL
| URL | Честный тип | Частая подмена |
|---|---|---|
| Карточка одного SKU / одной вариации с кнопкой купить | Product + Offer |
Article «про товар» без оффера |
| Одна модель, несколько офферов на том же адресе | Product + AggregateOffer (lowPrice) или группа вариаций |
Один Offer с чужой «ценой от» |
| Семья вариаций со своими адресами | ProductGroup + hasVariant — см. вариации товаров |
Девять независимых Product без связи |
| Листинг категории или фильтра | У Яндекса OfferCatalog с вложенными Offer |
Один Product на всю сетку |
| Гид «как выбрать кроссовки» | Статья, не товар | Product «чтобы были звёзды» |
Google делит два слота. Product snippet принимает Offer или AggregateOffer. Merchant listing требует именно Offer: продавец должен быть тем, кто продаёт, и цена в разметке — больше нуля. Кабинет фида — соседний H1, сюда его не тащим: но справка Merchant Center уже сейчас требует, чтобы наличие в фиде совпало с посадочной, чекаутом и structured data.
Минимум полей, без которого слой врать не должен
Яндекс.Вебмастер: чтобы робот распознал товар, страницу размечают Product плюс Offer или AggregateOffer. У оффера обязательны availability, price или lowPrice, priceCurrency. Для рублей в справке указан код ISO 4217: RUB. Если в Offer стоит «нет в наличии», цену в сниппете Картинок не показывают. Разметку робот может пропустить, если схема битая; на факт индексации URL это само по себе не влияет. Срок «до двух недель» на сбор специального сниппета — из той же товарной справки, не SLA.
Search Central для оффера: текущая цена и валюта ISO 4217. Если одновременно заданы offers.price и priceSpecification, Google берёт offers.price. Наличие — одно значение из списка (InStock, OutOfStock, PreOrder, BackOrder и остальные из справки), не два статуса сразу. Для merchant listing цена ноль не подходит — в отличие от product snippet, где нулевая цена допустима как «без оплаты».
- Сначала цена, название и наличие в HTML. Нет факта на экране — нечему соответствовать. Политика structured data прямо запрещает прятать оффер только в JSON-LD.
- Один канонический товар на URL. Два плагина с разными ценами — дыра, не «полнота».
- Валюта и число как в витрине. Для РФ в оффере
RUB; в фиде для стран вне US/CA справка Merchant просит включать НДС в цену. Не выдумываем «правильный» процент налога — сверяем с тем, что видит покупатель. - Идентификатор вариации: свой
sku/ GTIN на тот оффер, который в корзине. Родитель без цены — неProductс кнопкой. - Отзывы — только если корпус видимый и про этот SKU. Разбор — отзывы на карточках, не поле «для звёзд».
Где слой расходится с витриной
- Цена в JSON вчерашняя, на экране — акция. Поиск показывает чужую цифру; Яндекс прямо называет недостоверную микроразметку поводом снять структурированные сниппеты.
- Наличие
InStockпри кнопке «нет в наличии». Состояние документа — на товарах без наличия: при нулевом остатке цена на посадочной всё равно должна быть видна, если вы отдаёте товар как оффер. Productна ЧПУ фильтра. Робот получает одну модель на сетку SKU.- Микроразметка на URL, который закрыт
noindexили каноникалом на категорию. Слот уезжает не туда или не собирается.
Product schema читает оффер, который уже правда на странице. Скрытая цена «для сниппета» — спам слоя, не товарная оптимизация.
Проверка: Rich Results Test и инспектор URL на проде, валидатор Вебмастера для Яндекса. Смотрите не «зелёную галочку словаря», а совпали ли имя, цена, валюта и наличие с первым экраном. Товарный документ в выдаче Яндекса — товарные страницы. Если карточки живые, а заявку забирает чужая витрина, это постановка SEO-продвижения. Рамка метода — SEO.
Ограничение. Валидный Product не обещает rich result и не обещает плитку Товаров. Процент «карточек РФ со сниппетом» сюда не переносим. Кабинет Merchant Center и Яндекс Товары — отдельные URL: фид может обогатить сниппет, но не заменяет слой на странице и не чинит враньё HTML.
Частые вопросы
Нужна ли микроразметка, если цена уже написана в тексте?
Страница индексируется и без неё. Слой нужен, чтобы стабильно отдать цену, валюту и наличие в товарный сниппет и в Картинки. Скрыть в JSON другую цифру нельзя: оба поиска требуют совпадения с сайтом.
Можно ли разметить категорию как Product с «ценой от»?
Не как одну карточку модели. У Яндекса список — OfferCatalog. В Google merchant listing «цена от» на листинге не делает вас оффером конкретного SKU.
Offer или AggregateOffer — что ставить на карточку с размерами?
Если адрес один и в корзину кладут разные размеры с вилкой цены — AggregateOffer с lowPrice или группа вариаций. Если у комбинации свой URL и своя цена — отдельный Offer на этом адресе. Merchant listing просит именно Offer, не агрегат.
Почему валидатор зелёный, а цены в сниппете нет?
Допуск ≠ показ. Проверьте видимую цену, валюту, один статус наличия, каноникал и срок сбора. Нет в наличии — Яндекс в Картинках цену не рисует. Расхождение с фидом лечится источником, не вторым скриптом.