Back to Blog

How to Optimize Product Variants in eCommerce for Better Search Rankings

If you’re looking to boost your eCommerce SEO and drive more sales, managing product variants effectively is a game-changer. Proper optimization ensures your products are easily found by search engines, bringing more traffic to your site and increasing conversions. 

In this guide, we’ll share four expert strategies for optimizing your product variants: mastering canonical tags, using item group IDs, leveraging structured data, and strategically applying canonical links to maximize your visibility. Ready to improve your SEO and increase your sales? Let’s dive in!

Table of Contents

Are You an SEO Expert? 
Discover how WordLift’s tools are designed to supercharge your SEO strategies. Book a demo now to see how we can help you deliver exceptional results for your clients.

Should I Use Canonicals on Product Variants or Not?

Deciding when and how to use canonical tags is key to maximizing your eCommerce SEO. It depends on the nature of your products and your strategy. Here’s what you need to know:

When Not to Use Canonicals:

  • Unique Content: If your product variants (e.g., colors, sizes) have unique descriptions, images, and titles, you don’t need canonical tags. This allows each variant to rank individually and capture specific search queries. To make this effective, ensure each variant is unique and provides detailed, specific information for users.
  • Variant-Specific SEO: If your variants target different keywords (e.g., “red T-shirt” vs. “blue T-shirt”), keep them separate to maximize visibility for different searches. Each variant should have a different title and description that clearly highlights its unique features.

When to Use Canonicals:

  • Similar Content Across Variants:  For variants with minor differences, canonical tags point search engines to the main product page, consolidating SEO signals and preventing duplicate content issues.
  • Unified Search Focus: Using canonical tags can guide search engines to a single, authoritative product page, ensuring that it receives the ranking credit and users are directed to the primary version.

Tip: Ensure that if you choose not to use canonicals, each variant has distinct and optimized content to prevent competition among your pages.

Google Search Console Traffic Data and Crawling Budget

Reviewing Google Search Console traffic data is essential to understand how much traffic your canonical pages and product variants receive. This analysis can play a significant role in your SEO strategy. For instance, if most of the product traffic is directed to the canonical page, but the variants are self-canonicalized, you might consider consolidating them under a canonical tag.

For larger websites, managing the crawling budget is essential. If product variants consume significant crawl resources without driving substantial traffic, it may be necessary to reconsider whether they should be canonicalized to improve crawling efficiency.

Tip: Regularly audit your product pages in GSC to identify low-performing variants. Adjust your canonical strategy to ensure that only valuable pages are indexed, helping to improve site efficiency and crawl prioritization.

Using Item Group ID to Organize Variants in Google Merchant Center

Item group ID [item_group_id]

A fundamental part of any SEO strategy involves optimizing Google Merchant Center to ensure that product data is well-organized and easily understood by search engines. One key element of this optimization is the use of Item Group ID for effective categorization and management of product variants.

Benefits of Using Item Group ID:

  • Clear Organization: The Item Group ID groups related product variants, making it clear that they belong to the same base product. This improves the presentation of variants and helps search engines understand their relationship.
  • Consistent Data Management: It simplifies the process of managing and updating product data across multiple variants.

Below are some key best practices for effectively managing product variants:

  • Use ID to uniquely identify individual products and item group ID to group related variants.
  • Apply item group ID only for true product variants, not for items that are similar but distinct.
  • Maintain consistency by keeping item group ID values stable and unchanged over time.
  • Ensure that each product variant has a unique landing page URL with distinct path segments or query parameters to differentiate them.

Using Product Variant Structured Data (ProductGroup)

Adding structured data support for Product Variants

Product variant structured data, particularly the ProductGroup schema, is an effective way to optimize how product variants are presented and indexed by search engines. This structured data format helps search engines understand the relationships between a main product and its variants, such as different sizes, colors, or styles. Implementing ProductGroup structured data can enhance how product variants appear in search results, offering more detailed and accurate product information. Here is how structured data can be used in different cases to address various implementation scenarios for product variants:

1. Single-page Website Structure

A single-page structure assumes that all variants are accessible within a single page, typically through URL query parameters. The structure for the schema is defined using a `ProductGroup` entity that nests variant-specific `Product` entities under the `hasVariant` property.

Code Example for a Single-page Website with Variants Nested Under ProductGroup:

