Shopify custom data
Shopify Metafields vs. Metaobjects: what's the difference?
Metafields and Metaobjects are both part of Shopify's custom data layer, but they serve different purposes and are often confused with each other. This article explains what each one is, how they differ architecturally, and when to reach for one versus the other - with Liquid and GraphQL examples for both.
Reading time: ~8 minutes.
1. What are Metafields?
Metafields extend existing Shopify resource types - products, variants, collections, customers, orders, pages, and more - with additional custom properties. They are key/value pairs attached to a specific resource instance.
For example:
- A product can have a Metafield for
care_instructions(a text field) - A product variant can have a Metafield for
weight_kg(a number field) - A customer can have a Metafield for
loyalty_tier(a text field)
Metafields are namespaced: each one belongs to a namespace and has a key. The full address of a Metafield on a product is product.metafields.namespace.key. They extend an existing thing - they do not create new things.
2. What are Metaobjects?
Metaobjects are standalone custom data types that you define and instantiate independently of Shopify's built-in resource types. They are not attached to a product or customer - they exist as their own entities in your store.
You define a Metaobject type (called a definition) with named, typed fields. Then you create as many instances of that type as you need. Each instance is a Metaobject record with its own handle identifier and field values.
Examples of things you would model as Metaobjects (not Metafields):
- Product reviews (each review is its own record: rating, body, author, date)
- Team members (name, role, photo, bio)
- FAQ entries (question, answer)
- Testimonials (quote, attribution, company)
- Store locations (name, address, hours)
Metaobjects are queried globally - not as properties of a specific resource. They have their own API endpoints and their own Liquid access patterns.
3. The key conceptual difference
The clearest way to distinguish them:
- Metafield: adds a property to something that already exists. "This product has a care instructions field."
- Metaobject: creates a new thing entirely. "A product review is an entity in my store, linked to a product."
A product review cannot be a Metafield because a store has many reviews per product, and Metafields hold a single value per key. A Metaobject is the correct structure because it is an independent record that can reference a product via a product_reference field.
| Property | Metafield | Metaobject |
|---|---|---|
| Attached to | An existing resource (product, customer, etc.) | Nothing - standalone record |
| Cardinality | One value per key per resource | Many instances per definition |
| Identity | namespace + key + owner resource | type + handle |
| Primary use | Extend a resource with extra properties | Create new data entities |
| Liquid access | resource.metafields.namespace.key | metaobjects["type"].handle or list |
| GraphQL | metafield(namespace, key) on the resource | metaobjects(type:) query |
Product reviews are a textbook Metaobject use case - FiveOh Reviews on Metaobjects uses Shopify's standard product_review definition so your data is portable and queryable.
Get more information →4. Field types: what data can they hold?
Both Metafields and Metaobject fields share the same underlying type system. Shopify supports a wide range of field types, including:
single_line_text_field,multi_line_text_fieldinteger,decimalbooleandate,date_timeurl,json,color,rating,dimensionfile_reference(images, video, generic files)- Reference types:
product_reference,collection_reference,metaobject_reference - List variants:
list.product_reference,list.metaobject_reference, etc.
The metaobject_reference type is particularly powerful: a Metafield of this type on a product can point to one or many Metaobject instances - which is exactly how a product's list of reviews is modelled.
5. Accessing both in Liquid
Accessing a Metafield
{% comment %} A text Metafield on a product {% endcomment %}
{{ product.metafields.my_namespace.care_instructions.value }}
{% comment %} A rating Metafield {% endcomment %}
{{ product.metafields.reviews.rating.value | round: 1 }}Accessing a Metaobject by handle
{% comment %} Access a single Metaobject instance by its handle {% endcomment %}
{% assign team_member = metaobjects["team_member"]["jane-smith"] %}
{{ team_member.fields.name.value }}
{{ team_member.fields.role.value }}Accessing Metaobjects via a Metafield reference on a product
{% comment %}
product.metafields.reviews.product_reviews is a
list.metaobject_reference Metafield - it returns
a list of product_review Metaobject instances.
{% endcomment %}
{% assign reviews = product.metafields.reviews.product_reviews.value %}
{% for review in reviews %}
<p>{{ review.fields.author.value }} - {{ review.fields.rating.value }}/5</p>
<p>{{ review.fields.body.value }}</p>
{% endfor %}See the Liquid metaobject object documentation for the full reference.
6. Accessing both via GraphQL
Querying a product Metafield
query {
product(id: "gid://shopify/Product/123") {
metafield(namespace: "reviews", key: "rating") {
value
type
}
}
}Querying Metaobjects by type
query {
metaobjects(type: "product_review", first: 20) {
edges {
node {
handle
fields {
key
value
}
}
}
}
}Both queries work on the Admin GraphQL API and the Storefront GraphQL API (the Storefront API requires the fields to be marked as storefront-accessible in the definition).
FiveOh Reviews on Metaobjects writes reviews as standard Shopify Metaobjects - query them with GraphQL, render them in Liquid, or export them any time you want.
Get more information →7. When to use which
A practical decision guide:
- Use a Metafield when you need to add one (or a short list) of extra properties to an existing Shopify resource - a product, variant, customer, order, etc. Examples: care label, sizing guide URL, custom badge text, loyalty points balance.
- Use a Metaobject when you need to create records of a new type that exist independently, can have many instances, and may reference other resources. Examples: product reviews, team bios, testimonials, FAQs, store locations.
- Use both together when you need to link Metaobject instances back to a resource. A product Metafield of type
list.metaobject_referencecreates the join between "this product" and "these review Metaobject records".
8. Example: product reviews use both
Shopify's standard product review system is the best illustration of both working together:
- Each individual review is a Metaobject of type
product_review, with fields for rating, body, author, date, and a product reference. - The aggregate rating (average stars) is a Metafield of type
ratingatproduct.metafields.reviews.rating- a summary value stored directly on the product for fast access. - The review count is another Metafield at
product.metafields.reviews.rating_count. - The list of all reviews for a product is a Metafield of type
list.metaobject_referenceatproduct.metafields.reviews.product_reviews, which is a list of references to individual review Metaobject instances.
This design is efficient: the aggregate Metafields give fast access to summary data (for display in product listings), while the Metaobject list gives access to the full review content (for display on the product page).
Written by Marius Korbmacher
Lead Developer at FiveOh Reviews on Metaobjects
Further reading
Related articles
Frequently asked questions
What is the difference between Shopify Metafields and Metaobjects?
Metafields attach extra data to existing Shopify resources - a product, variant, customer, or order. Metaobjects are standalone data entries that exist independently of any specific resource. A product's average star rating is a Metafield. A product review with its body, author, date, and product reference is a Metaobject.
When should I use a Metafield vs. a Metaobject in Shopify?
Use Metafields when you need to extend an existing resource with additional data - like adding a material field to products or a loyalty tier to customers. Use Metaobjects when you need to model something standalone - like a review, a team member, a FAQ entry, or a size guide that multiple products reference.
Can I access Shopify Metaobjects in Liquid?
Yes. Metaobjects are accessible in Liquid via metafield references on resources. For product reviews stored as standard Metaobjects, you access them via product.metafields.reviews.product_reviews in Liquid templates - no API call or JavaScript required.
Are Shopify product reviews stored as Metafields or Metaobjects?
Individual reviews are stored as Metaobjects - each review is a standalone entry with fields for rating, body, author, and a reference back to the product. The aggregate rating (average score and review count) is stored as a Metafield on the product, automatically computed by Shopify from the individual review Metaobjects.
Are Shopify Metaobjects available on all plans?
Metaobjects are available on all Shopify plans including Basic. The number of Metaobject definitions and entries you can create scales with your plan, but the standard product review Metaobject definition is part of Shopify's platform and does not count against custom definition limits.
Can I query Shopify Metaobjects via the Storefront API or GraphQL?
Yes. Metaobjects are accessible via both the Admin GraphQL API (full read/write) and the Storefront API (read-only, for headless storefronts). This means review data stored as Metaobjects is portable to headless or custom storefronts without requiring a separate API integration with a third-party review vendor.
Can AI search engines like Perplexity understand Shopify Metaobject data?
AI search engines read the rendered HTML of your pages, not Shopify's internal data layer. What matters is how your Liquid theme outputs Metaobject data - if reviews render as readable text and structured JSON-LD in the HTML, AI crawlers can read and cite them. Metaobject-based reviews rendered server-side in Liquid are fully accessible to AI search engines like Perplexity, ChatGPT Browse, and Google AI Overviews.
FiveOh Reviews on Metaobjects
Reviews stored in Shopify. Rendered in Liquid. Yours to keep.
The review app that writes to Shopify's standard product review Metaobjects - server-side rendering, no JavaScript widget, no external dependency, no vendor lock-in.
