„Niepoprawny lub zduplikowany SKU”: dwa produkty, jeden kod
Duplikat SKU rozjeżdża synchronizację stanów, eksport i feedy — a WooCommerce ostrzega dopiero w chwili zapisu.
Objaw
Próbujesz zapisać produkt, a WooCommerce odmawia: „Niepoprawny lub zduplikowany SKU.” Albo gorzej — nic nie odmawia, bo duplikat powstał przy imporcie, masowej edycji albo przez wtyczkę, która nigdy nie przeszła przez ekran produktu. Katalog wygląda dobrze. Stany magazynowe nie.
Ile to kosztuje
SKU to identyfikator, którym każdy system poza WooCommerce nazywa dokładnie ten produkt. Kiedy dwa produkty noszą ten sam:
- Synchronizacja stanów trafia w zły produkt. ERP, program magazynowy albo integracja z marketplace’em aktualizuje jeden wiersz, a klient kupuje drugi.
- Feedy produktowe się sypią. Google Merchant Center i większość marketplace’ów traktuje SKU (albo GTIN plus SKU) jako klucz; duplikaty są scalane albo odrzucane, a oferta znika bez powiadomienia.
- Raporty kłamią. Każde zestawienie grupujące po SKU sumuje dwa produkty w jeden.
Nic z tego nie widać na sklepie jako błąd — i dlatego duplikaty potrafią przeżyć lata.
Jak to sprawdzić samodzielnie
Z wiersza poleceń, bez żadnej wtyczki:
wp db query "SELECT meta_value AS sku, COUNT(*) AS n \
FROM wp_postmeta pm JOIN wp_posts p ON p.ID = pm.post_id \
WHERE pm.meta_key = '_sku' AND pm.meta_value <> '' \
AND p.post_status IN ('publish','draft','private') \
GROUP BY meta_value HAVING n > 1"
Podmień wp_ na własny prefiks tabel. W sklepie z wariantami to samo zapytanie potrzebuje
post_type IN ('product','product_variation') — warianty mają własne _sku, a wariant dublujący
produkt nadrzędny to najczęstszy przypadek ze wszystkich.
Jak naprawić
- Zdecyduj, który produkt zatrzymuje SKU — zwykle ten z historią zamówień.
- Drugiemu nadaj nowy, zgodny z Twoim własnym schematem. Nie zostawiaj pustego, jeśli cokolwiek dalej go używa.
- Jeśli duplikat jest wariantem tego samego produktu, sprawdź, czy nie został po usuniętej wartości atrybutu — takie zwykle bezpieczniej usunąć niż przenumerować.
- Popraw import, który to stworzył — inaczej duplikat wróci przy następnym przebiegu.
Kiedy to fałszywy alarm
- Świadomie powtarzasz SKU między językami. Tłumaczenia jednego produktu w WPML i Polylangu z założenia dzielą SKU. Merchlint wyklucza rozpoznane pary tłumaczeń; przy innym rozwiązaniu wielojęzycznym ukryj znalezisko.
- Szkice-duplikaty, które za chwilę zastąpią oryginał.
- Zestawy dziedziczące SKU składnika — tak działają niektóre wtyczki do bundle’ów.
Jak znajduje to Merchlint
Merchlint odczytuje _sku opublikowanych produktów i ich wariantów, grupuje po dokładnej
wartości, pomija puste i zgłasza każdy produkt, który dzieli kod z innym produktem — albo
z wariantem innego produktu. Przy znalezisku widać SKU, identyfikatory produktów, które je dzielą,
oraz status każdego z nich, więc decyzję, który zatrzymuje kod, podejmujesz bez otwierania obu.
Dwa przypadki zostają poza kontrolą i oba celowo. Produkt dzielący kod z własnym wariantem nie jest zgłaszany: WooCommerce pokazuje kod rodzica na wariancie, który własnego nie ma, więc ta para to zachowanie platformy, a nie usterka. Drugi to dwa warianty jednego produktu z tym samym kodem, gdy sam produkt nie ma żadnego — znalezisko należy do produktu, a tam nie ma go do czego przypiąć. Warianty leżące w koszu nie liczą się nigdy.
Pewność: F — fakt z bazy. Zero interpretacji, zero progu. Dwa wiersze mają tę samą wartość albo nie mają.
Ta kontrola działa w wersji darmowej, na każdym produkcie, bez limitu. Jeśli potrzebujesz tylko SKU i GTIN-ów, ten sam silnik jest też osobną darmową wtyczką z samymi tymi kontrolami: Duplicate SKU and GTIN Finder.
Coś się nie zgadza z tym, co widzisz w sklepie? Napisz — czytamy każdą wiadomość. contact@merchlint.com
Masz wynik z wtyczki i nie wiesz, od czego zacząć? Do 15 listopada 2026 przeglądamy eksporty z dziesięciu sklepów — darmowy audyt katalogu.