Shopify Builds>Capabilities>Metafield-driven PDP content blocks

Metafield-Driven PDP Content Blocks on Shopify

Definition

Product-page content — tabs, accordions, claim strips, badges, routine steps, campaign ribbons — assembled at render time from product metafields and metaobjects instead of hard-coded Liquid or a content app. Merchandisers change what a product page says by editing structured fields in the Shopify admin. A product launch becomes a merchandising task rather than a deployment.

The Evidence

  • 36 live, Deploi-attributed builds across 3 Shopify storefronts — LUS Brands 16, Nudestix 13, Three Ships 7.
  • Attribution: 31 Deploi-authored, 5 built on top of a vendor theme and disclosed as such.
  • Status: live, verified 2026-09-06.
  • Evidence quality: twenty-two carry code plus client working records. Fourteen are documented from the code; no client-side record of the decision survives.
  • Confidence: 19 strong, 17 moderate.
  • Not counted: seven further records here are vendor-derived, no longer live, or not evidenced well enough to publish. Not listed, not linked, not claimed.
  • Eighteen of the 36 have published build pages.

How It's Actually Built

The architecture is the same on all three stores, and it is unglamorous: a section or snippet resolves its content at render time, in Liquid, from product.metafields, variant.metafields and metaobject references, and renders nothing when a field is blank.

Three habits recur in all 36.

A fallback chain, not a field read. Nothing reads one field. The LUS Brands tabs section resolves its four content sources variant-first, then product; the Nudestix content system falls through metafield, then block setting, then the parsed legacy description, then a product default. A half-populated catalog is the normal state of a catalog; the chain is what makes a page render correctly during a migration rather than after one.

Two editing surfaces, split on purpose. Copy that changes per SKU goes in metafields, where it can be exported and bulk-edited. Copy that changes per campaign goes in theme-editor block settings, where merchandisers already look. Nudestix has both: a Shipping Information block whose settings are each overridden by a product metafield when one exists, and collection.metafields.custom.guarantee_campaign_widget, which configures a campaign once for a merchandising group.

Metaobjects where the record has a shape. Loose metafields become one metaobject when the fields belong together — the heroic banner record on LUS Brands, the product_highlight panel on Nudestix, the comparison-limit record with a shop default behind it.

The identifiers are where the storefronts stop rhyming. custom.atc_background resolves into a --atc-button-color CSS custom property, so one product paints its own add-to-cart button without a stylesheet edit. settings.swatch_colors holds roughly 250 shade-to-hex pairs in one theme setting. custom.pdp_bundle_kits turns a product list into a kit module.

The Buy-vs-Build Position

Built every time, on all three storefronts — the data model is the brand's own, and no content app has ever been bought to replace it.

That is a verdict about ownership, not quality. Tabs apps, icon-strip apps and page builders work and install in an afternoon; they also hold the copy in a vendor's database, which is the part these three brands declined. When buying is the better answer is argued in the metafields and metaobjects architecture decision.

The Builds

LUS Brands

Nudestix

Three Ships

What This Rests On

What Varies by Storefront

The theme base decides the shape of the answer more than the brand does.

LUS Brands runs Dawn 15.4.1. Theme blocks exist, so composability is a platform feature: one section declares 26 block types beyond Dawn's set, four templates mount it, and the kids page differs from the standard page by block settings, not by a second file.

Nudestix runs Dawn 6.0.2, which predates theme blocks and predates swatch metaobjects. The same ideas arrive differently: modules are section blocks or straight metafield reads, and the shade registry that would be a metaobject on a newer base is roughly 250 pairs in one theme setting. The larger difference is the starting data: this catalog's copy already lived inside one HTML description field, so the content system parses that format at render time and keeps parsing it.

Three Ships runs Palo Alto 5.8.0 by Presidio Creative, a paid premium theme. That changes the question from what to build to what to add. The block loop, the base block set and the theme-editor contract are the vendor's, with an upgrade path worth preserving, so the work is additive: extra block types inside somebody else's section, metafield-driven size charts and icon rows. A large share of this product page is code we extended, not code we authored.

Catalog shape pushes the same way: size-by-fragrance haircare, shade-led color cosmetics and routine-led skincare do not want the same fields, which is why the vocabulary is per-store and the architecture is not.

Where This Gets Hard

Concentration. The pattern's endpoint is one large section every product template depends on, dispatching a flat block loop — roughly 3,400 lines on LUS Brands. No nesting, no conditional block registration, no way to offer a block only on kits. A mistake in that loop is a mistake on every product page at once.

Empty states are most of the work. Every module needs a non-blank check on the field and on its resolved value, or a metaobject reference pointing at nothing renders an empty container on a live page. A blank field also has to withdraw its own chrome — tab, heading, badge row — and Shopify will not do that.

Nothing validates what a merchandiser types. There is no schema behind a metafield's contents. Roughly 250 hex pairs, 29 content keys and 48 settings is a vocabulary, and vocabularies rot without an owner.

And it can be the wrong call. We would advise against building this for a storefront whose copy is the same for every variant, whose team will not revisit the PDP for two years, and who has nobody to own the fields afterward. Buy the tabs app. This pays for itself only where the copy varies, changes often, and the brand wants it in its own admin.

Related Capabilities

Answers to Help You Make Smart Decisions

Do I need an app to put custom content blocks on a Shopify product page?

No. Metafields and metaobjects hold the content and a theme section renders it at request time. All 36 live builds in this capability were built that way, across three storefronts, and none used a content app. The cost moves from a monthly fee to a field vocabulary your team owns.

Can merchandisers change product page content without a developer?

