Fixing Duplicate Product URLs
A duplicate product URL is any second address that shows the same product. Some come from the shop itself, such as a product reached through a category path, with a tracking parameter, or with different capital letters. Others come from the catalogue: the same item imported twice, or listed once per supplier.
Search engines then have to guess which address to show, links get split, and crawlers spend time on copies. This guide shows how to tell the two kinds apart, pick the one URL each product should have, and make canonicals, links, sitemaps and redirects all agree on it.
Two different problems with one name
The Ecommerce Crawl finds duplicate product URLs by spotting different addresses that serve the same product content. Before fixing anything, work out which kind of duplication you have, because the fixes are different.
URL duplicates: one product, several addresses
There is a single product record in your shop, but the website makes it reachable at more than one URL. Nobody created the copies on purpose; the platform, theme or an app generates them. The fix is technical: tell search engines which URL is the real one, and stop your own pages linking to the others.
Record duplicates: the same product entered twice
There are two or more separate product records for what a customer would consider the same item. It happens when a catalogue is imported twice, when two suppliers provide the same item and each gets its own listing, when a product is recreated instead of edited, or when a marketplace sync creates a copy. Each record has its own URL, its own stock, often its own reviews. The fix is a catalogue decision: merge them into one listing and redirect the rest.
Where URL duplicates come from
| Source | Primary | Duplicate |
|---|---|---|
| Category path in product URL | /products/oak-bread-board | /kitchen/boards/oak-bread-board |
| Tracking and referral parameters | /products/oak-bread-board | /products/oak-bread-board?utm_source=email |
| Case differences | /products/oak-bread-board | /products/Oak-Bread-Board |
| Trailing slash or file extension | /oak-bread-board.html | /oak-bread-board.html/ |
| Host and protocol | https://www.example.co.uk/... | http://example.co.uk/... |
| Quick view or print templates | /products/oak-bread-board | /products/oak-bread-board?view=quick |
| Internal IDs | /products/oak-bread-board | /catalog/product/view/id/412 |
Variant parameters such as ?variant=123 or ?size=large are a related case
with their own trade-offs, covered in Fixing
variant URL strategy. Filter and sort parameters on category pages belong to faceted
URL explosion. This guide deals with the product page itself.
Host, protocol, case and trailing-slash variants should be handled with redirects at server or platform level, because there is never a reason to serve the wrong version. Category paths, tracking parameters and view templates usually stay reachable and are handled with canonicals plus clean internal links.
Why it matters more on product pages
Duplicate URLs are rarely a penalty issue; search engines expect some duplication on shops and pick one version to show. The costs are practical:
- Split signals. If a gift blog links to one address and your newsletter to another, the links are spread across copies until search engines consolidate them, and they may consolidate onto the version you like least.
- The wrong URL in results. Google may choose a category-path or parameter version as canonical, which then appears in search, in Merchant Center checks and in analytics reports as a separate page.
- Crawl spent on copies. A product reachable through five category paths is crawled up to five times. On a large catalogue that adds up and slows discovery of new and changed products.
- Conflicting data. Record duplicates often carry different prices, stock levels or reviews. Shoppers and search engines see two versions of the truth.
How to diagnose it
- Crawl the shop. In the Ecommerce Crawl results, sort duplicate product URLs by product so you can see how many addresses each one has and which patterns repeat.
- Check the canonical tag on each version. View the source (Ctrl+U) and search for
rel="canonical". Every version of a product should point at the same primary URL, and the primary should point at itself. - Check which links your templates use. On a category page, hover over or inspect a product link. If it contains the category path or a parameter, your theme is creating the duplicates.
- Look at Search Console page indexing. Three statuses matter here: "Duplicate without user-selected canonical" (you gave no canonical, so Google chose), "Duplicate, Google chose different canonical than user" (Google disagreed with your canonical), and "Alternate page with proper canonical tag" (working as intended).
- Use URL Inspection on a sample of primaries to see the "User-declared canonical" and "Google-selected canonical" side by side.
- Search your admin for product names, SKUs and barcodes that appear more than once to find record duplicates.
The canonical tag, done properly
Each product page, whichever address it was reached through, should output exactly one canonical tag
in the <head>, with an absolute URL to the primary:
<link rel="canonical" href="https://www.example.co.uk/products/oak-bread-board">
Common mistakes the crawl turns up:
- Two canonical tags, one from the theme and one from an SEO app or plugin, sometimes pointing at different URLs. Search engines may ignore both.
- Canonicals that copy the current URL, including its parameters or category path, so every duplicate declares itself canonical.
- Relative or wrong-host URLs, such as a staging domain left in a template.
- Canonical to a URL that redirects or returns 404, which gives search engines nothing solid to consolidate on.
- Canonical added by JavaScript only, which may be seen late or not at all. Put it in the HTML the server sends.
Keep the product's structured data consistent as well: the url in the Product or Offer
markup should be the primary URL. The canonical
tags guide covers canonical syntax beyond product pages.
Merging duplicate product records
Record duplicates need a person to decide which listing survives. Choose the record with the most reviews, the strongest search history and the cleanest URL, then:
- Move stock, barcodes and supplier codes onto the surviving record so orders still work.
- Move or re-attach reviews where your review app allows it; otherwise note that they will be lost and decide whether that is acceptable.
- Delete or disable the other records.
- Add a 301 redirect from each removed record's URL to the surviving product.
- Update product feeds so only one item is sent to Merchant Center and marketplaces.
Near-duplicates are different. A single oak board and a two-board gift set are separate products, even if their descriptions overlap. Keep both, but write distinct titles and descriptions so each has its own reason to rank. Similarly, if you and many other retailers use the manufacturer's description word for word, that is not a crawl duplicate to canonicalise, but adding your own text gives your page something the others lack.
Platform notes
Shopify can serve products under collection paths but outputs a canonical to the plain product URL by default; the fix is making the theme link to the plain URL, detailed in the Shopify crawl guide. WooCommerce products live at one permalink, so duplicates usually come from parameters, plugins or record duplicates from imports. Magento can build product URLs with category paths through the "Use Categories Path for Product URLs" setting; turning it off and enabling canonical tags for products removes most copies. The Magento crawl guide goes further.
The fix, step by step
Step 1
Group the crawl results by product
Export the duplicate product URLs from the Ecommerce Crawl into a spreadsheet and add a column for the product each URL belongs to, using the product ID, SKU or page title. Sort by product so every address for the same item sits together. Then note the pattern behind each extra address, such as category path, tracking parameter, capital letters or quick view, because each pattern is fixed once rather than product by product.
Step 2
Separate URL duplicates from record duplicates
For each group, open the product in your admin and check whether one record or several sit behind the URLs. One record means the site is generating extra addresses, which you fix in templates and canonicals. Several records with different IDs mean the catalogue holds copies of the same item, which you fix by merging. Mark each group so the two kinds of work do not get mixed up later.
Step 3
Choose the primary URL for each product
Pick the shortest stable address that does not depend on a category, parameter or letter case, normally the platform's plain product URL on your preferred host with https. Where Search Console shows another version has most of the clicks and external links, weigh that before switching. Write the primary into your sheet, and set server-level redirects for host, protocol, case and trailing-slash variants so they never serve content.
Step 4
Set a self-referencing canonical on the primary
Make sure the product template outputs one rel="canonical" tag in
the server HTML, with the absolute primary URL, whichever path or parameter the page was reached through.
Remove any second canonical added by an app or plugin. View source on the primary and on two or three
duplicates to confirm every version names the same URL, and that the Product markup url
matches it too.
Step 5
Make templates link only to the primary URL
Edit the category, search, related-products, breadcrumb and email templates so every product link uses the primary URL without category paths or parameters. Check your XML sitemap lists only primaries. Keep tracking parameters for external campaigns only, never for internal links. This is the step that stops duplicates at source; without it, crawlers keep finding copies even when canonicals are correct.
Step 6
Merge duplicate product records with 301s
For each record duplicate, choose the surviving listing, move stock, identifiers and, where possible, reviews onto it, then disable the others and add a 301 redirect from each removed URL to the survivor. Update product feeds and marketplace listings so only the surviving item is sent. For near-duplicates such as gift sets and multipacks, keep both products but give each a distinct title and description.
Step 7
Check how Google picked the canonical
After a few weeks, run URL Inspection in Search Console on a sample of primary URLs and compare the user-declared canonical with the Google-selected one. Review the page indexing report for "Duplicate, Google chose different canonical than user". Where Google still disagrees, look for a signal pointing the other way, such as an internal link, sitemap entry, hreflang tag or redirect, then recrawl with the Ecommerce Crawl to confirm.
1. Will duplicate product pages get my shop penalised?
Ordinary duplication from category paths, parameters and similar causes is not treated as spam, and search engines expect some of it on shops. The effect is practical rather than punitive: search engines choose one version to show, which may not be the one you want, links are split across copies, and crawling is spent on addresses that add nothing. Fixing it makes your preferred URL the one that ranks and helps new products get crawled sooner.
2. Should I use a canonical tag or a redirect for duplicate products?
Use a redirect when the duplicate address has no reason to exist, such as http, non-www, capitalised or trailing-slash versions, and when you merge two product records into one. Use a canonical when the duplicate address still has a job to do for visitors, such as a tracking parameter on an email link or a category path the platform generates. In both cases, update your own internal links so they point directly at the primary URL.
3. Why does Search Console say Google chose a different canonical than mine?
Google weighs several signals and your canonical tag is only one of them. If your internal links, sitemap, redirects or hreflang point at a different version, or if the canonical target redirects, returns an error or differs noticeably in content, Google may pick another URL. Check each signal for the product with URL Inspection and view source, make them all name the same address, and the choice usually settles on your version after recrawling.
4. Is using the manufacturer's product description a duplicate content problem?
It is a different issue from duplicate URLs. Many retailers publish the same supplier text, and search engines generally pick which of those pages to show based on other factors, such as the site's strength and what else the page offers. It will not trigger a penalty, but it gives your page little reason to be chosen over anyone else's. Adding your own description, photos, sizing notes or answers to common questions makes the page distinct.
5. Should duplicate product URLs be blocked in robots.txt?
Usually not. If a duplicate is blocked, search engines cannot fetch it to read the canonical tag, so its signals are not consolidated onto the primary and the blocked URL can still appear in results if it is linked. For product duplicates, canonicals, redirects and clean internal links are the better tools. robots.txt is more useful for large families of filter and sort URLs that you do not want crawled at all.
6. I merged two duplicate products. What happens to the reviews?
That depends on your review system. Some review apps and platforms let you move or re-attach reviews to another product, often matched by SKU or product ID, while others tie reviews permanently to the original record. Check before deleting anything. If reviews cannot be moved, weigh keeping the record with more reviews as the survivor. Never copy reviews by hand onto another product in a way that misrepresents who reviewed what.
7. How do I stop duplicate products coming back?
Fix the sources rather than the symptoms. Make templates link only to primary URLs, keep one source of canonical tags, and set redirects for host, case and slash variants at server level. For records, add a check to your import process that matches on SKU or barcode before creating a product, and make editing the default instead of recreating. Then run the Ecommerce Crawl after theme changes, app installs and catalogue imports.
The Ecommerce Crawl maps the URLs on your store and finds duplicate product URLs, alongside faceted navigation explosion, orphan products and out-of-stock items.
Open Ecommerce Crawl Fixes โ