Если магазин уже пометил товар как недоступный, а объявление продолжает приводить на карточку с неработающей кнопкой, проблема обычно находится не в одном поле. Статус расходится между учётной системой, товарным фидом, страницей, структурированными данными и оформлением заказа. Проверка должна пройти всю цепочку и зафиксировать время каждого наблюдения.
Сначала разберите сам файл в анализаторе товарного фида. Затем сравните один и тот же офер по ID и варианту во всех точках, где покупатель или робот узнаёт о наличии. Так вы отличите устаревший фид от ошибки карточки, разметки или корзины.
Где появляется расхождение
В YML атрибут available="true" означает, что товар можно купить, а false — что нельзя. Если атрибут отсутствует, Яндекс Директ по умолчанию считает присутствующий в фиде товар доступным. Яндекс также требует, чтобы состояние совпадало со страницей перехода и страницами оформления покупки.
У Google поле availability обязательно для товара. Основные значения — in_stock, out_of_stock, preorder и backorder; для двух последних нужна дата доступности, видимая на странице. Google проверяет согласованность источника данных, карточки, структурированной разметки и оформления заказа. Если в фиде стоит in_stock, а купить товар нельзя, товар может быть отклонён.
Проверяйте не текст «В наличии», а возможность оформить конкретный вариант. У футболки размера M и размера L могут быть разные остатки. Ссылка из офера должна открыть тот вариант, которому принадлежит ID, а кнопка покупки — добавить его в корзину.
Один нормализованный статус нужно получить из четырёх наблюдений. Время проверки хранится рядом с каждым источником.
Как построить отчёт
Для каждой строки сохраните:
| Поле | Что записать | Зачем |
|---|---|---|
offer_id | ID офера или варианта | Связать фид, страницу и заказ |
feed_status | Нормализованное наличие в фиде | Увидеть обещание рекламной системе |
page_status | Текст и состояние кнопки | Проверить обещание покупателю |
schema_status | Offer.availability, если есть | Найти противоречие в HTML |
checkout_status | Можно ли добавить и продолжить заказ | Подтвердить реальную покупку |
| время | Момент получения каждого состояния | Не сравнивать разные версии |
| итог | PASS, FAIL или REVIEW | Назначить действие |
Приведите значения к общей шкале: IN_STOCK, OUT_OF_STOCK, PREORDER, BACKORDER, UNKNOWN. Не превращайте UNKNOWN в OUT_OF_STOCK: отсутствие наблюдения не доказывает отсутствие товара.
Для YML явно обработайте пропущенный available. Поскольку Директ считает такой офер доступным, в отчёте его следует нормализовать как IN_STOCK_DEFAULT и вынести в отдельное предупреждение. Команда увидит не только текущий результат, но и риск: генератор фида полагается на значение по умолчанию.
Воспроизводимый пример
В учебном CSV — шесть оферов. Скрипт сравнивает четыре состояния и возраст выгрузки. Порог свежести в 60 минут выбран для примера редакцией: это не требование площадки. В своём магазине установите его по частоте изменения остатков, расписанию генератора и импорта.
python classify_availability.py availability-sample.csv availability-report.csv --max-age-minutes 60Результат:
| Офер | Наблюдения | Итог | Действие |
|---|---|---|---|
| CHAIR-101 | везде IN_STOCK, выгрузке 12 минут | PASS | ничего |
| CHAIR-102 | фид IN_STOCK, карточка OUT_OF_STOCK | FAIL_FEED_PAGE | обновить источник фида |
| CHAIR-103 | карточка IN_STOCK, schema OUT_OF_STOCK | FAIL_PAGE_SCHEMA | исправить разметку |
| CHAIR-104 | фид и карточка IN_STOCK, корзина отказала | FAIL_CHECKOUT | проверить вариант и резерв |
| CHAIR-105 | везде OUT_OF_STOCK | PASS | состояние согласовано |
| CHAIR-106 | везде IN_STOCK, выгрузке 185 минут | REVIEW_STALE | проверить задержку обновления |
Скрипт ставит PASS только при полном согласовании известных состояний. Он не обращается к магазину и не доказывает, что учебные значения истинны: CSV нужно заполнить результатами собственного обхода. Это намеренное ограничение — извлечение наличия из произвольной страницы зависит от HTML, JavaScript, региона и выбранного варианта.
В каком порядке исправлять
Сначала обработайте FAIL_CHECKOUT. Реклама и карточка обещают покупку, но заказ не проходит. Проверьте, тот ли вариант добавляется в корзину, не обнулился ли склад после загрузки страницы и не запрещена ли доставка в выбранный регион.
Затем исправьте прямые противоречия фида и карточки. Источником статуса должна быть одна бизнес-логика, даже если данные расходятся по нескольким каналам. Если CMS обновляет страницу сразу, а фид строится раз в сутки, уменьшите интервал или отправляйте изменения подходящим способом. После исправления загрузите свежий файл и проверьте статус товара в кабинете; мгновенное изменение на сайте не означает мгновенное обновление площадки.
Ошибки структурированной разметки исправляйте отдельно. Видимый текст может быть верным, а старый Offer.availability в JSON-LD продолжит сообщать роботу другое состояние. У варианта должны совпадать ID, цвет, размер и наличие.
REVIEW_STALE — сигнал процесса, а не доказанная ошибка товара. Сравните время изменения остатка, формирования файла, получения площадкой и самой проверки. Если разные системы записывают время в разных поясах, храните ISO 8601 с часовым поясом или UTC.
Как проверить исправление
Повторите цепочку на той версии фида, которая действительно отправлена в рекламную систему:
- Найдите офер по точному ID и варианту.
- Запишите статус и время формирования файла.
- Откройте конечную карточку без авторизации и выберите тот же вариант.
- Сверьте видимый статус, кнопку покупки и
Offer.availability. - Добавьте товар в корзину и дойдите до шага, где подтверждается возможность заказа и доставки.
- После загрузки исправленного файла проверьте диагностику площадки.
Не оформляйте реальный заказ без необходимости. Для магазина лучше иметь тестовый товар, тестовый контур или согласованный способ отмены. Если купить можно только после ввода адреса, регион должен быть частью сценария и отчёта.
Что этот протокол не подтверждает
Один успешный проход показывает состояние в момент проверки. Он не гарантирует, что остаток не изменится через минуту или что площадка уже получила новую версию фида. Для быстро меняющихся товаров нужен регулярный мониторинг и понятный допустимый лаг.
Автоматическая проверка кнопки также не заменяет бизнес-правила. Товар может быть физически на складе, но недоступен для онлайн-заказа, конкретного региона или способа доставки. В отчёте различайте «есть на складе» и «можно купить на условиях объявления».
Если нужно понять, почему число товаров не совпало между файлом и кабинетом, начните с материала «Как посчитать товары в YML-фиде и объяснить расхождение». После исправлений выполните приёмку товарного фида и сохраните отчёт с точной версией файла.
Источники
Материал подготовлен редакцией WiseLab с помощью AI. Источники и фактические утверждения проверены при подготовке.
Что думаете?
Загружаем комментарии…