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

  1. Reach one product through different paths (the homepage, a category, the search box) and compare the addresses in the browser bar.
  2. 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.
  3. Count the canonical tags on the page. There should be exactly one.
  4. 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.
  5. 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 noindex on 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

Canonicals

More in this series

Back to guides