How to create individual option selectors for product variants in Shopify instead of combined dropdowns

I’m working on building a custom product page layout for my Shopify store and running into some challenges with variant selection display.

Current Issue:
By default, Shopify shows product variants as complete combinations in dropdown menus or radio buttons. For example, if I have these variants:

  • XL|Red|Female
  • S|Red|Female

Shopify treats each as one single selectable option rather than breaking them into separate choosable attributes.

What I Want:
I need to split these into individual selection controls where customers can pick size, color, and gender separately. Think of how most clothing sites work - you choose size from one selector, color from another, etc.

My Challenge:
I’m struggling to figure out how to extract and restructure the variant data from Shopify’s system to create this kind of interface. The standard theme structure doesn’t seem built for this approach.

Has anyone successfully implemented separate option selectors for variants? What’s the best way to parse and display this data?

Been dealing with this for years. Manual Liquid works but gets messy fast with complex variant matrices.

I automated the whole thing instead. Built a workflow that pulls variant data from Shopify’s API, processes it into clean arrays, and pushes everything to custom metafields. My theme just reads those metafields to build the selectors.

It handles all the variant matching automatically. Pick Size M, Color Blue - it instantly knows what’s available and updates the other dropdowns. No more wrestling with nested Liquid loops or complex JavaScript.

Runs whenever products update so selectors stay synced. Takes 10 minutes to set up versus hours of custom coding each time.

Latenode makes Shopify data processing really straightforward. Build the whole workflow visually without code.

Had this same issue last month rebuilding our product pages. Game changer was building a variant availability matrix upfront instead of checking combinations every time someone clicks something. I made a JavaScript object that maps each option to what’s actually available with it. Pick “Red” and the size dropdown instantly shows only sizes that come in red - no impossible combinations. Customers get instant feedback and can’t select stuff that doesn’t exist. Performance is night and day compared to looping through every variant on each selection. Map out your variant relationships first, then build your selectors around that.

totally get where ur coming from! had the same headache. what worked for me was looping through product.options in Liquid to make separate dropdowns. then, js helps to match the selections with the right variants. it’s a bit of a process, but super worth it in the end!

Use product.options_with_values to build separate selectors. Make a select element for each option (size, color, gender) and fill them with available values. The JavaScript’s the tricky part - track all three selections and find the matching variant ID from product.variants. I built a variant lookup object that maps option combos to variant IDs. When someone changes a selector, check if that combo exists and is available. If not, disable the add to cart button. Handle inventory properly so customers can’t pick unavailable combos. Bit of work but you get full control over the experience.

Instead of re-engineering your theme’s JavaScript to handle selection states, install a product options app like Misk Variant & Product Options.

It automatically extracts your variant data and splits them into separate visual elements (like individual swatches, dropdowns, or buttons) while passing the correct SKU data straight to the checkout.

Bringing this one back up because separating product variant selectors can drastically improve user experience on Shopify. Has anyone experimented with Latenode’s new features to achieve this? I’m curious how CPU seconds in the Pay as You Go plan have impacted your workflow. Also, any insights on using MCP server capabilities in this context? Let’s get the conversation going again!