{"id":372469,"date":"2026-09-27T10:16:49","date_gmt":"2026-09-27T10:16:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/duplicate-sku-finder-for-woocommerce\/"},"modified":"2026-09-27T10:16:31","modified_gmt":"2026-09-27T10:16:31","slug":"merchlint-duplicate-sku-finder","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/merchlint-duplicate-sku-finder\/","author":23551451,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.1","stable_tag":"0.1.1","tested":"7.1.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Merchlint \u2013 Duplicate SKU and GTIN Finder for WooCommerce","header_author":"Baltano","header_description":"Finds products sharing an SKU, and products sharing or missing a GTIN. Read-only: it never writes to your catalogue.","assets_banners_color":"10527f","last_updated":"2026-09-27 10:16:31","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/merchlint.com\/duplicate-sku-finder\/","header_author_uri":"https:\/\/baltano.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":41,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.1":{"tag":"0.1.1","author":"baltano","date":"2026-09-27 10:16:31","revision":3715300}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3715298,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3715298,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3715298,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3715298,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3715298,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3715298,"resolution":"1","location":"assets","locale":"","width":1440,"height":989}},"screenshots":{"1":"The results screen: each check with what it found, the value that was read, and a link to the product."}},"plugin_section":[],"plugin_tags":[264211,148700,282942,9020,286],"plugin_category":[45],"plugin_contributors":[278694],"plugin_business_model":[],"class_list":["post-372469","plugin","type-plugin","status-publish","hentry","plugin_tags-duplicate-sku","plugin_tags-gtin","plugin_tags-product-identifiers","plugin_tags-sku","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-baltano","plugin_committers-baltano"],"banners":{"banner":"https:\/\/ps.w.org\/merchlint-duplicate-sku-finder\/assets\/banner-772x250.png?rev=3715298","banner_2x":"https:\/\/ps.w.org\/merchlint-duplicate-sku-finder\/assets\/banner-1544x500.png?rev=3715298","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/merchlint-duplicate-sku-finder\/assets\/icon.svg?rev=3715298","icon":"https:\/\/ps.w.org\/merchlint-duplicate-sku-finder\/assets\/icon.svg?rev=3715298","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/merchlint-duplicate-sku-finder\/assets\/screenshot-1.png?rev=3715298","caption":"The results screen: each check with what it found, the value that was read, and a link to the product."}],"raw_content":"<!--section=description-->\n<p>Two products with the same SKU throw off stock levels, integrations and every export file your store\nproduces. Two products with the same GTIN tell a shopping service they are the same item, so one of\nthem quietly disappears from search. A product with no identifier at all usually drops out of the\nfeed altogether.<\/p>\n\n<p>None of this breaks your store, which is why it goes unnoticed for years. Nothing in the WooCommerce\nadmin points at any of it.<\/p>\n\n<p>This plugin checks three things and nothing else:<\/p>\n\n<ul>\n<li><strong>Two products share the same SKU.<\/strong> Translations of one product are not counted as a duplicate \u2014\na multilingual store gives every translation the same code on purpose, and reporting that pair\nwould be a false alarm. We read the translation groups of Polylang and WPML.<\/li>\n<li><strong>Product with no GTIN, UPC, EAN or ISBN.<\/strong> Stays quiet in shops that do not use identifiers at\nall: if not one product has the field filled, you get a single sentence saying so instead of a\nlist of your entire catalogue. Handmade goods, services and your own production carry no\nmanufacturer's barcode and need none.<\/li>\n<li><strong>Two products share the same identifier.<\/strong><\/li>\n<\/ul>\n\n<h4>What it does not do<\/h4>\n\n<p>It <strong>never writes to your catalogue<\/strong>. There is no \"Fix it\" button, and there will not be one: a\nbulk change to product data is not something a report should do on your behalf. Every finding shows\nthe value that was read, so you can check the claim before you act on it.<\/p>\n\n<p>It reads no order data, which makes the scan far cheaper than a full audit. The scan still runs\nin a single request, so on a very large catalogue it can run into your host's time limit \u2014 the\nscreen says so when that becomes likely, and the WP-CLI command has no such limit.<\/p>\n\n<h4>Evidence, not adjectives<\/h4>\n\n<p>Every finding shows the field that was read and the value found, with a link straight to the product\nin your admin. A rule that could not run says so by name \u2014 on WooCommerce older than 9.2 the\nidentifier field does not exist at all, and the report says that rather than reporting every product\nas faulty.<\/p>\n\n<h4>Where the audit engine comes from<\/h4>\n\n<p>The scanning engine is the one behind Merchlint, a full WooCommerce catalogue audit from the same\nauthor. This plugin carries its own copy with its own class names, so both can run side by side.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate.<\/li>\n<li>Open <strong>Tools \u2192 Duplicate SKU and GTIN Finder<\/strong>.<\/li>\n<li>Press <strong>Scan now<\/strong>.<\/li>\n<\/ol>\n\n<p>For large catalogues there is a WP-CLI command: <code>wp merchlint-duplicate-sku-finder scan<\/code>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20change%20anything%20in%20my%20shop%3F\"><h3>Does it change anything in my shop?<\/h3><\/dt>\n<dd><p>No. It reads the catalogue and writes nothing back. The only thing it stores is the last result, so\nthat reloading the page does not require another scan.<\/p><\/dd>\n<dt id=\"my%20shop%20is%20multilingual.%20will%20translations%20be%20reported%20as%20duplicates%3F\"><h3>My shop is multilingual. Will translations be reported as duplicates?<\/h3><\/dt>\n<dd><p>No. Translations of one product share an SKU on purpose, and the check treats one translation group\nas one product. Polylang and WPML are both read.<\/p><\/dd>\n<dt id=\"i%20do%20not%20use%20gtins%20at%20all.%20will%20i%20get%20a%20list%20of%20every%20product%3F\"><h3>I do not use GTINs at all. Will I get a list of every product?<\/h3><\/dt>\n<dd><p>No. If not one product in the catalogue has the field filled, the check stays quiet and tells you\nwhy, in one sentence.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Renamed on the request of the plugin directory review: the display name now leads with the\nMerchlint brand, and the slug and text domain are \"merchlint-duplicate-sku-finder\".<\/li>\n<li>One name for everything, so nothing is left half-renamed: the WP-CLI command is now\n  wp merchlint-duplicate-sku-finder scan, the screen sits at\nTools -&gt; Duplicate SKU and GTIN Finder (tools.php?page=merchlint-duplicate-sku-finder) and the\nexport is saved as merchlint-duplicate-sku-finder.csv. The checks, the findings and the columns\nof the CSV file are unchanged.<\/li>\n<li>The name also says what the plugin actually looks at: duplicate SKUs and duplicate or missing\nproduct identifiers, not SKUs alone.<\/li>\n<li>Accessibility: the table headers now carry <code>scope<\/code>, and each Edit link says which product it\nedits, so a screen reader no longer reads eight links called only \"Edit\".<\/li>\n<li>Declared compatibility with the Cart and Checkout blocks, next to the existing High-Performance\nOrder Storage declaration. The plugin adds nothing to the front end; without the declaration\nWooCommerce listed it among extensions of uncertain compatibility.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release. Duplicate SKU, missing GTIN and duplicate GTIN, with evidence on every finding,\nCSV export and a WP-CLI command.<\/li>\n<\/ul>","raw_excerpt":"Finds products sharing an SKU, and products sharing or missing a GTIN. Read-only: it never writes to your catalogue.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/372469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=372469"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/baltano"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=372469"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=372469"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=372469"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=372469"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=372469"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=372469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}