WooCommerce Variable Product: Complete Setup Guide (2026)
Learn how to set up a WooCommerce variable product with attributes, variations, stock, images and per-variation shipping. Step-by-step with FAQ.

A WooCommerce variable product is one listing that sells multiple versions of the same item — different sizes, colors, materials, or bundles — each with its own price, SKU, stock, image, and (with the right plugin) its own shipping rules. Done right, variable products keep your catalog tidy, your URLs SEO-friendly, and your conversion rate high. Done wrong, they break stock counts, hide variations from Google, and trigger shipping conflicts at checkout.
This is the complete 2026 guide. We'll cover attributes, variations, images, stock, pricing, SEO, and the per-variation shipping setup most tutorials skip.
What is a WooCommerce variable product? WooCommerce has four product types: **simple**, **grouped**, **external/affiliate**, and **variable**. A variable product is the right choice whenever one product comes in versions that share the same description but differ on one or two axes — typically size and color, but also length, finish, flavor, or bundle size.
Each version is called a variation. Each variation is a real, separately stocked SKU under the hood, even though the customer only sees one product page with dropdowns or swatches.
| Product type | Use when |
|---|---|
| Simple | One SKU, one price, no options |
| Variable | One product, multiple SKUs (size/color/etc.) |
| Grouped | Several related products sold from one page |
| External | You list it, someone else fulfills it |
If you've been duplicating products to handle sizes, stop — switch to variable. You'll consolidate reviews, simplify your sitemap, and stop competing against yourself in Google.
Attributes vs variations: the part everyone gets wrong **Attributes** are the axes (Size, Color). **Variations** are the actual combinations (Medium / Red, Large / Blue).
You define attributes once at the store level under Products → Attributes (e.g. "Size" with terms S, M, L, XL). Then on each product you tick "Used for variations" and pick which terms apply to *that* product. Finally you generate variations from those terms.
Two rules that save hours of debugging:
1. Always create attributes at the store level first, not as "custom product attributes" on the product itself. Store-level attributes can be filtered, faceted, and reused across products. Custom ones can't. 2. Don't over-attribute. Every attribute multiplies your variation count. Two attributes with 5 terms each = 25 variations to price, stock, and image. Three with 5 each = 125. Keep it to two axes whenever possible.
Step-by-step: create a variable product Here's the canonical setup. Assume a t-shirt with sizes (S, M, L) and colors (Black, White).
1. Products → Attributes → Add new for "Size" and "Color". Add the terms. Enable "Archives" if you want filterable category pages. 2. Products → Add new. Set the product type to Variable product in the Product data dropdown. 3. Fill Title, Description, Categories, Tags, Featured image, and Gallery. 4. Open the Attributes tab. Add Size and Color from the dropdown. For each, click "Select all" (or pick the relevant terms) and tick Used for variations. 5. Open the Variations tab. Click Generate variations from all attributes. WooCommerce creates one variation per combination (6 in this case). 6. Expand each variation and set: price, SKU, stock quantity, weight/dimensions, variation image. The variation image swaps the main product image when the customer picks that option. 7. Set a default selection at the bottom of the Variations tab — e.g. M / Black — so the Add to Cart button works on first load. 8. Publish.
That's the happy path. Now the parts most tutorials skip.
Variation images, swatches, and the "first impression" problem WooCommerce shows the *featured image* by default, then swaps to the variation image once both attributes are picked. If the customer picks only color, nothing changes — they see the default image until size is also selected.
Fixes, in order of effort:
- Use color as the first attribute and put the matching color image on each color's variations. Customers picking color see the change immediately.
- Install a swatches plugin (Variation Swatches for WooCommerce, or the free version bundled with newer Woo releases). Color swatches dramatically out-convert dropdowns on mobile.
- Avoid mixing photo styles between variations. If one color is on a model and the rest are on a white background, the page looks broken when the customer flicks between them.
Stock management for variable products You have three options:
1. Manage stock at the variation level (recommended). Each SKU has its own count. Out-of-stock variations become disabled in the dropdown. 2. Manage stock at the parent level. One stock number for the whole product. Useful only if all variations draw from the same physical pool (e.g. print-on-demand). 3. No stock management. You handle inventory elsewhere.
Always set "Out of stock visibility" so the variation is disabled, not hidden — hiding it makes returning customers think the size never existed.
Per-variation shipping (the part that trips up real stores) This is where most variable product setups silently lose money.
WooCommerce lets you set weight and dimensions per variation, but not the *allowed shipping methods* per variation. So if your "Vinyl - 12 inch" needs rigid mailer shipping and your "Vinyl - 7 inch" can go letter post, the customer can pick either method for either variation — and you eat the cost when they pick the cheap one for the heavy item.
The fix is to restrict shipping methods at the variation level. Our WooCommerce Shipping Gateway Per Product plugin extends Woo so each variation has its own allowed-methods list, and the cart computes the intersection across mixed items automatically. If a customer adds two variations with conflicting shipping rules, they see exactly which one is the conflict instead of an empty shipping section.
For a deeper walkthrough of mixed-cart shipping, see our guide on WooCommerce shipping options per product.
SEO for variable products Variable products are SEO-friendly *if* you set them up right. Common mistakes:
- Thin variation descriptions. Google indexes the parent product URL. Make sure the description covers all variation benefits (e.g. "available in 4 colors, 3 sizes") so the page ranks for long-tail queries like "red wool sweater medium".
- Missing structured data. WooCommerce emits Product schema for the parent, but not always for variations. Use a schema plugin (Rank Math, Yoast SEO Premium) that adds the `hasVariant` property and variation-level offers. This unlocks rich results like price ranges in Google search.
- Broken images on Pinterest/social. The og:image stays on the featured image even after the customer picks a variation. That's fine — the social card represents the listing, not the SKU.
- Duplicate-content traps. Never publish each variation as its own product. You'll split link equity and cannibalize your own rankings.
Performance: variable products at scale Once a single product has 50+ variations, the WooCommerce admin slows to a crawl and the front-end "Add to cart" can take seconds. Two practical fixes:
- Enable "AJAX add to cart variations" (default in modern Woo). It avoids a full page reload.
- Split mega-products into multiple variable products if the variation count goes past ~100. A "Curtains" product with 200 size-color-fabric combos belongs as 4 variable products by fabric.
Migration: turning duplicates into variations If you have ten "Red T-Shirt", "Blue T-Shirt", "Black T-Shirt" listings, consolidating is worth a weekend:
1. Export the duplicates with the WooCommerce CSV exporter. 2. Pick the strongest-ranking duplicate as the canonical product. 3. Convert it to variable, generate the variations, and migrate stock + images. 4. Set 301 redirects from the old duplicate URLs to the new variable product. This preserves SEO and prevents 404s. 5. Update internal links (menus, banners, blog posts) to the new URL.
Skip step 4 and you'll watch traffic drop for a month while Google reshuffles.
FAQ
What's the difference between a WooCommerce variable product and a grouped product? A variable product is *one* product with internal variants picked via dropdowns. A grouped product is a page that lists *several distinct products* you can add to cart individually. Use variable for size/color of one item, grouped for "buy the whole kit".
Can I have different prices for each variation? Yes. Each variation has its own price, sale price, and schedule. WooCommerce shows the price range (e.g. "€19 – €29") on the catalog and the exact price after selection.
How do I show variation images as swatches instead of dropdowns? Install a variation swatches plugin or enable the built-in swatches block in WooCommerce 8.6+. Map each color term to a hex value or an image; the front-end renders clickable swatches automatically.
Can each variation have different shipping rules? WooCommerce supports per-variation weight and dimensions out of the box. To restrict *which shipping methods* are allowed per variation, you need WooCommerce Shipping Gateway Per Product or a similar extension.
How many variations can one WooCommerce product have? The technical max is 50 per attribute axis (set by Woo), so two axes give up to 2,500 variations. In practice, anything past ~100 variations slows the admin and confuses customers — split into multiple products instead.
Will Google index every variation? No. Google indexes the parent product URL. Variations show up indirectly through structured data (price ranges, availability) and through the description text. That's the right behavior — variation-level URLs would create duplicate content.


