Appearance
Metaobjects for reusable content
Reuse the same testimonials, press logos, trust badges, or size charts across multiple pages without re-typing them. Set them up once in Shopify's metaobject definitions, then pick the list in your section's settings.
The five sections that support this pattern are Testimonials, Press coverage, Trust badges, Logo list, and Size chart. Each section accepts either merchant-added blocks (the default — zero setup) or a metaobject list (opt-in — enables reuse). If both are set, the metaobject list wins. If neither is set, the theme editor shows a prompt in every one of them; on the storefront the empty behaviour varies: Trust badges and Logo list render nothing visible, Testimonials and Press coverage still show their heading band (both ship a default heading you can clear), and Size chart always renders its trigger button and dialog shell.
TIP
If you don't need reusable content, just leave the metaobject list empty and add blocks directly to the section. Every section works either way.
Testimonials
Fields the theme looks for (alternative names are accepted; the first name found wins):
json
{
"quote": "Customer testimonial text (rich text). Alternate: body",
"author": "Author name (text). Alternate: name",
"author_title": "Optional — author role or title (text)",
"rating": "Optional — integer 0-5",
"author_image": "Optional — file (image)"
}Setup steps
- Shopify Admin → Settings → Custom data → Metaobject definitions → Add definition.
- Name it "Testimonial". Shopify will set the handle to
testimonial. - Add fields:
quote(Rich text),author(Single line text),author_title(Single line text, optional),rating(Integer, optional),author_image(File — Image, optional). - Create at least 3 entries populated with real customer quotes.
- In the theme editor, click your testimonials section → under Content source, pick your Testimonial list.
- Save. The storefront now renders testimonials from your metaobject entries.
TIP
Want to switch back to blocks later? Clear the metaobject list picker; your existing section-local blocks render again.
Press coverage
Fields the theme looks for:
json
{
"logo": "File — Image (press outlet logo)",
"link": "Optional — URL (article link)",
"alt": "Alt text (text). Alternate: name",
"quote": "Optional — short pull quote (text)",
"source": "Optional — source/byline (text)"
}Setup steps
- Shopify Admin → Settings → Custom data → Metaobject definitions → Add definition.
- Name it "Press mention". Shopify will set the handle to
press_mention. - Add fields:
logo(File — Image),link(URL, optional),alt(Single line text),quote(Single line text, optional),source(Single line text, optional). - Create one entry per press outlet.
- In the theme editor, click your Press coverage section → under Content source, pick your Press mention list.
- Save.
TIP
If you also use the Logo list section for brand/partner logos (not press), create a separate "Brand logo" definition (handle: brand_logo) with just logo, link, alt — that's the type the Logo list section expects.
Trust badges
Fields the theme looks for:
json
{
"icon_name": "Lucide icon name (text) — e.g. 'truck', 'lock', 'shield'. Used when icon_image is empty",
"icon_image": "Optional — file (image). Takes precedence over icon_name when set",
"heading": "Badge heading (text). Alternate: name",
"text": "Badge supporting text (text). Alternate: body"
}Setup steps
- Shopify Admin → Settings → Custom data → Metaobject definitions → Add definition.
- Name it "Trust badge". Shopify will set the handle to
trust_badge. - Add fields:
icon_name(Single line text),icon_image(File — Image, optional),heading(Single line text),text(Single line text). - For each entry, set
icon_nameto any Lucide icon name — the metaobject path accepts the full Lucide library, well beyond the 47 names offered in the section's inline block icon picker (truck, lock, refresh-cw, headphones, shield, heart, star, leaf, check-circle, package, clock, globe, credit-card, award, zap, thumbs-up, phone, mail, map-pin, users, gift, tag, percent, flame, droplets, eye, wrench, coffee, sun, moon, umbrella, smile, crown, gem, wallet, store, shopping-bag, receipt, barcode, calendar, ruler, camera, medal, circle-check, info, alert-triangle, help-circle). - Alternatively, upload a custom image to
icon_image— when set, the image renders instead of the icon name. - In the theme editor, pick your Trust badge list under Content source.
TIP
Lucide icons inherit the section's color scheme via currentColor. Custom uploads render at their native colors — use transparent PNGs for best results.
Size chart
Create one definition named "Size chart" — Shopify sets the handle to size_chart, and that is the only type the Size chart section's Content source picker offers. Entries of any other definition can't be selected there, so don't split image charts and table charts into separate definitions.
One definition covers two shapes, because every field below the display name is optional. Each entry uses whichever fields you fill in, and the theme picks the shape per entry:
- Fill in
header_row/data_rows→ the entry renders as a table. - Fill in
imageonly → the entry renders as a figure. - Fill in both → the table wins.
That means a single list can hold table entries and image entries side by side.
Fields
json
{
"name": "Display name (text) — e.g. 'Men's shirts'",
"image": "Optional — file (image): size chart photo or diagram. Alternate: chart_image",
"alt": "Optional — alt text for the image (text). Alternate: description",
"header_row": "Optional — pipe-delimited header cells (text) — e.g. 'Size | Bust | Waist | Hip'",
"data_rows": "Optional — list of lines (text list), each line pipe-delimited — e.g. 'S | 36 | 28 | 38'"
}Setup steps
- Shopify Admin → Settings → Custom data → Metaobject definitions → Add definition.
- Name it "Size chart". Shopify will set the handle to
size_chart. - Add fields:
name(Single line text),image(File — Image, optional),alt(Single line text, optional),header_row(Single line text, optional),data_rows(Single line text — list, optional). - Create entries — one per product category (e.g. "Men's shirts", "Women's dresses"). Fill in the image fields, the table fields, or both.
- In the theme editor, click your Size chart section → under Content source, pick your list.
Example table entry
Use the pipe character | to separate cells within a row.
name:Women's dresses — EU sizesheader_row:Size | Bust (cm) | Waist (cm) | Hip (cm)data_rows(as individual list items):XS | 82 | 64 | 90S | 86 | 68 | 94M | 90 | 72 | 98L | 94 | 76 | 102XL | 98 | 80 | 106
The storefront renders these as a proper semantic <table> with <thead> and <tbody>, which works for screen readers and copy-paste.
TIP
Prefer the table fields for sizing grids (clothing, shoes) — shoppers can scan measurements side-by-side. Use the image field when your brand already ships a visual measurement guide photo or diagram.
Troubleshooting
- Section renders nothing on the storefront. The metaobject list has 0 entries AND no blocks are added to the section. Either add at least one entry to the metaobject list, or add blocks to the section. Trust badges disappears entirely in that state (unless you've set a heading) and Logo list leaves an empty band; Testimonials and Press coverage still show their heading, and Size chart still shows its button and empty dialog.
- Section renders blocks when I expected metaobjects. The metaobject list setting is blank in the theme editor. Re-pick the metaobject definition under Content source.
- Field values look empty. The field name on your entries doesn't match what the theme looks for. Rename the field on your metaobject definition OR use one of the documented alternate names (e.g.
bodyinstead ofquotefor testimonials). - Size chart table cells don't split into columns. You're using a comma
,instead of the pipe|as the delimiter. Use|to separate columns — commas conflict with measurement values that include commas themselves. - Size chart renders an image when I wanted a table. The entry has an
imagefield populated AND noheader_row/data_rows. Remove the image or add the table fields — the theme picks table shape only when the table fields are set. - Trust badge shows a blank icon. Either
icon_nameisn't a valid Lucide icon name OR bothicon_nameandicon_imageare blank. Fix the name or upload an icon image.