После загрузки прайса в WooCommerce прежняя карточка осталась, а рядом появилась новая. Покупателю это мешает выбрать товар, а сайту добавляет второй адрес с похожим содержанием. Начинать исправление нужно с идентификаторов и режима импорта, а не с canonical между дублями.
Ниже разобран встроенный CSV-импорт WooCommerce. Платные расширения и интеграции поставщиков могут использовать другие заголовки и правила. Перед работой запишите версию магазина и инструмент, которым загружали файл: одинаковое расширение CSV не означает одинаковое поведение.
Какие данные сравнить у двух карточек
Откройте старую и новую карточки в административной панели. Запишите ID, SKU, название, статус публикации и публичный URL. SKU — артикул, который используете для сопоставления товара; это не обязательно его название или код поставщика в соседней колонке.
Найдите соответствующую строку импортированного файла. Сравните значение SKU посимвольно, включая пробелы, ведущие нули и дефисы. Табличный редактор способен превратить 00127 в число 127, а сотрудник — переименовать артикул для удобства. Внешне товар остаётся тем же, но ключ сопоставления уже другой.
Сохраните отчёт последнего импорта и выбранный режим. Если отчёта нет, пометьте это как неизвестное. Наличие двух карточек подтверждает дубль, но не доказывает, какой именно загрузчик его создал. Сначала свяжите новую карточку с операцией по времени и журналу, затем повторяйте её на небольшой выборке.
Как работает обновление встроенным импортом
Встроенный инструмент сопоставляет существующие товары по ID или SKU. Для обновления откройте Товары → Все товары → Импорт, выберите файл и включите Update existing products. Затем перейдите к сопоставлению колонок и проверьте, какой столбец попадает в SKU, а какой — в цену. Этот порядок описан в документации WooCommerce по CSV.
В режиме обновления совпадающие товары обновляются. Поведение новых вариаций имеет особенности версии, поэтому для этой инструкции контрольная выборка состоит из простых товаров. Если вы импортируете variable и variation, используйте отдельный разбор связей вариантов с родителем.
Колонки, которые менять не нужно, отметьте Do not import. Например, задача обновить цену не требует перезаписывать описание. Попросите исполнителя сохранить экран сопоставления: заголовок CSV «Цена» сам по себе не показывает, к какому полю его привязали при конкретном запуске.
Учебный пример с ведущим нулём
Представим магазин с существующим товаром SKU 00127. Его текущая цена — 4900, новая — 5200. Это вымышленный пример. Прайс прошёл через электронную таблицу, и артикул превратился в 127. Если файл загрузить как новые товары, магазин может получить новую карточку вместо изменения старой.
Правильный контрольный файл для обновления сохраняет исходный ключ:
SKU,Regular price
00127,5200До импорта откройте сохранённый CSV текстовым редактором и убедитесь, что там именно 00127. Формат ячейки на экране таблицы не доказывает сохранность текста в файле. Затем сопоставьте колонки, выберите обновление существующих товаров и проверьте прежний ID после завершения.
Ожидаемый результат: цена изменилась у старой карточки, её ID и URL сохранены, новая запись не создана. Совпадение числа товаров — вспомогательная проверка. Оно не заменяет просмотра конкретной карточки: один товар могли добавить, а другой случайно удалить вручную.
Как подготовить безопасную выборку
Экспортируйте несколько существующих простых товаров встроенным инструментом и используйте этот файл как образец колонок. Возьмите товар с ведущим нулём в SKU, товар с дефисом и обычный артикул. При наличии товара без SKU отдельно решите, каким существующим ID его сопоставлять.
Работайте на копии магазина с актуальной базой. Подготовьте резервную копию и сохраните исходные цены контрольных товаров. Не начинайте повторную загрузку полного прайса, пока не объяснён результат нескольких строк. Воспроизводимый маленький пример полезнее очередной попытки, после которой непонятно, откуда появились новые записи.
В CSV оставьте только нужные поля, сохраните UTF-8 и просмотрите итоговый файл. Цены запишите в формате импортера без символа валюты. Если значения содержат разделитель CSV, убедитесь, что редактор правильно заключил их в кавычки. Не подменяйте встроенную схему колонками из инструкции для другого расширения.
Как убрать уже появившиеся дубли
Сначала определите, какая карточка остаётся основной: прежняя с историей, ссылками и заказами либо новая, если это действительно отдельный товар. Не принимайте решение только по дате создания. Сравните варианты, характеристики, остатки и то, на какую карточку ведут категории и внешние ссылки.
Сохраните таблицу соответствий двух записей, затем передайте разработчику план. Если это настоящий дубль, нужно согласовать перенос недостающих данных и поведение лишнего публичного адреса. Простое удаление новой карточки может оставить битую ссылку в рекламе или меню. А canonical не исправляет ошибочный артикул, который снова создаст дубль при следующей загрузке.
После исправления данных повторите контрольный импорт. Убедитесь, что операция стала повторяемой: второй запуск того же файла обновляет те же товары, а не создаёт очередной комплект. Для нового товара предусмотрите отдельный процесс создания, чтобы прайс обновлений не смешивался с неразобранными новыми позициями.
Как согласовать новые товары в прайсе
Если поставщик прислал неизвестный SKU, решите, это новая позиция или переименованный существующий артикул. Во втором случае нужна явная таблица соответствий. Нельзя автоматически считать каждое несовпадение новым товаром. Для учебного магазина строку 127 сначала сопоставляют с исходным 00127 и исправляют ключ, а действительно новую модель отправляют в отдельный файл создания. Так повторные прайсы остаются понятными для сотрудников.
Что включить в задачу и приёмку
Поставьте задачу конкретно: «Прайс с SKU 00127 должен изменить цену существующего товара ID N до 5200, сохранив URL; повторный импорт не создаёт запись». Приложите исходный CSV, две карточки дубля, экран сопоставления и версию WooCommerce. Номер ID в рабочей задаче должен быть реальным, учебный N заменяют значением магазина.
После выпуска проверьте цену в редакторе и на публичной странице без входа в WordPress. Убедитесь, что валюта, остаток и выбранная разновидность товара соответствуют ожиданию. Старая закешированная цена на витрине — отдельная проблема доставки данных, даже если импорт уже правильно обновил базу.
Просмотрите ссылки из категории, поиск магазина и карту сайта. Для карты пригодится руководство по sitemap WordPress, для доступных страниц и связанных ошибок — технический аудит. Поисковые позиции не служат условием приёмки импорта: сначала нужно доказать, что правильные товары обновляются по стабильным ключам и не размножаются при следующем прайсе.