Skip to content
Product Catalog

WooCommerce Attributes vs Variations (and Global vs Custom)

Attributes describe, variations sell. The real difference, the global versus custom question underneath it, and a widely repeated claim that is not true.

About Quick Variable Products
Article cover: Attributes vs variations in WooCommerce — Quick Variable Products

WooCommerce asks you to understand two related ideas before you can sell a t-shirt in three sizes, and it doesn’t explain either of them particularly well. Worse, a lot of what’s written about WooCommerce attributes vs variations contains a claim that isn’t true, which sends people down the wrong path from the first product.

Here’s the actual distinction, the global-versus-custom question underneath it, and the myth worth correcting.

The one-sentence difference

Attributes describe. Variations sell.

An attribute is a property with possible values — Colour: Red, Blue, Green. On its own it does nothing commercial. It has no price, no stock, no SKU. It’s structured information about the product.

A variation is one specific combination that a customer can put in a basket — Red / Small — with its own price, its own stock level, its own SKU and optionally its own image. Variations are the things you actually sell.

Every variation is built from attribute values, but not every attribute becomes a variation. That second half is where most catalogues go wrong.

Attributes: the vocabulary

Think of attributes as the words your catalogue is allowed to use. “Colour” is a word; “Red” is one of its permitted meanings.

Attributes do three jobs:

  • They inform. Displayed in the Additional Information tab, they tell a customer what they’re buying — fabric, weight, country of origin.
  • They filter. Global attributes power layered navigation, so shoppers can narrow a category down to blue things under €50.
  • They generate. When you mark an attribute as used for variations, WooCommerce can build every combination of its values.

An attribute can do the first two without ever doing the third, and for a lot of product data that’s exactly right.

Variations: the things people buy

A variation is a real record in the database — a child of the parent product, with its own fields. That matters for two reasons that come up later:

  • Each variation can be priced, stocked, photographed and coded independently. This is the whole point.
  • Each variation carries a real cost in database rows and page weight, which is why variation count becomes a performance question faster than people expect.

Global vs custom attributes

WooCommerce has two kinds, and the difference is about scope rather than capability.

Global attributeCustom (product-level) attribute
Created atProducts → AttributesInside one product’s Attributes tab
ReusableAcross every productThat product only
Powers filters / layered navYesNo
Has its own archive pagesYesNo
Can create variationsYesYes
Central managementOne place, renames propagateRetyped per product

The myth: “custom attributes can’t create variations”

You’ll read this in a number of otherwise reasonable guides. It’s wrong.

WooCommerce’s own documentation for variable products tells you to add “a global/existing attribute or create a new one (specific to the product)” and then generate variations from it. A product-level attribute with Used for variations ticked produces variations exactly like a global one does.

The reason to prefer global attributes is real, but it isn’t this. It’s that custom attributes are invisible to filtering, can’t be reused, and have to be retyped — with all the spelling drift that implies — on every product. Three products with “Medium”, “medium” and “Med” are three separate values as far as WooCommerce is concerned, and no filter will ever unite them.

So the honest guidance is: custom attributes work, and you should still mostly use global ones. Not because of a capability limit, but because consistency is a catalogue-level property and custom attributes can’t provide it.

The checkbox that decides everything

On the Attributes tab, each attribute has a Used for variations checkbox. It is the switch between the two worlds:

  • Unticked: the attribute is display-only. It shows in the Additional Information tab, it can filter (if global), and it never appears in the variation matrix.
  • Ticked: the attribute becomes an axis. Every value multiplies your variation count.

Most catalogue problems trace back to this checkbox being ticked on something that should have been informational.

Attribute axes and their values above the variations they generate
Attributes are the vocabulary; variations are what the vocabulary produces once you mark an attribute as an axis.

Which attributes should be variations?

One test, applied honestly to each attribute:

Does this change the price, the stock, or the SKU?

If yes to any, it’s a variation axis. If no to all three, it’s a display attribute.

AttributeUsuallyWhy
SizeVariationDifferent stock per size, often different price
ColourVariationDifferent physical items on the shelf
MaterialDependsAxis if you stock both; display if the product is one material
Fabric compositionDisplayDescribes the product, doesn’t change what ships
Care instructionsDisplaySame for every combination
Country of originDisplayInformation, not a choice
Gift wrappingNeitherAn add-on, not a product variant — use a product add-on

That last row is worth dwelling on. Optional extras feel like variations and behave nothing like them: turning “gift wrap: yes/no” into an axis doubles your entire matrix to represent a checkbox.

A worked example

A cotton t-shirt: 3 colours, 4 sizes, 100% cotton, machine washable, made in Portugal.

Right: Colour and Size as global attributes used for variations — 12 variations. Composition, care and origin as display attributes, or simply in the description.

Wrong: all five ticked as used for variations. 3 × 4 × 1 × 1 × 1 is still 12 variations, but now every one of them carries three redundant axes, your variation dropdowns show five selectors where two would do, and adding a second fabric later multiplies everything.

The wrong version isn’t obviously broken on day one. It becomes obvious at product ninety.

Fixing a catalogue that already went wrong

If you’ve inherited a store where everything is an axis:

  1. Audit the attributes, not the products. Products → Attributes tells you what vocabulary exists. Anything that looks like a sentence is a display attribute wearing the wrong hat.
  2. Untick before you delete. Removing Used for variations keeps the information and stops the multiplication. Deleting the attribute loses the data.
  3. Consolidate spelling drift in global attribute terms — “Medium” and “medium” merged into one — before you rebuild anything.
  4. Rebuild the worst offenders rather than editing them. A product with the wrong axes is usually faster to recreate cleanly than to unpick, especially if generating the matrix takes a minute.

Do the vocabulary work first. Every product you create afterwards inherits it, and every product you created before it will need it eventually.

Attributes and variations FAQ


What is the difference between an attribute and a variation in WooCommerce?

An attribute is a property with possible values, like Colour: Red, Blue, Green. It describes the product and has no price or stock of its own. A variation is one specific purchasable combination, like Red / Small, with its own price, stock level, SKU and image.


Can custom attributes create variations, or only global ones?

Both can. WooCommerce’s own documentation tells you to add either a global attribute or a new one specific to the product, then generate variations from it. The claim that custom attributes cannot create variations is repeated in several guides and is not correct.


Why prefer global attributes then?

Because they are reusable across products, they power filtering and layered navigation, and they are managed in one place so the values cannot drift. Custom attributes have to be retyped on every product, and “Medium”, “medium” and “Med” become three unrelated values that no filter will ever unite.


What does the "Used for variations" checkbox do?

It decides whether an attribute is an axis or just information. Unticked, the attribute is display-only and appears in the Additional Information tab. Ticked, every one of its values multiplies your variation count.


Which attributes should be variations?

Ask whether the attribute changes the price, the stock or the SKU. If it changes any of those, it is a variation axis. If it changes none of them — fabric composition, care instructions, country of origin — it is a display attribute and making it an axis only multiplies your matrix.


How do I fix a product where everything was made a variation axis?

Untick “Used for variations” rather than deleting the attribute, so you keep the information but stop the multiplication. Consolidate any spelling variants in your global attribute terms first, then rebuild the worst products cleanly — that is usually faster than unpicking them.


Keep reading

Related articles