Online store SEO
Duplicate product URLs and canonical tags: keep one version of each product in Google
18 Oct 2026 ·6 min read · اقرأ بالعربية
Most stores serve the same product at several addresses: a short link and a slug link, a link inside a collection, a link with a variant parameter, http and https, www and the bare domain. Google indexes one of them and treats the rest as duplicates. The canonical tag, a line in the page's <head> such as <link rel="canonical" href="…">, is how you tell Google which address you want. When it's missing, points to the wrong page or disagrees with your internal links, Google may pick an address you didn't intend, split signals between copies, or drop a page because it thinks it duplicates another. The worst case on bilingual stores is an Arabic product page whose canonical points to the English version: the Arabic page can drop out of Google.
How to check
- Reach one product through different paths (the homepage, a category, the search box) and compare the addresses in the browser bar.
- View the source of each and find
rel="canonical". Every variant should carry the same absolute URL, and that URL should be the product page itself. - Count the canonical tags on the page. There should be exactly one.
- In Search Console, URL Inspection shows the canonical you declared next to the one Google selected. If they differ, Google chose a different URL from the one you declared.
- Run the free audit. Store Audit by Ahmed Fayed compares each sampled page's canonical with its URL, flags missing, relative, multiple or cross-page canonicals, and checks whether your platform's default address serves a second copy of the store.
How to fix
Google's rules apply on every platform:
- Signals rank in this order: a redirect is strongest, then
rel="canonical", then inclusion in the sitemap, which is weakest. - Use one absolute canonical URL per page, in the
<head>. - Don't combine a canonical with
noindex, and don't use robots.txt to canonicalize. - Don't use JavaScript to change the canonical to something other than what the original HTML says.
<link rel="canonical" href="https://example.com/products/oud-50ml">
Your platform's default address
Hosted stores also exist at a platform address: *.zid.store, *.myshopify.com or salla.sa/{store}. That address should redirect to your custom domain, not serve a second copy of the store. Platform behavior varies; check your own store by opening its platform address and confirming it lands on your domain.
Salla
Salla product URLs are built on the product ID, so /-/p{id} and /{slug}/p{id} open the same product. The - form appears when the slug is left out; Salla's API exposes a friendly-URLs setting (friendly_urls_status) that controls this. On a live store checked for this article, both forms carried the same canonical, the full Arabic-slug URL, which is correct. The canonical comes from the platform, not the theme: Salla's default theme has no canonical tag in its templates, and the SEO settings have no canonical field. A wrong canonical is therefore a platform limitation; send the affected URLs to Salla support. A 2026 Arabic guide reports Salla product canonicals pointing to the category page. That wasn't reproduced on the store checked, so treat it as something to verify on yours, not as a known bug.
Zid
On a live Zid store, product pages carried a self-referencing canonical on the slug URL. Slugs ending in -1 or -2, often with titles that start with "نسخة من" (copy of), mean a product was duplicated. A duplicated product is a separate product with its own URL, so no canonical merges it: delete the copy or merge its details into the original. Whether merchants can edit the canonical on Zid is unconfirmed; if it's wrong, contact Zid support with examples.
Shopify
Products are reachable at /products/{handle} and at /collections/{collection}/products/{handle}. The collection form canonicalizes to the plain form, but themes that build product links with within: collection make every collection grid link to the non-canonical version. Shopify's Dawn theme uses the plain product URL. In your theme's product card snippet, change {{ product.url | within: collection }} to {{ product.url }} (the variable name varies by theme). URLs with ?variant= canonicalize to the base product and are usually safe to ignore in Search Console reports.
WordPress/WooCommerce
Two SEO plugins, or one plugin plus the theme or a page builder, can each print a canonical tag, leaving the page with two. Keep one source of SEO tags and turn the others off.
Custom-coded
Print one absolute canonical in the server HTML, redirect http to https and one host version to the other with a single 301, and keep internal links, the sitemap and the canonical pointing at the same URL.
Common mistakes
- An Arabic page whose canonical points to the English version, or the reverse. Each language version should be canonical to itself.
- A canonical and
noindexon the same page. - Relative canonical URLs, or two canonical tags from two sources.
- Internal links, the sitemap and the canonical each pointing to a different version of the same product.
- Trying to overwrite a platform canonical through GTM or custom JavaScript. Google advises against changing the canonical with JavaScript.
Run the free Store Audit by Ahmed Fayed to check the canonicals on your store. If you'd like help fixing this, contact me on WhatsApp +20 102 702 0701 or at ahmed-fayed.com.
Sources
- Google Search Central: Consolidate duplicate URLs
- Google Search Central: JavaScript SEO basics
- Salla API: Store settings
- Salla theme-raed: master.twig
- Ammar Fayyad: Salla indexing problems guide (Apr 2026)
- Amsive: Shopify duplicate content between collection and product pages (older, updated 2023)
- Shopify Dawn: card-product.liquid
- VisRank: WordPress schema and SEO plugin conflicts (Apr 2026)
- NxFold: Arabic SEO technical guide
- Live checks of one Salla store and one Zid store, 30 September 2026 (stores not named).
More in this series
Back to guides