Shopify gives you two tools for custom data, and most stores reach for the wrong one first. The decision is actually one question: are you adding a field to something that exists, or creating a thing that doesn't?
Metafields: extra fields on things you already have
A metafield attaches a typed field to an existing resource: a product, variant, collection, customer, or order. Define it once under Settings → Custom data, and every product (or variant, or collection) gets that field to fill in.
Use a metafield when the data belongs to one specific item and changes per item:
- Care instructions on a product ("machine wash cold")
- Fit note on a product ("runs small, size up")
- Material or ingredients per product
- Country of origin per variant
- Heel height, capacity, dimensions as filterable specs
The tell: if you'd write a different value for every product, it's a metafield.
Metaobjects: things Shopify doesn't have a record for
A metaobject is a standalone record you design yourself: its own set of fields, its own entries, existing independently of any product. Products can point at entries through a reference metafield, or the theme can use entries directly.
Use a metaobject when the same structured content is shared by many products, or belongs to no product at all:
- A size guide shared by forty shirts. As a metafield you'd paste it forty times and update it forty times. As one metaobject entry, every shirt references the same guide and one edit updates them all.
- Designers or brands with a photo, bio, and link, referenced from each of their products.
- Ingredients as records with their own benefits text, referenced in lists per product.
- Store locations, FAQs, lookbook entries: content that isn't a product, a page, or a blog post but still needs structure.
The tell: if editing in one place should update many places, or the thing isn't attached to any single product, it's a metaobject.
The combination is the real pattern
The two aren't rivals. The standard shape is a metaobject for the shared thing, plus a reference metafield connecting products to it. A "Designer" metaobject holds the bio once; each product's "Designer" metafield points at the right entry; the product template renders whichever designer the product references. You get structure, reuse, and per-product connection without duplicating a word.
Showing it on the storefront, no app required
This deserves its own post, but the short version: in the theme editor, section and block settings connect to custom data through dynamic sources. Editing a text block on a product template, you'll see the dynamic source picker; choose the product's metafield and the block renders each product's own value. Shopify's docs also note that metaobjects with storefront visibility are available as dynamic sources for any theme setting, which is how a size-guide metaobject lands in a section that isn't tied to a product at all.
For themes that need full control, Liquid reads the same data directly:
{{ product.metafields.custom.care_guide.value }}
One honest limitation from the docs: dynamic sources work in section and block settings, not in general theme settings.
Why this matters beyond your theme
Structured custom data isn't just for human eyes. Specs in typed metafields can flow into structured data and product feeds, which is exactly what AI shopping agents read when deciding whether to recommend your products. A fit note buried in a description image is invisible to them; the same note in a metafield is data. That's the thesis behind AgentReady, and it starts with modeling your data in the right containers.
Next in this pillar: showing metafields on product pages without an app, step by step. If your catalog's custom data is currently living in description HTML and you want it restructured properly, that's a project we do often.

Comments
Every comment here comes from a verified email. Write yours, confirm from your inbox, and it's live.
Loading comments…