
WooCommerce duplicate products: six catalog checks
Six checks for SKUs, codes, titles, permalinks, photos, and variations to remove duplicate WooCommerce products without losing orders or data.
How to find duplicate WooCommerce products before deleting them
Duplicate WooCommerce products are separate listings describing the same item, or the same item split into simple products that should be combined. You can spot them through a repeated SKU, the same barcode, nearly identical titles and permalinks, the same photo on multiple rows, or copied descriptions. They divide attention between two URLs and send channels two identities for one item. The six checks in this guide are performed in the catalog before deleting any row.
A program reading your store does not “understand” that two listings are the same mug. It reads the title, URL, price, availability, image, and the fields you completed. If two published pages contain the same facts with small differences, the store shows two results, the feed may send two rows, and anyone updating the price may correct only one of them. According to the WooCommerce developer blog, on September 2, 2026, Anthropic published Claude Commerce Agent as open-source code for shopping assistants and sellers: a catalog with two identities for one item makes it harder to provide one consistent URL. The source is the WooCommerce developer blog.

Why duplicate WooCommerce products weigh on the catalog
A duplicate creates a problem because the store, internal search, and channels receive two listings where one would be enough, and do not know which one to update.
The symptom is concrete in the dashboard. In WooCommerce, go to Products, then All Products, sort by name, and look for two nearby rows with the same or different prices. In the storefront, the store search returns both. At checkout, a customer may add the old listing to the cart, the one with incorrect stock. In the warehouse, the same item may be counted twice, or one listing may show zero while the other still has stock, leading you to reorder something you already have.
The mechanism is the same on channels, although the fields differ. An OpenAI product feed for ChatGPT requires nine fields: item_id, title, description, url, brand, seller_name, image_url, availability, and price with currency. GTIN and MPN are optional, and a GTIN must not be invented. If two listings appear in the file with the same item_id, or with two item_ids and the same URL, the file contains an ambiguous identity. The names link, image_link, and identifier_exists belong to Google Merchant Center, not to that feed. In the Google-compatible profile, when confirmed by OpenAI, a GTIN or MPN is required unless identifier_exists = no.
Page content and structured data work together. According to Google Search Central, there are two main classes of product structured data. Markup confirms price and availability when they match what appears on the page. It does not solve the problem of two listings describing the same item; it may even confirm two prices when the pages are not aligned. WooCommerce already produces basic product markup. What holds a listing back is missing or vague information in the text and data, together with a second listing describing the same thing.
Who imports the same price list twiceAn illustrative example: a store receives a supplier price list as a PDF, imports it, then uploads it again the following month without checking whether the rows already exist. Pairs appear with the same name, sometimes with an empty SKU on the second row because the column was not mapped. This is not an outcome to measure; it is the typical process. Before a new import, export the catalog and compare the SKU column. If the supplier file has no stable code, do not import blindly: stop rows that are already present and update them instead of creating new ones.
Who copies channel listings into the storeSomeone selling on Amazon, eBay, Etsy, or Vinted who then pastes the same listing into WooCommerce may end up with two store products: one created manually and one imported from an inventory system or CSV. Publishing on the channels remains your action. The duplicate appears earlier, when the same reference enters the store twice. Keep one reference listing in the WooCommerce catalog and prepare channel-specific copy to paste elsewhere, without creating a second public listing just to “have the channel version”.
Two published listings for the same item are not a safety archive: they are two URLs, and anyone updating the price can easily correct only one.
First and second checks: SKU and barcode
The first check looks for a duplicate WooCommerce SKU; the second looks for the same barcode, or GTIN, on listings that are not the same variation.
By default, WooCommerce does not prevent you from saving two products with the same SKU. The field is under Product data, Inventory, SKU. An empty SKU is not a duplicate: it is a missing identity and should be handled separately. A repeated SKU on two published simple products is the clearest signal. For variations, the SKU must belong to the individual variation, not be copied from the parent to every size: if three sizes share the same code, the warehouse cannot tell which item was shipped.
A barcode must not be inferred or taken from the web to fill a gap. Read it if it is printed, compare it across listings, and check the GS1 check digit. A repeated code on two different products is a finding to investigate, not an automatic verdict: it may be a paste error, or two listings for the same item that should be combined. A code with an incorrect check digit is dirty data, not a duplicate. A product that legitimately has no manufacturer code should be declared as such. Inventing a GTIN to “get a feed through” creates a false identifier, which is worse than an empty field.
- Open WooCommerce, then Products, then All Products.
- Export a CSV including SKU, name, status, price, and, if available, the barcode or GTIN field you use.
- In the spreadsheet, sort by SKU and mark values appearing on multiple published rows.
- Sort again by barcode and mark repetitions, ignoring empty cells.
- Open each pair in the store and decide: the same reference to combine, a variation to group, or a paste error to correct on the wrong listing.
- Do not generate a missing code. Leave it empty and declare it, then fix the internal SKU that belongs to you.
Keep three cases separate. First: the same SKU, the same item, two listings. Combine them. Second: the same SKU, different items, an incorrect paste. Rename the code on the wrong listing without touching the other one. Third: different SKUs, the same barcode. Open the pair and check the brand, size, and photos before deleting anything. The SKU is yours and can be reassigned. A GTIN, when it exists, belongs to the manufacturer and must not be fabricated.
Third and fourth checks: nearly identical titles and permalinks
The third check reads nearby titles; the fourth reads the permalink, because WordPress adds a suffix when the address is already taken.
Sort All Products by name. Pairs to open appear one below the other: “Blue enamel mug” and “Blue enamel mug copy”, or “Linen shirt” and “Linen shirt ” with an extra space. A nearly identical title is not enough by itself. Two different ceramics can have similar names. The check needs a second fact: the same SKU, photo, price, and short description, or a permalink that is the first one followed by a hyphen and a number.
You can edit the permalink below the title by selecting Edit. If you save two products with the same desired address, the second often becomes the first followed by a numeric suffix. That ending is a strong clue that a listing was created repeatedly, not proof that the two objects are identical. Open both. If the second is empty, in draft, or has no orders, it is the candidate to remove after comparison. If the first is a draft and the second has stock and orders, keep the second and fix the permalink only after deciding which listing remains public. Changing the address of an already indexed listing without a permanent redirect to the listing you keep leaves an address that does not respond. The redirect is not a native product button: prepare it with the tool you already use for URLs, and only toward the surviving listing.
An illustrative example, with no traffic outcome: a store with about forty ceramic references has “raw bowl” and “raw bowl-2”. The second was created with duplicate product to change the price and was then accidentally left published. The check is not to delete every permalink with a number. Open the pair, see which one has orders and stock, copy the only useful missing data to the other, and unpublish the one that should not be purchased.
Fifth check: the same photo and copied descriptions
The fifth check flags the same image used on multiple products and duplicate WooCommerce product descriptions, copied word for word or pasted from a channel.
In WooCommerce, the photo appears in the Product image column and gallery. The same file, with the same name, on two simple products is a finding. It may be acceptable briefly while you are preparing variations and do not yet have a photo for every color. It is not a suitable final state for two published listings that customers are expected to distinguish. The image check also looks for missing photos, an overly small main photo, and a format rejected by channels. Check file dimensions too: a photo that is too small may be rejected by the channels where you send it, so verify each channel’s requirements. A shared photo that is also too small must be replaced, not merely detached from the second product.
Duplicate descriptions can be found by exporting the short and long descriptions, or by searching the catalog for a distinctive sentence pasted everywhere, such as “shipping throughout Italy” repeated as the only text. That same promotional paragraph on about forty listings is not a duplicate product; it is standard copy. A product duplicate is the entire listing copied, including material, size, and title. Rewrite standard copy where it is the only content, using the facts of that reference. Combine or remove the copied listing.
Pasting an Amazon, eBay, or Etsy description into WooCommerce creates a second problem, even without a second row. Channel copy discusses that channel’s rules, delivery times, and fields. In the store it remains generic, often identical to dozens of other listings, and does not state the brand, size, or material that visitors and an assistant read on the page. Text and data work together: if the description does not contain the facts, markup cannot confirm them. There is no need to promise a penalty. The practical point is that two identical texts do not help anyone choose a listing, and copy from another channel usually omits fields that are empty in the store.
For people with little time for a daily routineSomeone ending the day with ten listings to publish may duplicate the last one, change the title, and leave the photo and description unchanged. The practical remedy is a short checklist, not a project. Each evening, for listings touched that day: a different SKU, a permalink without a random suffix, an original photo or at least one not shared with another published product, and a first sentence naming the item and one measurement. The rest of the cleanup can wait. New duplicates cost the most because they enter the store immediately and, if you export everything published, the channel file as well.
The same photo on two published products is not a time-saving measure: it signals that the listings were not distinguished, either for the buyer or for whoever exports the catalog.
Sixth check: WooCommerce product variations to group
The sixth check looks for simple products that differ only by size, color, quantity, or package and should be offered as variations of one product.
Not every similarity is a variation. A matching mug and saucer are two products. A blue mug and the same mug in green, with the same material, base price, and description, are variations. The operational criterion is this: if the customer chooses one attribute and the rest of the listing remains true, it is a variation. If the brand, use, or technical sheet must change, they are two items and combining them makes the catalog worse.
According to the WooCommerce developer blog, starting with WooCommerce version 11.1, variation galleries will be enabled for every store. This is relevant to the check: many duplicate simple listings arose because each color needed its own photo and the store did not show a gallery for each variation. Grouping does not remove the photos. It moves them to the correct variation when the store version allows it, leaving one parent listing with the attributes.
The dashboard path is stable. In WooCommerce, go to Products, then Attributes, and create a global attribute if you need it on multiple listings, such as Color, with clean terms: “blue” and “Blue ” should not coexist. On the product you keep, under Product data, choose Variable product. In Attributes, add Color, enter the values, tick Visible on the product page and Used for variations, then save the attributes. In Variations, generate the variations, and give each one its own SKU, price, stock, and image. The parent product may have no SKU or a family SKU, but it must not share the same SKU as its children.
An artisan managing about forty referencesAn illustrative example: a ceramics workshop has about forty references and, for the glazed mug, three simple products, blue, green, and sand, with the same description and three SKUs that are actually the same code plus a color written in the title. There is no store name and no measured outcome. The process is as follows. Keep the listing that already has orders. Add the Color attribute. Create three variations with distinct SKUs, such as a stable prefix plus the color, without recycling a GTIN. Move the stock from each simple listing to its variation. Put the two remaining simple listings into draft, check that they are not in the cart of an open order, and only then move them to the trash. Do not delete the two listings on the same day if an order in progress still references them.