Only if the split is right. Per-SKU copy belongs in metafields, where it can be exported and bulk-edited; per-campaign copy belongs in theme-editor block settings, where merchandisers already look. Get that boundary wrong and every change is still a developer ticket.

When should content be a metaobject instead of a metafield?

When the fields belong together and get reused. A banner with an image, a mobile image, a title and a body is one record, not four loose fields; a metaobject keeps them typed and named. A single string — a badge label, a color value — stays a metafield.

Ready to Get Your Product Pages Out of a Developer's Hands?

We build Shopify content models your merchandisers can run without us — your data, your admin. Contact us today to talk about what your product pages should let your team change.

Builds

'Bundle and save' PDP block driven by a product-list metafield

One product-list metafield, one card per product, and on every card a working add-to-cart form of its own — a merchandiser-curated set sold on the product page where the shopper already is, with a carousel that only appears when there is more than one thing to scroll.

LUS Brands

Product-card hover video and a reusable deferred-media playback refactor

The shared product card's hover slot can hold a short clip instead of a second still: a per-product metafield decides which, the card emits a video that fetches nothing until asked, and a pointer-only, motion-aware binder plays it on hover of the whole card — plus a refactor of Dawn's deferred-media element that handles every player kind through one function.

LUS Brands

Merchandisable homepage product carousel with a tag-driven badge engine and inline add-to-bag

A two-column row — optional linked lifestyle image, Swiper rail — where every label, color, badge and product is a theme-editor setting, and each card can add to bag without leaving the page.

LUS Brands

Featured-collection product card with metafield hero/hover media and a tag-driven badge stack

The card that renders inside the homepage's main merchandising rail: hero and hover art chosen in the Shopify admin, a responsive image ladder built by hand, and a badge stack resolved from tags, price and block settings at render time.

LUS Brands

Per-collection hero banner driven entirely by collection metafields

One section instance in the collection template serves every collection: its heading, copy and two separately cropped artworks are bound to collection metafields through dynamic sources, and it renders two independent breakpoint layouts from them, so launching a collection is a merchandising task rather than a theme edit.

LUS Brands

Rebuilt 2026 PDP section with merchandiser-composable blocks and per-product ATC color

A custom product section for LUS Brands that declares 26 block types beyond Dawn's set, resolves title and subtitle copy per variant, and paints the add-to-cart button from a product metafield.

LUS Brands

Metafield-driven product information tabs with mobile accordion and variant refresh

How To, Ingredients, FAQs and Tips render below the buy box from metafields — as tabs on desktop, as a native accordion on mobile, and re-resolved from the server every time a shopper picks a different variant.

LUS Brands

Variant-aware price snippet with percentage + value savings badge

Dawn's price snippet extended so a caller can hand it any variant object ahead of the snippet's own lookup, and so a savings badge — a percentage computed in Liquid plus a merchandiser-written value sentence — renders whenever the compare-at price is higher than the price.

LUS Brands

Alt-text convention that maps product media to variants without metafields

Two Liquid snippets turn the alt text merchandisers already type in the Shopify media library into a variant match key and a four-tier match verdict, so a product gallery can filter media per variant at render time.

LUS Brands

Pill variant picker with merchandiser-named size labels

Dawn prints an option value and nothing else. We extended its picker so a size pill carries two lines — a merchandiser's word for that size above the size itself — and falls back to positional defaults when nobody has written one.

LUS Brands

A second product template whose add-to-bag switches between one cart line and several

`main-product-bundle.liquid` is a fork of the theme's product section in which one Liquid conditional wraps the buy form in either a standard `<product-form>` or a `<bundle-product-form>`, depending on which bundle metafield the product carries.

Nudestix

"Save With Sets": shade-selectable kit contents on the component product's page

A metafield-linked list of kits renders as an accordion on the product pages of the products inside them, and each kit opens a modal where every component gets its own shade picker before a single add-to-bag.

Nudestix

Metafield-driven PDP content system: auto-built accordions, need-to-know strip and campaign widgets

A layered content resolver on the Nudestix product page: legacy description HTML parsed into accordions at render time, three of them overridden per shade from metafields, with icon strips, badges and campaign widgets assembled from 29 metafield keys around them.

Nudestix

On-model shade carousel bound two ways to the Dawn variant picker

A Flickity carousel of one on-model shot per shade, rendered below the product gallery from a variant metafield; each cell carries the id of its Dawn variant radio, a tap on a face resolves to a click on that radio, a click on a radio moves the carousel — and the carousel itself never touches the product form.

Nudestix

Price snippet with a bundle 'value' metafield line and opt-out labelled price links

Dawn's price snippet on Nudestix, extended in two small ways: a product metafield adds a "worth" line beside a kit's price, and the price text becomes a labelled link to the product unless the caller says otherwise.

Nudestix

Color-accurate shade swatches driven by a merchandiser-editable hex registry

Roughly 250 `Shade Name:#hex` pairs live in one theme setting. The product section resolves every option value against them in Liquid, groups the results by finish, and paints each swatch server-side.

Nudestix

Configurable PDP block system on the Palo Alto theme (Recharge widget placement, size charts, siblings, quick view)

Merchandiser-orderable buy-box blocks on Three Ships' licensed theme, with the subscription app block captured and re-emitted inside the buy box, plus metafield-driven size charts, a product-family switcher and a sticky add-to-cart bar.

Three Ships

PDP content accordion that borrows the premium theme's collapsible contract

A product-page accordion block that reuses Palo Alto's own `data-collapsible-*` behavior wiring while supplying its own heading semantics, CSS-variable theming and a responsive table layout for the long-form panels merchandisers author per product.

Three Ships