Fix duplicate product variant URLs

Variants often create near-duplicate URLs for the same item. Choose one page with variant selection and a single canonical, or separate URLs when demand and unique content justify them. Never canonicalize a variant to a different product, and keep the base URL stable across site and feed.

mediumIn codeimpact effort

Why this matters

One product page, or one self-canonical page per variant.

Get the full breakdown

The extended brief explains when this works, when it does not, and the trade-offs. Join the waitlist and it unlocks for every tip when sign-in opens; MCP access is the paid part.

Join the waitlist

Before you start

  • A catalog with variant relationships
  • Access to product routing

How to apply it

  1. Inventory variant URLs General best practice

    List every product and its variant URLs. Identify which variants have unique content, demand or inventory differences that justify a page.

    Check: The inventory shows each variant URL, its traffic and whether it has unique content.

  2. Consolidate or self-canonicalize

    For consolidated products, canonicalize variants to the base URL and keep selection in the UI. For separate pages, self-canonicalize and write distinct titles and copy.

    Check: No variant canonicalizes to a different product, and each retained variant page self-canonicalizes.

  3. Align feeds and markup

    Use the same base URL in the sitemap, Merchant Center feed and ads. Add ProductGroup with hasVariant for consolidated products.

    Check: Feed, sitemap and canonical agree for ten sampled products.

Get the prompt for your agent

A ready-to-paste prompt for your agent that implements this tip and verifies the result in your repo.

Join the waitlist

Source: seo-mcp playbook · curated entry · report an error

Framework notes

shopify

Variant URLs use `?variant=` by default and resolve to the product canonical; keep that behavior and do not create separate pages per variant without unique content.

nextjs-app

Use one dynamic product route and set `alternates.canonical` to the base product path regardless of the selected variant parameter.

Official references

Let your agent apply this + 161 more tips.

Pre-order — $19