```
    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org/",
        "@type": "ProductGroup",
        "name": "Wool winter coat",
        "description": "Wool coat, new for the coming winter season",
        "url": "https://www.example.com/coat",
        "brand": {
          "@type": "Brand",
          "name": "Good brand"
        },
        "audience": {
          "@type": "PeopleAudience",
          "suggestedGender": "unisex",
          "suggestedAge": {
            "@type": "QuantitativeValue",
            "minValue": 13,
            "unitCode": "ANN"
          }
        },
        "productGroupID": "44E01",
        "pattern": "striped",
        "material": "wool",
        "variesBy": [
          "https://schema.org/size",
          "https://schema.org/color"
        ],
        "hasVariant": [
          {
            "@type": "Product",
            "sku": "44E01-M11000",
            "gtin14": "98766051104214",
            "image": "https://www.example.com/coat_small_green.jpg",
            "name": "Small green coat",
            "description": "Small wool green coat for the winter season",
            "color": "Green",
            "size": "small",
            "offers": {
              "@type": "Offer",
              "url": "https://www.example.com/coat?size=small&color=green",
              "priceCurrency": "USD",
              "price": 39.99,
              "itemCondition": "https://schema.org/NewCondition",
              "availability": "https://schema.org/InStock",
              "shippingDetails": { "@id": "#shipping_policy" },
              "hasMerchantReturnPolicy": { "@id": "#return_policy" }
            }
          },
          {
            "@type": "Product",
            "sku": "44E01-K11000",
            "gtin14": "98766051104207",
            "image": "https://www.example.com/coat_small_lightblue.jpg",
            "name": "Small light blue coat",
            "description": "Small wool light blue coat for the winter season",
            "color": "light blue",
            "size": "small",
            "offers": {
              "@type": "Offer",
              "url": "https://www.example.com/coat?size=small&color=lightblue",
              "priceCurrency": "USD",
              "price": 39.99,
              "itemCondition": "https://schema.org/NewCondition",
              "availability": "https://schema.org/InStock",
              "shippingDetails": { "@id": "#shipping_policy" },
              "hasMerchantReturnPolicy": { "@id": "#return_policy" }
            }
          },
          {
            "@type": "Product",
            "sku": "44E01-X1100000",
            "gtin14": "98766051104399",
            "image": "https://www.example.com/coat_large_lightblue.jpg",
            "name": "Large light blue coat",
            "description": "Large wool light blue coat for the winter season",
            "color": "light blue",
            "size": "large",
            "offers": {
              "@type": "Offer",
              "url": "https://www.example.com/coat?size=large&color=lightblue",
              "priceCurrency": "USD",
              "price": 49.99,
              "itemCondition": "https://schema.org/NewCondition",
              "availability": "https://schema.org/Backorder",
              "shippingDetails": { "@id": "#shipping_policy" },
              "hasMerchantReturnPolicy": { "@id": "#return_policy" }
            }
          }
        ]
      },
      {
        "@context": "https://schema.org/",
        "@type": "OfferShippingDetails",
        "@id": "#shipping_policy",
        "shippingRate": {
          "@type": "MonetaryAmount",
          "value": 2.99,
          "currency": "USD"
        },
        "shippingDestination": {
          "@type": "DefinedRegion",
          "addressCountry": "US"
        },
        "deliveryTime": {
          "@type": "ShippingDeliveryTime",
          "handlingTime": {
            "@type": "QuantitativeValue",
            "minValue": 0,
            "maxValue": 1,
            "unitCode": "DAY"
          },
          "transitTime": {
            "@type": "QuantitativeValue",
            "minValue": 1,
            "maxValue": 5,
            "unitCode": "DAY"
          }
        }
      },
      {
        "@context": "http://schema.org/",
        "@type": "MerchantReturnPolicy",
        "@id": "#return_policy",
        "applicableCountry": "US",
        "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
        "merchantReturnDays": 60,
        "returnMethod": "https://schema.org/ReturnByMail",
        "returnFees": "https://schema.org/FreeReturn"
      }
    ]
    </script>
```

2. Multi-page Website Structure

In a multi-page structure, each variant has its own unique page URL. The `ProductGroup` is still defined on each page but includes references to other variant pages to establish connectivity between them.

Code Example for Multi-page Website with Variants Separate from ProductGroup:

Page 1: Light Blue Variants

