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
- Rebuilt 2026 PDP section with merchandiser-composable blocks and per-product ATC color — 26 block types, four templates, one section.
- Metafield-driven product information tabs with mobile accordion and variant refresh — tab presence computed from field emptiness.
- Merchandisable homepage product carousel with a tag-driven badge engine and inline add-to-bag — badges resolved in Liquid from tags and price.
- Alt-text convention that maps product media to variants without metafields — the counter-example: no new field at all.
- Pill variant picker with merchandiser-named size labels — a label written on a variant, printed above the option value.
- Featured-collection product card with metafield hero/hover media and a tag-driven badge stack — hero and hover layers read from two product metafields, not from the one featured image.
- Product-card hover video and a reusable deferred-media playback refactor — one file-reference metafield that can hold an image or a video, decided at render.
- Per-collection hero banner driven entirely by collection metafields — four fields on the collection record, bound through dynamic sources, so the theme never changes.
- 'Bundle and save' PDP block driven by a product-list metafield — one product-list field holds the whole curated set, and a second field read from the recommended product supplies the line of copy that travels with it into every set it appears in.
- Variant-aware price snippet with a percentage and value savings badge — the percentage is arithmetic, but the sentence beside it is a variant metafield with
$Xand[value]tokens, so how a saving is described is a merchandising edit rather than a deploy.
Nudestix
- Metafield-driven PDP content system: auto-built accordions, need-to-know strip and campaign widgets — 29 keys, plus a parser for the legacy copy.
- Color-accurate shade swatches driven by a merchandiser-editable hex registry — one theme setting, with duo-tone escape hatches.
- "Save With Sets": shade-selectable kit contents on the component product's page — kit composition as product-list metafields.
- A second product template whose add-to-bag switches between one cart line and several — two metafields choose the path.
- On-model shade carousel bound two ways to the Dawn variant picker — the content is per-variant photography in a metafield, and a product metafield decides whether the module renders at all.
- Price snippet with a bundle 'value' metafield line — what a kit is worth, held on the product record and printed beside what it costs, inside the component every surface already calls.
Three Ships
- Configurable PDP block system on the Palo Alto theme (Recharge widget placement, size charts, siblings, quick view) — 25 blocks, built on top of Palo Alto 5.8.0 by Presidio Creative, a paid premium theme.
- PDP content accordion that borrows the premium theme's collapsible contract — long-form panels authored per product, inside the vendor theme's own open-close contract.
What This Rests On
- Metafields — in 31; the per-SKU copy layer.
- Liquid section schema and settings — in 30; the merchandiser interface.
- Cart AJAX API — in 8, where a module also adds to cart.
- Custom elements — in 7; what these modules mount inside.
- Metaobjects — in 5, for records needing typed fields.
- Section Rendering API — in 4, where content re-resolves per variant.
- Theme app extensions — in 4; the app blocks these sections share a page with.
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
- Variant-aware content and media swapping — the same fields, re-resolved on variant change.
- Fixed bundles and kit merchandising — kit contents as product-list metafields.
- Structured data for AI answers — what this content becomes in the initial HTML.
- Filters, faceted navigation and progressive grid loading — the same vocabulary on collection pages.
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.