How to delete or combine duplicates without losing data
Combine products on the listing with orders, correct stock, and completed fields, and remove the other from publication only after copying what was missing.
WooCommerce has no native “merge products” button. Merging means comparing fields one by one. Orders remain linked to the product identifier on which they were placed: deleting that listing does not delete the order, but the order line may no longer have an openable product. Reviews remain on the listing where they were written. There is no native command to transfer them. If one listing has genuine reviews, it is often the one to keep, even if its title is worse: the title can be corrected, while reviews cannot be moved without manual work outside the product.
Before and after, using the same illustrative mug example. Before: three published simple products, titled “Blue enamel mug”, “Blue enamel mug”, and “Green enamel mug”; two have the same SKU, one photo is repeated, the description is identical, and one permalink has a suffix. After: one variable product called “Enamel mug”, a Color attribute, two variations with distinct SKUs, price and stock on each, the photo on the variation, a parent description naming the material and capacity only if those facts are true, and the simple listings in draft before moving them to the trash. No new barcode. No sentence added that was not already in your data.
- Choose the listing to keep: the one with orders, genuine reviews, or reliable stock. If equal, keep the one with more completed fields.
- Open the other listing in another tab and copy only facts missing from the first: a measurement, an attribute term, a different photo, or a packaging note.
- If they are variations, convert the retained listing into a variable product and move stock and SKUs to the variations, using distinct codes.
- Align price and availability. Do not leave the discarded listing published “just in case”.
- Set the discarded listing to draft. Check the storefront, store search, and the file you export to channels.
- If its permalink was indexed, prepare a permanent redirect to the retained listing, then move it to the trash when open orders no longer reference it.
- Record the pairs you fixed in a spreadsheet: retained SKU, discarded SKU, and date. This will help with the next supplier import.
- Keep: orders, genuine reviews, stock, the correct SKU, an existing and verified barcode that belongs to you, and the cleaner permalink if the other one is not indexed.
- Copy when missing: attributes, different photos, a description containing one additional fact, and weights and dimensions that you measured yourself.
- Do not copy: a GTIN taken from another listing or the web, an invented price, or channel copy that does not apply to the store.
- Do not combine: matching but distinct items, spare parts, or packages that are another product with another use.
- Declare rather than fill: a legitimate absence of a manufacturer barcode.
After combining, check internal links. Related products, cross-sells, and product groups may still point to the trashed identifier. Open them and replace it with the retained listing. Check categories too: two listings in the same category made the list look longer. Once combined, the category should show one mug, with the color choice on the listing.
Common mistakes when cleaning duplicates
The most expensive mistakes are deleting the listing with orders, combining items that are not the same product, and inventing a code to make the finding disappear.
Deleting the “older” row immediately shows up when an order in progress no longer opens the product and the remaining listing is empty and out of stock. It happens because the creation date does not tell you which listing is active. Solve it by choosing the listing with orders first and only then putting the other into draft. The trash gives you a margin; permanent deletion does not. Use it after checking.
Treating every similar title as a duplicate produces a poorer catalog: genuine references that shared only a category disappear. It happens when the check stops at the name. Ask for a second fact, SKU, code, photo, or complete description, before combining. Two different bowls with the same adjective remain two products.
Inventing a GTIN, or copying one from another row to fill the field, becomes visible later when a channel rejects the identifier or two different items show the same code. It happens when exporting in a hurry. Leave the field empty, declare the absence when legitimate, and never take the code from the web. The internal SKU should be made unique.
Leaving the duplicate published but “hidden” in a category excluded from the menu means the listing remains reachable by URL, purchasable, and included in many exports of published products. It happens because hiding a product from the menu is not the same as unpublishing it. Use draft, then the trash, and check the exported file: only products you want people to buy should appear.
Rewriting both descriptions with the same new text leaves two duplicate listings, only longer. It happens when text is cleaned before deciding which row remains. Combine or trash first, then rewrite only the surviving listing from its facts. A better description on a duplicate is not a correction.
Grouping a set as variations, for example, a mug and saucer also sold separately, creates a variable product that does not match what you ship at checkout. It happens when “same collection” is confused with “same item”. Keep two products and, if needed, a third product for the set, with its own SKU, without recycling the codes of the individual pieces.
Where to look first for catalog duplicates
Start with findings that affect multiple products and can be confirmed using data already in the store, without rewriting another row yet.
On Katapic, the WooCommerce catalog connects in read and write mode only for products, using the free, open-source Katapic for WooCommerce plugin on WordPress.org, without copying keys. Synchronization is bidirectional: it imports the catalog and sends approved listings back to the store. It does not modify customers, orders, or payments. The free, accountless scan is read-only for the latest 100 products and changes nothing. With a free account, the diagnosis covers the catalog and assigns four scores per product: search engines, assistant searches, brand relevance, and completeness.
Duplicates are included in deterministic checks of data, images, text, and duplicates, without artificial intelligence and without credits. The screen opens on “Where to start”: the findings with the greatest impact, how many products each affects, and one click to view them. Each finding links to the public rule supporting it, including the Google Merchant Center product data specification, OpenAI product feed specification, Meta catalog fields, and GS1 check digit. The barcode is never taken from the web or generated; it is validated with the check digit, and a product without a code can be declared as such.
Among the free corrections, always proposed and never silent, is variation grouping: products that differ only by size, color, quantity, or package are proposed as variations of one product, subject to your confirmation, with a preview and count, and can be undone for 30 days. The same free group includes all-uppercase titles, dirty HTML in descriptions, an undeclared condition, a declared absence of a manufacturer barcode, and a Google category proposed and applied only after confirmation. The image check also flags the same photo shared by multiple products, as well as missing, too-small, or rejected-format photos. The Google Shopping and ChatGPT feeds can be downloaded with only products that pass the checks, so an ambiguous pair does not appear in the file with ready listings.
If you request it after cleanup, rewriting starts from the title, specifications, and company profile. A verifier removes claims unsupported by any source. A rejected rewrite, or one that does not improve the score, is not saved and costs nothing. It is not the first step for duplicates. First decide which listing remains. Then, if that listing’s text is empty or copied, rewrite only that one, without inventing measurements, prices, or codes. For Amazon, eBay, Etsy, and Vinted, Katapic prepares copy adapted to the channel rules, ready to copy and paste; publication remains manual.
Frequently asked questions about duplicate WooCommerce products
How can I find a duplicate WooCommerce SKU without paid tools?Open WooCommerce, then Products, then All Products, and export a CSV containing at least the name, SKU, and status. In the spreadsheet, sort the SKU column and scan values repeated across multiple published rows. Empty cells are not duplicates: they are missing codes to assign later. Check variations too, because the same SKU on three sizes is an inventory duplicate even when there is only one parent. WooCommerce saves the listing by default; the check is yours, using the export, not an automatic dashboard block.
Is a repeated barcode always a duplicate product?No. It is a finding to investigate. It may be the same item uploaded twice, in which case combine the listings on the row with the correct orders and data. It may be a GTIN pasted onto a different product, in which case remove the code from the wrong listing rather than inventing another one. It may be a variation that inherited the parent’s code. Check the GS1 check digit and never take a code from the web to fill the gap. If the product has no manufacturer code, declare it and keep at least the internal SKU unique.
Do duplicate WooCommerce product descriptions hurt store visibility?They harm the catalog in practical ways: two published pages compete with each other, store search shows duplicates, and a price update may be applied only halfway. Identical text copied from another channel, even on one listing, leaves out facts visitors need to read, such as brand, size, and material. Page content and structured data work together: markup confirms price and availability when it matches the page, and does not replace a distinct description. No tool can guarantee a position. Removing duplicates makes the data more consistent, which is the part you control.
When should WooCommerce product variations be grouped into one listing?Group them when only size, color, quantity, or package changes and the rest of the listing remains true. In Product data, choose Variable product, add the attribute, tick Used for variations, and assign each variation an SKU, price, stock, and photo. Do not group matching items that you also sell separately, spare parts, or a set that is a third product. According to the WooCommerce developer blog, starting with version 11.1, variation galleries will be enabled for every store: the color photo can sit on the variation, so a duplicate simple listing is not needed just to show a different image.
How can I combine two listings without losing existing orders?There is no native merge button. Orders remain linked to the listing where they were created, as do reviews. Keep that listing, copy only missing facts from the other, align stock and price, and set the discarded listing to draft. Check that it appears neither in the storefront nor in the exported file. If its URL was indexed, prepare a permanent redirect to the retained listing using the tool you use for URLs. Move it to the trash only when open orders no longer reference the discarded row. Deleting the older listing immediately is the fastest way to lose the reference.
I am looking for a platform that identifies missing information in my WooCommerce product descriptions that could help with AI searches. What is worth considering?A platform that reads the WooCommerce catalog, flags empty fields and duplicates from your data, and does not fill gaps with unsupported facts is worth considering. Ask whether it distinguishes a repeated SKU from a variation to group, shows the same photo used on multiple products, and tells you what to fix first. Katapic performs a deterministic diagnosis without credits, with four scores per product and a “Where to start” list, and proposes free corrections, including variation grouping, only after confirmation. Assistant searches remain organic: complete data improves listing consistency but does not guarantee a citation.
What should I do if the same photo is used on multiple products?Open the listings and check whether they are the same item. If they are, keep one listing, move other useful photos to the gallery or variations, and unpublish the copied rows. If they are different items, each published listing needs its own photo, or at least an image that is not the same shared file. Check the file size too: a photo that is too small may be rejected by channels, so verify each channel’s requirements. Do not generate an image instead of using a real photo if you have the image in the price list or on the product. First detach the shared file, then decide whether an image is genuinely missing.
Frequently asked questions
- How can I find a duplicate WooCommerce SKU without paid tools?
- Open WooCommerce, then Products, then All Products, and export a CSV containing at least the name, SKU, and status. In the spreadsheet, sort the SKU column and scan values repeated across multiple published rows. Empty cells are not duplicates: they are missing codes to assign later. Check variations too, because the same SKU on three sizes is an inventory duplicate even when there is only one parent. WooCommerce saves the listing by default; the check is yours, using the export, not an automatic dashboard block.
- Is a repeated barcode always a duplicate product?
- No. It is a finding to investigate. It may be the same item uploaded twice, in which case combine the listings on the row with the correct orders and data. It may be a GTIN pasted onto a different product, in which case remove the code from the wrong listing rather than inventing another one. It may be a variation that inherited the parent’s code. Check the GS1 check digit and never take a code from the web to fill the gap. If the product has no manufacturer code, declare it and keep at least the internal SKU unique.
- Do duplicate WooCommerce product descriptions hurt store visibility?
- They harm the catalog in practical ways: two published pages compete with each other, store search shows duplicates, and a price update may be applied only halfway. Identical text copied from another channel, even on one listing, leaves out facts visitors need to read, such as brand, size, and material. Page content and structured data work together: markup confirms price and availability when it matches the page, and does not replace a distinct description. No tool can guarantee a position. Removing duplicates makes the data more consistent, which is the part you control.
- When should WooCommerce product variations be grouped into one listing?
- Group them when only size, color, quantity, or package changes and the rest of the listing remains true. In Product data, choose Variable product, add the attribute, tick Used for variations, and assign each variation an SKU, price, stock, and photo. Do not group matching items that you also sell separately, spare parts, or a set that is a third product. According to the WooCommerce developer blog, starting with version 11.1, variation galleries will be enabled for every store: the color photo can sit on the variation, so a duplicate simple listing is not needed just to show a different image.
- How can I combine two listings without losing existing orders?
- There is no native merge button. Orders remain linked to the listing where they were created, as do reviews. Keep that listing, copy only missing facts from the other, align stock and price, and set the discarded listing to draft. Check that it appears neither in the storefront nor in the exported file. If its URL was indexed, prepare a permanent redirect to the retained listing using the tool you use for URLs. Move it to the trash only when open orders no longer reference the discarded row. Deleting the older listing immediately is the fastest way to lose the reference.
- I am looking for a platform that identifies missing information in my WooCommerce product descriptions that could help with AI searches. What is worth considering?
- A platform that reads the WooCommerce catalog, flags empty fields and duplicates from your data, and does not fill gaps with unsupported facts is worth considering. Ask whether it distinguishes a repeated SKU from a variation to group, shows the same photo used on multiple products, and tells you what to fix first. Katapic performs a deterministic diagnosis without credits, with four scores per product and a “Where to start” list, and proposes free corrections, including variation grouping, only after confirmation. Assistant searches remain organic: complete data improves listing consistency but does not guarantee a citation.
- What should I do if the same photo is used on multiple products?
- Open the listings and check whether they are the same item. If they are, keep one listing, move other useful photos to the gallery or variations, and unpublish the copied rows. If they are different items, each published listing needs its own photo, or at least an image that is not the same shared file. Check the file size too: a photo that is too small may be rejected by channels, so verify each channel’s requirements. Do not generate an image instead of using a real photo if you have the image in the price list or on the product. First detach the shared file, then decide whether an image is genuinely missing.


