SKU / внешний ID
Совпадает ли ключ, по которому импорт должен узнавать существующий товар.
Отраслевая практика · интернет-магазины
После загрузки каталога «дубль товара» может означать три разные вещи: в CMS созданы две записи одного товара, одна карточка открывается по нескольким URL или вариации ошибочно превратились в отдельные почти одинаковые страницы. Сначала определяем тип дубля, затем исправляем импорт и только после этого чистим последствия в поиске.
Быстрый маршрут
Не начинайте с массового удаления. Возьмите 3–5 пар дублей и сравните их на уровне данных, URL и истории импорта.
Совпадает ли ключ, по которому импорт должен узнавать существующий товар.
Появилась ли вторая запись именно во время последней загрузки каталога.
Это две записи CMS или одна карточка, доступная по двум адресам.
Не превратились ли размеры, цвета или комплектации в отдельные товары.
Обновлял ли импорт существующие записи или создавал новые.
Сначала классификация
Внешне они похожи, но техническое решение у каждого своё. Поэтому важно не смешивать данные каталога и поисковые URL.
В CMS существуют два разных ID товара с одинаковым SKU, названием, фото или внешним идентификатором. Это прежде всего ошибка импорта или модели данных.
Товар в базе один, но открывается через разные категории, параметры, регистр, слеши или технические маршруты. Это URL-дублирование.
Цвет, размер или комплектация импортируются как самостоятельные товары, хотя шаблон и поисковая задача у них почти одинаковы.
Импорт создал новую карточку, а прежняя осталась опубликованной. Часто это происходит после смены артикула, внешнего ID или структуры выгрузки.
Шаг 1
Надёжный импорт должен понимать, какая строка входного файла соответствует уже существующей записи. В зависимости от системы это может быть внутренний ID, внешний ID из ERP, SKU/артикул или специально настроенный уникальный ключ.
Типичная причина дублей — ключ изменился между выгрузками. Например, ERP начала передавать новый внешний идентификатор, у артикула исчезли ведущие нули, в одном файле используется строка AB-001, а в другом AB001, либо прежнее поле перестало загружаться. Для импортера это уже другой объект.
| Что сравнить | Старая карточка | Новая карточка | Что означает расхождение |
|---|---|---|---|
| Внешний ID | Старое значение | Новое / пустое | Импорт мог потерять связь с прежней записью |
| SKU / артикул | 001245 | 1245 | Нормализация изменила уникальный ключ |
| Внутренний ID CMS | Существовал до импорта | Создан во время импорта | Вместо update выполнен create |
| Дата изменения | Старая | Совпадает с импортом | Хороший маркер момента появления дубля |
Сопоставление по названию обычно ненадёжно: название меняется, локализуется, дополняется характеристикой и может повторяться у разных товаров. Исправлять нужно правило идентификации, а не только уже созданные дубли.
Шаг 2
Если в админке товар один, а краулер находит несколько адресов с одинаковым содержимым, проблема находится не в импорте записей, а в маршрутизации. Частые источники: путь через разные категории, GET-параметры, сортировки, метки, альтернативный регистр, технический endpoint или несколько вариантов слеша.
Яндекс указывает, что страницы с одинаковым или схожим содержимым могут быть объединены в группу дублей, а rel="canonical" является рекомендацией о предпочитаемой версии. Для незначимых GET-параметров в Вебмастере также есть отдельная настройка индексирования. Справка Яндекса по canonical и настройка GET-параметров полезны для сверки технического решения.
Но canonical не должен маскировать две реальные записи товара. Если в CMS действительно два объекта, сначала устраняем источник создания дублей и определяем, какая карточка остаётся основной.
Шаг 3
Размеры, цвета и комплектации могут храниться как варианты одной карточки или как отдельные товары. Универсального правила нет: решение зависит от ассортимента, интерфейса, наличия самостоятельного спроса и того, насколько сильно различаются данные вариантов.
Проблема начинается, когда модель меняется случайно. Вчера цвет был атрибутом одной карточки, сегодня каждая строка выгрузки создаёт отдельный URL с тем же описанием и фотографиями. Каталог резко растёт, а поисковая ценность новых страниц почти не меняется.
Шаг 4
При смене идентификаторов старые записи часто не удаляются и продолжают участвовать в категориях, Sitemap и внутреннем поиске. Рядом появляются новые карточки — уже с актуальной ценой и остатком.
Полезно сравнить пары по изображению, названию, бренду, характеристикам, SKU, внешнему ID и времени последнего обновления. Отдельно проверьте, не остались ли старые URL в фиде, Sitemap или ссылках категорий.
Если старая карточка больше не нужна и для неё есть точная новая замена, можно планировать прямой 301 на соответствующую карточку. Если соответствия нет, массово отправлять все старые товары на категорию или главную не стоит.
Системная проверка
Одна админка не показывает всю картину. Для уверенного вывода нужны данные импорта, CMS, публичных URL и поисковых сигналов.
Уникальные ключи, количество строк, повторяющиеся SKU, пустые идентификаторы и изменение формата.
Сколько записей создано, какие ID появились в момент импорта и какие старые товары перестали обновляться.
URL, canonical, категории, вариации, внутренние ссылки и фактический HTTP-ответ карточек.
Sitemap, исключённые дубли, выбранные канонические URL и фактические страницы в поиске.
Для больших каталогов полезно выгрузить пары «внешний ID → SKU → внутренний ID → URL → статус → canonical». Такая таблица быстро показывает, где один товар раздвоился и на каком уровне это произошло.
Практический пример
Представим магазин с 18 000 товаров. После обновления обмена с ERP в CMS стало около 20 400 карточек, хотя ассортимент почти не изменился. Новые товары визуально совпадают со старыми, но получают другие внутренние ID и URL.
| Проверка | Наблюдение | Вывод |
|---|---|---|
| Дата создания | 2 400 карточек созданы в окно импорта | Дубли связаны с конкретной загрузкой |
| SKU | У старых записей есть ведущие нули, у новых нет | Ключ нормализуется по-разному |
| Внешний ID | У новых товаров поле пустое | Интеграция перестала передавать стабильный идентификатор |
| Canonical | Каждая карточка указывает сама на себя | Для поиска это две самостоятельные страницы, а не URL-дубли одной записи |
Исправление начинается с интеграции: возвращаем устойчивый ключ сопоставления и сначала тестируем update на небольшой выборке. Затем строим карту «старая карточка → новая карточка», выбираем основную версию, обновляем внутренние ссылки и Sitemap. Только после подтверждения соответствий удаляем или перенаправляем лишние URL.
Типовые сценарии
Сравните уникальный ключ и режим create/update до и после изменения интеграции.
Проверяйте маршрутизацию, параметры, категории, canonical и внутренние ссылки.
Смотрите модель вариаций и правила, по которым строки выгрузки превращаются в карточки.
Импорт, вероятно, перестал узнавать старые записи после смены идентификатора.
Проверяйте скрытые URL, параметры, архивные карточки, Sitemap и старые внутренние ссылки.
Это ещё не доказательство дубля товара: сравните идентификаторы, содержание, назначение и URL.
Чего не делать
Можно потерять актуальные цены, остатки или новые идентификаторы до того, как станет понятна правильная пара.
У разных моделей названия могут совпадать, а одна модель может менять название между выгрузками.
Canonical не исправляет размножение записей в CMS и не останавливает появление новых дублей.
Точная замена товара полезнее общего редиректа. Массовый редирект без соответствий скрывает ошибку структуры.
Это может убрать часть URL из поиска, но база, Sitemap, ссылки и следующий импорт останутся неправильными.
Уникальные Title не превращают две записи одного товара в две полезные страницы.
Чек-лист
Когда нужен доступ к проекту
Для массовых дублей обычно нужны исходный файл или API-ответ импорта, настройки сопоставления полей, лог последней загрузки, выгрузка ID/SKU из CMS и crawl публичного каталога. Если импорт связан с ERP или 1С, полезно сравнить идентификаторы до и после изменения обмена.
Вопросы
Только после того, как понятно, какая запись основная и почему дубль появился. Иначе следующий импорт создаст его снова или будут потеряны актуальные данные.
Он помогает поисковику понять предпочитаемый URL, но не исправляет две записи товара в CMS, внутренние ссылки и работу импорта.
Стабильный уникальный идентификатор, который не меняется между выгрузками. Конкретное поле зависит от системы; важнее его неизменность и однозначность.
Нет универсального требования. Решение зависит от самостоятельности варианта, пользовательского сценария, ассортимента и структуры сайта.
Если есть точная основная карточка и старый URL больше не нужен, обычно рассматривают прямой постоянный редирект. Сначала проверьте соответствие и внутренние ссылки.
Повторите тестовый импорт, сравните количество записей до и после и убедитесь, что существующие товары обновляются, а новые создаются только для действительно новых идентификаторов.