Продвижение сайтов магазинов отличается от работы над сайтом услуг не набором приёмов, а масштабом и природой контента. У сайта услуг десятки страниц, которые пишет человек. У магазина тысячи адресов, которые порождает шаблон, а ценность страницы держится на данных: цена, наличие, характеристики, отзывы. Отсюда и другой список задач: разложить каталог, решить судьбу фильтров, привести карточку в вид, который поисковик готов показать расширенным сниппетом, и отдать те же данные вторым каналом, через товарный фид. Ниже разбор по каждому пункту с требованиями и лимитами из справок Яндекса и Google.
Поправка к привычной логике: Google прямо пишет, что не выводит иерархию сайта из структуры URL, а относительную важность страницы оценивает по внутренним ссылкам на неё. Адрес вида /catalog/noutbuki/igrovye/ удобен людям и аналитике, но сам по себе весом не наделяет.
Решение принимается по двум условиям сразу: есть ли у формулировки самостоятельный спрос и есть ли под неё ассортимент. Одно без другого даёт либо пустую страницу, либо страницу без трафика.
По адресам Google даёт конкретные требования. Использовать ?key=value, а не ?value: /photo-frames?page=2 правильно, /photo-frames?2 нет. Сегменты пути тоже допустимы: /t-shirt/green. Несколько значений одного параметра перечислять через запятую, ?type=candy,sweet, а не дублировать ключ ?type=candy&type=sweet, потому что одно из значений робот может проигнорировать. Не ставить во внутренние ссылки временные и относительные параметры: идентификаторы сессий, метки отслеживания, значения вида ?location=nearby или ?current-time=12:02. И не использовать фрагмент после решётки для показа разного контента.
Комбинаторика растёт быстрее, чем кажется. Пять независимых фильтров по четыре значения дают пять состояний на фильтр (не выбран плюс четыре варианта), то есть 5 в пятой степени, 3125 сочетаний на одну категорию. Умножьте на четыре сортировки и двадцать страниц пагинации: 250 000 адресов там, где товаров несколько тысяч. Это арифметика, но именно она съедает обход.
Google перечисляет способы управления фасетами и прямо расставляет их по силе.
Если фасет решено открыть, у страницы должны быть собственный заголовок, описание и товары в наличии. Отдельное требование Google, о котором забывают: комбинация фильтров без результатов обязана отвечать кодом 404, а не перенаправлять на общую страницу ошибки.
Как считается краулинговый бюджет и куда он утекает при таких адресах, разобрано в материале про технический аудит сайта и устройство обхода. Здесь важно одно: открывать стоит только сочетания, под которые есть и запросы, и товары.
Проверьте свой каталог за пять минут
1. Сколько адресов отдаёт категория с включёнными фильтрами и сортировками? 2. Что отвечает сервер на комбинацию фильтров без товаров? 3. Есть ли у открытых фасетов свой заголовок? 4. Ссылки пагинации сделаны тегом a href или кнопкой на JavaScript? Если ответа нет хотя бы на один вопрос, начинать нужно с этого, а не с текстов.
Разметка rel=»next» и rel=»prev» Google больше не используется, о чём в документации сказано прямым текстом (другие поисковики эти ссылки ещё могут учитывать). Актуальные требования такие.
Прайс-лист поставщика получают все его партнёры, поэтому описание оттуда уникальным не бывает по определению. Заменить его можно четырьмя источниками, и ни один не требует копирайтера на каждую позицию.
Ограничение Яндекса, которое ломает разметку у самодельных шаблонов: на размечаемой странице должно быть одно предложение конкретного товара или несколько предложений одного товара. Если страница содержит разные товары, структурированный сниппет не формируется вообще. Для агрегированного рейтинга Google требует ratingValue и хотя бы одно из двух: ratingCount или reviewCount. Запрет на отзывы о самом себе распространяется на типы LocalBusiness и Organization, товарных карточек он не касается.
Требования двух поисковиков к одной и той же схеме заметно расходятся, и это главная причина, по которой разметка проходит валидатор Google и не даёт сниппета в Яндексе.
| Свойство | Яндекс | Google (merchant listing) |
|---|---|---|
| Product.name | обязательно | обязательно |
| Product.description | обязательно | рекомендуется |
| Product.brand | обязательно, как текст | рекомендуется |
| Product.image | обязательно, ссылкой, не объектом ImageObject | обязательно; рекомендованный минимум 50 000 пикселей по площади |
| Offer.price | обязательно, допустим lowPrice | обязательно, значение больше нуля |
| Offer.priceCurrency | обязательно, RUB по ISO 4217 | обязательно, трёхбуквенный код ISO 4217 |
| Offer.availability | обязательно | рекомендуется |
| Разметка листинга | OfferCatalog, один список без вложенных | отдельной схемы нет |
Два следствия. Если цена плавает от объёма или размера, Яндекс разрешает передать lowPrice, и в сниппете появится «от N руб». И при значении availability, означающем отсутствие товара, цена в сниппете Яндекса не показывается.
Вариации размечаются типом ProductGroup. Обязательное свойство у него одно, name. Связку задают productGroupID (родительский артикул), variesBy и hasVariant. В variesBy Google поддерживает шесть значений: color, size, material, pattern, suggestedAge, suggestedGender. У каждой вариации должен быть собственный идентификатор (sku или gtin), собственный адрес и полный набор данных Product с наличием и ценой.
Фид это второй способ рассказать поисковику о товарах, не зависящий от того, как быстро робот обходит сайт. Именно из фида берутся данные для товарного сниппета и для блока поиска по товарам.
YML для Яндекса. Корневой элемент yml_catalog с атрибутом date. Внутри shop обязательны name, company, url, currencies, categories, offers. У предложения в упрощённом типе обязательны id, url, price, currencyId, categoryId, name, picture и description; в типе vendor.model вместо name идут typePrefix, vendor и model. Идентификатор до 80 знаков, после добавления товара его нельзя менять; адрес страницы до 512 символов. Название оптимально 50-60 символов, максимум 150. Описание оптимально 400-600 символов, максимум 3000, без слов «скидка», «хит», «бесплатно», без контактов и ссылок. Картинки JPEG, PNG или WEBP не меньше 300 × 400 пикселей и до 10 МБ, первая становится основной. Кодировка UTF-8 или windows-1251, спецсимволы заменяются XML-сущностями.
Загружается фид в личном кабинете Яндекс Товаров, в разделе с источниками данных, либо через API, при загрузке указываются регионы продажи. Дальше два срока по пять рабочих дней: столько проверяется исправленный фид и столько же информацию о сайте и предложениях проверяет служба контроля качества. Отдельно: программа «Товары и цены» в Вебмастере закрыта и не поддерживается, инструкции с её упоминанием устарели.
Фид Google Merchant Center. Здесь лимиты полей заданы в символах, и товар с превышением просто отклоняется.
| Атрибут | Требование |
|---|---|
| id | обязателен, до 50 символов, уникален |
| title | обязателен, до 150 символов, без промо-текста |
| description | обязателен, до 5000 символов, совпадает с посадочной страницей |
| availability | обязателен: in_stock, out_of_stock, preorder, backorder |
| price | обязателен, валюта по ISO 4217 |
| brand | обязателен для новых товаров, кроме фильмов, книг и музыки |
| gtin / mpn | gtin до 50 символов, каждое значение до 14 знаков; mpn до 70 символов, нужен при отсутствии gtin |
| condition | обязателен для б/у и восстановленных: new, refurbished, used |
| image_link | обязателен; минимум 500 x 500 пикселей с 31 января 2027 года |
Бесплатные карточки Google денег не стоят и рекламы не требуют: товары могут появляться в Поиске, Картинках, Lens, на Картах и в YouTube. Условия входа: соблюдение правил размещения бесплатных предложений, добавленные правила возврата и заданные настройки доставки либо стоимость доставки в атрибуте shipping.
Фид, который обновляется сам
Ручная выгрузка ломается на первом же изменении остатков: цена в поиске расходится с ценой на сайте, и фид уходит на перепроверку. Настраиваем генерацию YML и фида Merchant Center из вашей базы, автообновление по расписанию и контроль ошибок, чтобы данные в поиске совпадали с сайтом без вашего участия.
Фид можно собрать безупречно и получить отказ, потому что проверяется не файл, а магазин. Список требований конкретный.
Временно нет в наличии. Страницу оставляем, меняем только статус: out_of_stock в фиде и соответствующее значение availability в разметке. Google прямо допускает запуск магазина с товарами в статусе «нет в наличии», чтобы страницы индексировались, пока покупку сделать нельзя.
Снят навсегда. Адрес должен отвечать кодом 404 или 410. Для Google разницы нет: обработка одинаковая, страница выпадает из индекса, частота обращений снижается. Редирект 301 уместен только при действительно близкой замене конкретного товара. Сгонять сотни снятых карточек на категорию или главную нельзя.
Опустевшая категория. Если раздел автоматически исчез из внутреннего поиска и навигации, Google советует отдавать по его адресу 404.
Чего делать нельзя ни в каком варианте, так это отвечать кодом 200 со страницей «товар не найден». Это soft 404, и Search Console показывает такие адреса как проблему именно потому, что успешный код вводит в заблуждение.
Дубли в магазине растут сами: слэш на конце адреса и без него, www и без www, http и https, метки кампаний, один товар в двух разделах. Яндекс объединяет страницы с совпадающим текстом в группу дублей и сам выбирает, какую показывать, причём выбор время от времени меняет. Целевая страница может оказаться исключённой.
Для параметров, не меняющих содержимое, Яндекс рекомендует не Disallow, а директиву Clean-param, потому что она позволяет передать основному адресу часть накопленных показателей. Директива межсекционная и может стоять в любом месте файла, но есть ловушка: если в robots.txt заведена секция для робота Яндекса, строка User-agent: * будет проигнорирована, и все правила придётся продублировать внутри секции. Google той же цели достигает запретом обхода по маске параметра в robots.txt.
Где смотреть фактическую картину: в Яндекс Вебмастере раздел «Индексирование», страница «Страницы в поиске», вкладка «Исключённые страницы», колонка «Статус», фильтр «Дубль». Дубли, появившиеся из-за ссылок с GET-параметрами, ищутся через «Оптимизация сайта», далее «Диагностика сайта», информация появляется в блоке критичных проблем.
Позиции по десятку запросов при тысячах карточек ни о чём не говорят. Смотреть имеет смысл долевые показатели и статусы.
Логику оценки на стороне поиска Яндекс описывает через две метрики: Проксима, качество страниц по оценкам асессоров и дополнительным сигналам, и Профицит, полезность выдачи по взаимодействиям пользователей. Про фиды в справке сказано напрямую: данные обогащают органический результат тогда, когда это увеличивает профицит выдачи. Терминология из статей 2021 года и раньше здесь уже неприменима.
Да: без фида данные о товарах поисковик собирает только обходом. Генерацию YML поддерживают модули основных CMS, бесплатные карточки Google денег не стоят. Заложите до пяти рабочих дней на проверку фида и столько же на проверку сайта службой контроля качества Яндекса.
Только те комбинации, под которые есть и запросы, и товары в наличии, с собственным заголовком и описанием. Остальное Google советует закрывать от обхода в robots.txt по маске параметра или переводить на фрагмент URL. Комбинация фильтров без результатов обязана отдавать 404, а не редирект на страницу ошибки.
Временно нет в наличии: страницу оставить, сменить availability на out_of_stock. Снят навсегда: 404 или 410, для Google это одно и то же. Редирект 301 ставить только на близкую замену. Опустевшую категорию Google советует отдавать с кодом 404.
Яндекс считает обязательными name, description, brand и image у Product плюс availability, price и priceCurrency у Offer. Google для merchant listing требует только name, image и offers с ценой больше нуля и валютой, остальное рекомендует. Разметка, достаточная для Google, у Яндекса сниппета не даст.
Яндекс Товары ограничивают один фид размером 2 ГБ, общее число фидов на сайт не более 1000, а дата в файле не должна быть старше 10 дней. Для Sitemap отдельный лимит: 50 000 URL или 50 МБ в несжатом виде на файл, дальше нужен индексный файл.