```
    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org/",
        "@type": "ProductGroup",
        "@id": "#coat_parent",
        "name": "Wool winter coat",
        "description": "Wool coat, new for the coming winter season",
        "brand": {
          "@type": "Brand",
          "name": "Good brand"
        },
        "productGroupID": "44E01",
        "variesBy": [
          "https://schema.org/size",
          "https://schema.org/color"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Product",
        "isVariantOf": { "@id": "#coat_parent" },
        "sku": "44E01-K11000",
        "gtin14": "98766051104207",
        "image": "https://www.example.com/coat_lightblue.jpg",
        "name": "Small light blue coat",
        "description": "Small wool light blue coat for the winter season",
        "color": "light blue",
        "size": "small",
        "offers": {
          "@type": "Offer",
          "url": "https://www.example.com/coat/lightblue?size=small",
          "priceCurrency": "USD",
          "price": 39.99,
          "itemCondition": "https://schema.org/NewCondition",
          "availability": "https://schema.org/InStock",
          "shippingDetails": { "@id": "#shipping_policy" },
          "hasMerchantReturnPolicy": { "@id": "#return_policy" }
        }
      },
      {
        "@context": "https://schema.org",
        "@type": "Product",
        "isVariantOf": { "@id": "#coat_parent" },
        "sku": "44E01-X1100000",
        "gtin14": "98766051104399",
        "image": "https://www.example.com/coat_lightblue.jpg",
        "name": "Large light blue coat",
        "description": "Large wool light blue coat for the winter season",
        "color": "light blue",
        "size": "large",
        "offers": {
          "@type": "Offer",
          "url": "https://www.example.com/coat/lightblue?size=large",
          "priceCurrency": "USD",
          "price": 49.99,
          "itemCondition": "https://schema.org/NewCondition",
          "availability": "https://schema.org/Backorder",
          "shippingDetails": { "@id": "#shipping_policy" },
          "hasMerchantReturnPolicy": { "@id": "#return_policy" }
        }
      },
      {
        "@context": "https://schema.org",
        "@type": "Product",
        "isVariantOf": { "@id": "#coat_parent" },
        "url": "https://www.example.com/coat/green?size=small"
      },
      {
        "@context": "https://schema.org/",
        "@type": "OfferShippingDetails",
        "@id": "#shipping_policy",
        "shippingRate": {
          "@type": "MonetaryAmount",
          "value": 2.99,
          "currency": "USD"
        },
        "shippingDestination": {
          "@type": "DefinedRegion",


          "addressCountry": "US"
        },
        "deliveryTime": {
          "@type": "ShippingDeliveryTime",
          "handlingTime": {
            "@type": "QuantitativeValue",
            "minValue": 0,
            "maxValue": 1,
            "unitCode": "DAY"
          },
          "transitTime": {
            "@type": "QuantitativeValue",
            "minValue": 1,
            "maxValue": 5,
            "unitCode": "DAY"
          }
        }
      },
      {
        "@context": "https://schema.org/",
        "@type": "MerchantReturnPolicy",
        "@id": "#return_policy",
        "applicableCountry": "US",
        "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
        "merchantReturnDays": 60,
        "returnMethod": "https://schema.org/ReturnByMail",
        "returnFees": "https://schema.org/FreeReturn"
      }
    ]
    </script>
```

These examples show how to organize structured data for both single-page and multi-page websites with product variants. The main distinction lies in whether the variants are defined within a single `ProductGroup` or referenced across multiple pages.

Tip: Implementing the ProductGroup schema markup helps Google better identify products and understand the relationship between each canonical and its variants. Since applying ProductGroup, we’ve observed a significant increase in the number of products indexed in Google Search Console, often leading to improved traffic from free listings.

Using the Canonical Link [canonical_link] Attribute for Variants

Using the Canonical Link [canonical_link] Attribute for Variants

One of my favorite and often underestimated attributes in eCommerce is the Google Search index link [canonical_link]. This attribute in Google Merchant Center is as powerful as canonical tags in HTML pages and provides numerous benefits:

  • Enhances Canonical Signals: If you decide to implement canonical tags for product variants on your website, it’s essential to reflect the same in Google Merchant Center to reinforce these signals to Google.
  • Addresses Parameterized and Paid URLs Issues: This attribute plays a significant role in clarifying preferred URLs for search engines, which can positively impact the crawl budget, especially when dealing with parameterized URLs in GMC. Many companies, historically viewing GMC solely as a paid traffic tool, often overlook the value of the `[canonical_link]` attribute. However, in my experience managing eCommerce sites, this attribute has been a game-changer, unlocking the potential for organic traffic through Google Shopping.

Are You an SEO Expert? 
Discover how WordLift’s tools are designed to supercharge your SEO strategies. Book a demo now to see how we can help you deliver exceptional results for your clients.