Карточка товара — самая частая точка входа в интернет-магазин из органики, и самая частая точка провала. Типовые беды: одинаковые title у 500 SKU из фида, пустая description, дубли под варианты («красный / синий / зелёный» — три URL с одним контентом), отсутствие Product-разметки, отзывы стоят через iframe стороннего виджета (Google их не видит), 2-мегабайтные картинки. Разбираем 9 конкретных правил под .by/.ru/.kz e-commerce: уникальный title/description на SKU, H1, Product schema с offers+aggregateRating, каннибализация вариантов, canonical по правилу «один товар — один URL», хлебные крошки, скорость, внутрянка «похожие / с этим покупают», HTML-фид отзывов. Плюс — что делать с товарами out-of-stock, чтобы не терять трафик.
Магазин на 500 SKU. Категорийные страницы худо-бедно в топ-20. А карточки товара — вообще нигде. Знакомо? Это классика e-commerce SEO — тысячи страниц-клонов, потому что 90% магазинов заливают их из фида поставщика без правки. Google в шоке от однотипных title, Яндекс не может выбрать между 4 вариантами одного дивана — итог: обе платформы показывают вместо тебя маркетплейсы, у которых внутрянка и авторитет тупо сильнее.
Разбираем 9 правил, которые превращают карточку из «страница-мусор в индексе» в рабочую точку входа с органики. Порядок — по приоритету: сначала то, что даёт максимум эффекта за минимум работы.
Правило 1. Уникальный title на каждую карточку
Самая частая беда — title генерится по шаблону {название товара} — {название магазина}. Итог — 500 title вида «Диван — MyShop», «Стол — MyShop», «Стул — MyShop». Google начинает переписывать их сам, часто криво, и весь топ съедают конкуренты с человеческими title.
Правильный шаблон под e-commerce:
{Название} {ключевые характеристики} — {цена|наличие|бренд} | {категория} в {городе/регионе}
Пример: «Диван прямой Grace 210см, серый велюр — 1290 BYN | Мягкая мебель в Минске». Длина 78 символов, помещается в SERP-выдачу без обрезки.
Ключевые правила:
- Название товара + минимум одна характеристика (размер, материал, бренд, объём). Без характеристики — 300 диванов с одинаковыми title превращают тебя в невидимку.
- Цену вставлять полезно — сниппет с ценой в SERP даёт +12-20% CTR по бенчмаркам Search Engine Land. Только если реально показываешь актуальную цену на странице.
- Бренд магазина — в конец, не в начало. Раньше «MyShop — купить диван» было нормой, сейчас Google трактует это как ослабление ключа.
Автоматизация: не пиши руками для каждого SKU. Один шаблон в CMS с подстановками — работает. Просто убедись, что подстановки честные: если размера в фиде нет, не пиши «0см». Пусть шаблон в этом случае пропускает поле.
Подробнее про title-правила — гайд по title/description для SEO в 2026.
Правило 2. Description как маркетинговый текст, а не «купить X в Y»
Description Google переписывает в 60-70% случаев на карточках товара — потому что дефолтный из CMS обычно «Купить X по низкой цене с доставкой». Это спам-паттерн, Google берёт из body что-то более уникальное.
Что должен содержать нормальный description:
- Ключевое преимущество товара — не «низкая цена», а «раскладной механизм еврокнижка», «дуб массив», «фен 1800Вт с ионизацией».
- Условия покупки — бесплатная доставка, гарантия, кредит — то, что решает при выборе.
- Слово-действие в конце — «Заказать в Минске», «Купить с доставкой по РБ». Одно, не гирлянда.
Длина — 140-160 символов. Больше не рендерится в SERP. Меньше — потратил место впустую.
Пример: «Прямой диван Grace 210см из серого велюра с механизмом еврокнижка. Гарантия 2 года, бесплатная доставка по Минску. Купить в Мостли-мебель.» — 145 символов, всё влезает.
Правило 3. H1 = название товара, без магазинных лозунгов
H1 карточки товара — это чистое название. «Диван Grace 210см серый велюр». Всё. Без «Купить», без «в Минске», без «→ доставка бесплатно». Эти вещи — в атрибуты страницы (цена, город, условия доставки), не в H1.
Причина простая — Google/Яндекс используют H1 как основной сигнал «о чём страница». Когда H1 = «Купить диван в Минске с бесплатной доставкой», у поисковика впечатление: «страница про купить с доставкой», а не «страница про диван Grace». Ранжируется по коммерческим шаблонам, а не по товарным.
Хороший пример: H1 = «Диван Grace 210см, серый велюр». Дальше в теле: цена, наличие, характеристики, кнопки «В корзину / Купить в кредит / Быстрая покупка», отзывы, похожие. Всё коммерческое — уже как элементы UX, не как заголовки.
Правило 4. Микроразметка Product с offers и aggregateRating
Обязательный минимум JSON-LD на карточке товара — в 2026-м уже стандарт, без разметки Google в 40% случаев не показывает rich snippet в SERP. Что нужно:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Диван Grace 210см, серый велюр",
"image": ["https://myshop.by/img/grace-1.jpg", "https://myshop.by/img/grace-2.jpg"],
"description": "Прямой диван с механизмом еврокнижка. Обивка — серый велюр.",
"sku": "GRC-210-GRY",
"brand": {"@type": "Brand", "name": "Grace"},
"offers": {
"@type": "Offer",
"url": "https://myshop.by/divany/grace-210-gray/",
"priceCurrency": "BYN",
"price": "1290",
"availability": "https://schema.org/InStock",
"seller": {"@type": "Organization", "name": "MyShop"}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "23"
}
}
</script>
Про aggregateRating отдельно: только реальные отзывы. Google с 2023-го активно банит за фейковую разметку рейтинга — теряется весь rich snippet сайта на несколько месяцев. Если отзывов нет — не втыкай aggregateRating, просто убери блок.
Про availability: обновляй в реальном времени. Если товара нет, схема должна отдавать OutOfStock. Иначе Google показывает в SERP «В наличии» + твоя цена → пользователь кликает → на карточке «Нет в наличии» → CTR портится, а Google запоминает и понижает.
Полный гайд по разметке — Schema.org в JSON-LD с примерами.
Правило 5. Один товар — один URL. Не плодить дубли по вариантам
Диван Grace бывает серый, синий, зелёный. Разные картинки, разный SKU, одинаковое описание. Что делает 80% магазинов? Создаёт три URL: /grace-gray/, /grace-blue/, /grace-green/. Google видит три страницы с одним title-шаблоном, одним контентом, разным цветом на фото. Классическая каннибализация — все три висят в топ-15-25.
Как правильно — три сценария:
- Один URL с переключателем цвета в UI. Идеальный вариант. Пользователь кликает «Синий» — меняются картинки и SKU через JS, URL остаётся
/grace/. У Google одна страница, у пользователя нормальный UX. - Разные URL, но canonical на «основной». Если по каким-то причинам нужны отдельные URL (гео-таргет через URL, история индексации), ставим
<link rel="canonical" href="/grace/">на страницах вариантов. Google склеивает сигналы. - Разные URL с реальными различиями в контенте. Работает, если у каждого варианта своя история использования, свои отзывы, реально разные тексты. На практике 95% магазинов не пишут уникально — вариант 1 или 2 честнее.
Опасный антипаттерн: генерить URL по всем возможным комбинациям фильтров + вариантов. /divany/?color=gray&size=210&material=velur — если такие URL в индексе, ты сам себе создал сотни тысяч дублей.
Про каннибализацию в целом — отдельный разбор с механикой правки.
Правило 6. Хлебные крошки видимо + микроразметка
Breadcrumbs решают две задачи:
- UX — пользователь понимает, где он:
Главная → Мебель → Диваны → Диван Grace. - SEO — Google/Яндекс через
BreadcrumbListразметку заменяют в SERP скучный URL красивой цепочкой. CTR по бенчмаркам +5-10%.
Разметка:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Главная", "item": "https://myshop.by/"},
{"@type": "ListItem", "position": 2, "name": "Мебель", "item": "https://myshop.by/mebel/"},
{"@type": "ListItem", "position": 3, "name": "Диваны", "item": "https://myshop.by/mebel/divany/"},
{"@type": "ListItem", "position": 4, "name": "Диван Grace", "item": "https://myshop.by/mebel/divany/grace/"}
]
}
</script>
Плюс визуально на странице должны быть настоящие крошки — кликабельные, наверху карточки. Не только в JSON. Google проверяет соответствие.
Правило 7. Отзывы через свой HTML, не через iframe виджета
Магазины часто ставят Yotpo / Trustpilot / отзыв-виджет от Яндекса — через JavaScript iframe. Пользователь видит красивый блок отзывов, Google при индексации — пустое место. Отзывы не считаются как контент страницы, aggregateRating в микроразметке технически стоит, но контент под ним не подтверждается — Google начинает игнорировать разметку.
Правильный подход:
- Отзывы рендерятся серверно, попадают в HTML страницы. Виджет — только для интерактива (форма новой оценки, лайки).
- Пагинация отзывов — через параметр URL с canonical на основной URL товара. Отзывов больше 20 — часть подгружается по клику, остальные — в HTML.
- Каждый отзыв — с автором, датой, текстом. Не «Написал: посетитель», а «Написал: Виталий, 12.09.2026».
- В микроразметке Review можно добавить
author.nameиdatePublished— плюс к доверию у Google.
Побочный бонус: живые отзывы — это уникальный контент для карточки, часто с ключевыми словами по естественной речи («хорошо разложился», «доставили без косяков», «размер как в описании»). Google это ценит.
Правило 8. Скорость. Не «оптимизация», а конкретные лимиты
Карточки товара — топ по количеству картинок на странице. 5-10 фото, 360-обзор, видео. Если это всё грузится «как есть», у тебя LCP 6-8 секунд и Google понижает страницу в SERP.
Три обязательных фикса (не «best practice», а вопрос жизни и смерти):
- Первое фото — WebP или AVIF, не JPG. WebP экономит 25-40% веса, AVIF ещё больше. Все браузеры с 2020-го поддерживают.
- Первое фото —
fetchpriority="high". Заставляет браузер грузить его вне очереди. LCP на карточке = это фото, если оно на первом экране. - Остальные фото —
loading="lazy". Не грузятся, пока пользователь не доскроллил. Экономия десятков килобайт на первый экран.
Целевые метрики Core Web Vitals: LCP < 2.5s, INP < 200ms, CLS < 0.1. Проверять через PageSpeed Insights или Chrome DevTools → Lighthouse. Всё, что выше — теряешь позиции.
Полный разбор Core Web Vitals — вот здесь.
Правило 9. Внутрянка: «похожие товары» и «с этим покупают»
Карточка товара — это тупик в структуре сайта, если из неё некуда идти. Пользователь либо кладёт в корзину, либо уходит. Внутренняя перелинковка через блоки «Похожие» и «С этим покупают» решает две задачи:
- Удерживает пользователя — глубина просмотра растёт, поведенческие сигналы в Яндексе идут в плюс.
- Раздаёт внутренний PageRank между карточками — те, на которые ссылаются часто, ранжируются выше.
Как правильно формировать блоки:
- «Похожие товары» — товары той же категории, близкой цены. Не «все диваны магазина», а 4-6 действительно релевантных.
- «С этим покупают» — дополняющие товары. К дивану — журнальный столик, торшер, плед. Собирается по реальной статистике из корзин, не «что подгрузил случайно».
- «Просмотренные ранее» — не для SEO, но для UX. Рендерится через JS, Google не индексирует — так что для веса не считается.
Плюс — категорийные ссылки в теле карточки: «Смотрите также все прямые диваны», «Больше мебели Grace в каталоге». Ссылка вверх по иерархии — усиливает и категорию, и карточку.
Подробнее про перелинковку — гайд по внутренней перелинковке.
Что делать с товарами Out-of-Stock
Отдельная боль e-commerce SEO. Товар кончился, что делать со страницей? Три сценария:
| Ситуация | Что делать | Почему |
|---|---|---|
| Товар вернётся в наличие через 1-4 недели | Оставить страницу, availability = OutOfStock, кнопка «Уведомить о поступлении» | Не теряем позицию, собираем клиентские данные |
| Товар снят с продажи навсегда, но есть аналог | 301-редирект на страницу аналога или на категорию | Передаём вес живой странице, не даём 404 в индексе |
| Товар снят, аналога нет, страница получает трафик | Оставить как «архив» с указанием «снято с продажи», ссылки на связанные категории | Трафик реальный — не разбрасываемся |
| Товар снят, аналога нет, страница пустая | 410 Gone (не 404) | 410 говорит Google «страницы не будет» — удаляется из индекса быстрее |
Массовое удаление страниц out-of-stock через 404 — типовой косяк, из-за которого магазины теряют 20-30% органики за квартал. Каждый 404 — это потерянный вес и негативный сигнал для Google.
Пара наблюдений с работы
Интернет-магазин мебели, каталог 800 SKU. Проблема — карточки товара давали < 5% органики (при 90% страниц). Аудит: одинаковые title («Название — MyShop»), Product-разметки нет, отзывы через сторонний виджет, 3 URL на каждый диван (разные цвета) — итого ~2400 дубль-страниц. За 2 месяца: переписали title через шаблон с характеристиками, добавили Product+aggregateRating (с настоящими отзывами, серверный рендеринг), склеили варианты цветов в один URL с переключателем. Через 8 недель — карточки товара стали давать 41% органики, средняя позиция коммерческих запросов «купить [товар] [город]» подтянулась с 18 до 9.
Магазин косметики, 300 SKU. Ситуация другая — title/description были в порядке, но карточки не выдавали rich snippet в SERP. Оказалось: aggregateRating стоял через iframe стороннего сервиса, Google не подтверждал разметку, снял rich snippet со всех страниц. Заменили виджет на серверный рендеринг отзывов, оставили только форму нового отзыва через iframe. Через 3-4 недели Google начал показывать звёздочки в SERP — CTR коммерческих запросов вырос на 18% при тех же позициях.
Оба случая — не «SEO-магия». Просто убрали технические грабли, которые магазин сам себе создал.
Частые вопросы
А что с описаниями от поставщика? У меня 500 SKU с одинаковым HTML
Классика. Google/Яндекс не любят дубли текста в карточках между магазинами (все берут из одного фида). Что делать — не переписывать все 500 карточек руками, а сделать шаблон-обёртку: под описанием поставщика добавь свой блок с 3-5 предложениями от магазина (условия доставки, комментарий продавца, «наш опыт»). Уникальность на уровне 30-40% — уже достаточно, чтобы Google не считал страницу полным клоном чужого фида.
Как быть с фильтрами каталога? Они создают тысячи URL
Правило: под каждый популярный фильтр (по которому реально ищут — «красные диваны», «диваны до 2000 BYN») — своя посадочная страница с уникальным H1, description, микроразметкой. Под остальные (комбинации 3-4 фильтров, редкие сочетания) — noindex в robots meta + canonical на категорию. Иначе индекс раздувает, каннибализация, всё падает.
Нужно ли писать статьи в блог под каждый товар?
Нет. Статьи в блоге под товары — обычно каннибализируют коммерческие ключи с самими карточками. Гораздо полезнее — статьи под инфо-запросы («как выбрать диван», «чем отличаются механизмы раскладки») и оттуда ссылки на карточки. Разделение интентов, а не удвоение конкурентов внутри сайта.
А что с ценой в micro-data — писать точную или диапазон?
Точную и текущую. Разница даже в 5% между микроразметкой и HTML страницы = ошибка в GSC → снятие rich snippet. Если у товара варианты с разной ценой — используй AggregateOffer с lowPrice/highPrice, а не Offer.
Стоит ли завести фид на Merchant Center и Яндекс.Маркет?
Однозначно — да. Merchant Center открывает Google Shopping (даже без платной рекламы органический показ товаров идёт), Яндекс.Маркет даёт трафик на карточки через агрегатор. Правильная YML-выгрузка + фид Google — тема для отдельной статьи, но факт: магазин без этих двух каналов оставляет на столе 20-40% возможного трафика.
SEO карточек товара — не про «волшебные ключи» и «правильные шаблоны от гуру». Это про базовую техничку, которую 90% магазинов игнорируют. Уникальный title, живая микроразметка, серверный рендеринг отзывов, правильная работа с вариантами товара и out-of-stock. Ничего секретного. Просто это долгая работа по 500-2000 страниц, и ленивые магазины сдаются на первой сотне. Кто не сдаётся — забирает у ленивых их долю в органике.
Нужен аудит карточек магазина по этому чек-листу — mostlycorp@gmail.com или форма ниже. Смотрю выборку из 20 карточек по всем 9 правилам, даю таблицу приоритетов правки для всего каталога.