Where you can achieve what your competitors can’t


Shopify Show Product Variants As Separate Products On Collection Page

Displaying each product variant as its own item on your Shopify collection pages sharpens catalog clarity, tailors browsing to shopper intent, and unlocks measurable revenue gains unlocking several strategic advantages:

Collection Clarity

• Expands your assortment visually, showcasing every color, size, or finish as a standalone tile.
• Eliminates hidden options buried behind a single parent product, reducing user confusion.
• Allows stronger visual merchandising grids that mix complementary hues instead of duplicates.
• Ensures relevant thumbnails surface in filtered results (e.g., “Red” or “Medium”) without extra clicks.

Browsing Experience

• Lets customers discover their preferred variant immediately in the collection view no deep dive required.
• Shortens decision making by pairing each variant with its own price, review stars, and availability badge.
• Supports quick add buttons mapped to the exact variant, streamlining the add to cart flow.
• Improves mobile scrolling by presenting distinct cards instead of multi step variant selectors.

Conversion Impact

• Lifts click through and add to cart rates when shoppers see “their” color/size front and center.
• Lowers abandonment caused by variant mismatch surprises on the product page.
• Enables variant level discounts (“Blue 40% Off”) that drive urgency and clear overstock.
• Increases overall AOV as customers bundle multiple variant styles discovered side by side.

CODE : snippet/card-variant.liquid

CODE : find in main-collection-product-grid.liquid = card-product from Li to /Li


{%- for filter in collection.filters -%}
{%- for activeFilter in filter.active_values -%}
{%- if filter.label == "Colour" or filter.label == "Color" -%}
{%- assign colorFilterEnabled = true -%}
{%- endif -%}
{%- endfor -%}
{%- endfor -%}
{%- liquid
    assign option_chosen = "Color" 
    assign option_index = ''
    for option in product.options
        if option_chosen == option
            assign option_index = forloop.index0 
            break
        endif
    endfor
-%}
{%- if option_index == '' or  colorFilterEnabled -%}
  <li
  class="grid__item{% if settings.animations_reveal_on_scroll %} scroll-trigger animate--slide-in{% endif %}"
  {% if settings.animations_reveal_on_scroll %}
      data-cascade
      style="--animation-order: {{ forloop.index }};"
  {% endif %}
  >
  {% render 'card-product',
      card_product: product,
      media_aspect_ratio: section.settings.image_ratio,
      image_shape: section.settings.image_shape,
      show_secondary_image: section.settings.show_secondary_image,
      show_vendor: section.settings.show_vendor,
      show_rating: section.settings.show_rating,
      lazy_load: lazy_load,
      show_quick_add: section.settings.enable_quick_add,
      section_id: section.id
  %}
  </li>
{%- else -%}
  {% assign displayed_values = "" %}
  {% for variant in product.variants %}
  {%- liquid
    assign variant_option = variant.options[option_index]
    assign valueIsDisplayed = false
    for value in displayed_values
      if value == variant_option
        assign valueIsDisplayed = true
        break
      endif
    endfor
  -%}
  {% unless valueIsDisplayed %}
      {%- assign variant_option_arr = variant_option | append: ';'  | split: ';' -%}
      {% assign displayed_values = displayed_values | concat: variant_option_arr %}
      <li
      class="grid__item{% if settings.animations_reveal_on_scroll %} scroll-trigger animate--slide-in{% endif %}"
      {% if settings.animations_reveal_on_scroll %}
          data-cascade
          style="--animation-order: {{ forloop.index }};"
      {% endif %}
      >
      {% render 'card-variant',
          card_variant: variant,
		  card_product: product,
          variant_option: variant_option,
          media_aspect_ratio: section.settings.image_ratio,
          image_shape: section.settings.image_shape,
          show_secondary_image: section.settings.show_secondary_image,
          show_vendor: section.settings.show_vendor,
          show_rating: section.settings.show_rating,
          lazy_load: lazy_load,
          show_quick_add: section.settings.enable_quick_add,
          section_id: section.id
      %}
      </li>
    {% endunless %}
  {% endfor %}
{%- endif -%}