Per-product content

Set up category attributes or optional custom product metafields as value sources, with manual fallbacks and clear troubleshooting steps.

A product page section is only useful if it says something true about that product. A benefits section showing the same three benefits on every product is decoration, not information.

Manifest solves this without asking you to build a metafield system. Several sections can read Shopify’s category attributes — data Shopify attaches to a product automatically once you assign it a category — and fall back to the values you typed when a product has nothing to say.

The three sources, in order

Most product-content controls resolve the selected product source first, then an existing manual fallback, then an intentional empty state. The exact behavior varies by section: profile rows use their explicit Fallback value, automatic Evidence cards omit missing facts, and Formula comparison shows dashes in collection mode. The custom-source table below lists those differences. Choosing a source preserves your typed settings for later use.

Step 1 — assign a product category

This is the whole setup. Category attributes do not exist until a product has a category.

  1. In Shopify admin, open a product.
  2. Find Product category in the product organization card.
  3. Start typing your category and pick the most specific match Shopify offers. The more specific the category, the more attributes you get.
  4. Save.

New attribute fields now appear on the product, beneath the category. Fill in the ones that matter.

Do this on one product first and confirm the section changes before doing your whole catalog.

Step 2 — point the section at an attribute

In the theme editor, open the section and find the setting named Value source — or Fact source and Benefit source, depending on the section. Choose an attribute instead of Manual.

The section immediately shows that product’s value, and keeps your typed text as the fallback.

Which setting, in which section

SectionSettingWhere to find it
Benefits and suitabilityBenefit source, then Benefit attributeSection settings
Benefits and suitabilityValue sourceEach Suitability detail block
Evidence cardsFact 1 source, Fact 2 source, Fact 3 sourceSection settings
Formula comparisonValue source, on each of the six rowsSection settings
Formula comparisonColumn products, to compare against the product being viewedSection settings
Proof ledgerValue sourceEach Proof record block
Product dossierValue sourceEach Dossier group block
Product chaptersValue sourceEach Product highlight block
Product stageValue sourceEach Product highlight block

Protocol timeline reads product data too, but not in this pattern. Its Read the step from setting does not fill in content — every card says the same thing on every product page. It only decides which card gets a “this product” badge.

Attributes you can choose

Fifteen attributes are offered, and each section lists only the ones that suit it — a proof record offers certifications and ingredients, not fragrance level.

Active ingredient · Constitutive ingredients · Cosmetic function · Fragrance level · Ingredient origin · Moisturizer type · pH level · Product certifications and standards · Product form · Skin care effect · Skin care features · SPF level · Suitable for skin type · Texture · UVA protection grade

These are Shopify’s own attribute names, not ones Manifest invented, so they behave the same way everywhere in your admin.

Use a custom product metafield

Choose Custom product metafield when the built-in category attributes do not contain the information you need. This is optional; existing category sources and manual content still work. The identifier is entered as plain text so the section can look up each relevant product’s value.

1. Create and fill the product field

  1. Open a product in Shopify admin, find Metafields, and select Add definition. You can also manage definitions under Settings > Metafields and metaobjects > Products.
  2. Give it a descriptive name, such as When to use, and note the full namespace and key, such as custom.when_to_use.
  3. For this example, select Single line text and One value, then save.
  4. Fill the field on each relevant product with AM, PM, or AM, PM, then save each product.

For other content, supported types are single-line text, multi-line text, integer, decimal, boolean, and lists of single-line text, integers, or decimals. Lists retain their separate items in lists and highlights; text displays join them with commas. Rich text, dates, files, references, and JSON are not supported by this value source. Keep using the dynamic-source icon on compatible rich text, image, URL, and other content settings for those supported Shopify connections.

Shopify’s metafield definition guide explains definition types and validation.

2. Connect it in the theme editor

  1. Open the section and find the source control listed below.
  2. Select Custom product metafield.
  3. In the newly shown Metafield namespace and key field, enter the complete identifier, for example custom.when_to_use. Entering only when_to_use will not work. Do not bind this identifier field to a dynamic source: it needs the field’s name, not the current product’s value.
  4. Save, then preview products with different saved values. For sections showing multiple product cards, confirm that each card displays its own value.
SectionWhere to select the sourceProduct read and missing-value behavior
Product dossierInformation group → Value sourceReads the dossier’s product. Falls back to Content, then Fallback content.
Proof ledgerEvidence record → Value sourceReads the page’s product. Keeps the record’s Details when the field is empty.
Benefits and suitability: benefitsSet Benefit source to Product data, then Benefit attribute to Custom product metafieldReads the page’s product or the section’s fallback product. Uses Benefit blocks when no values resolve.
Benefits and suitability: profileSet Suitability source to Product data, then the profile row’s Value source to Custom product metafieldReads the same product. Uses Fallback value, then hides the row if still empty. The typed Value applies in manual/block mode.
Ingredient atlasSet Ingredient source to Product data, then Value source to Custom product metafieldReads the page’s product. Values match ingredient library titles; existing unmatched-name and empty-product behavior remains. Use a list of text values for separate ingredients.
Evidence cardsFact 1/2/3 source, with the corresponding fact’s metafield identifierReads each card’s own product, for manually picked and automatic cards. Manual cards retain their typed fact fallback; automatic cards omit missing facts.
Product stage and Product chaptersHighlight block → Value sourceReads that product section’s product. Uses the highlight’s manual label when empty. Values shown still limits lists.
Protocol timelineRead the step from → Custom product metafieldReads the product being viewed and matches its value to each step’s existing match value. It selects the current step; it does not replace authored instructions. Use a role such as Cleanse or Treat.
Formula comparisonComparison row → Value sourceReads each card’s product, including swapped products. Manual blocks retain their typed fallback; collection mode shows a dash. Time of day adds AM/PM icons.

Custom metafield definitions remain store-owned content. The section/block owns the selected identifier, ordering, labels, and fallbacks; canonical commerce facts such as price and product title continue to come from Shopify product data.

3. Check an empty value or editor warning

  • Incomplete identifier: the theme editor shows a message when the namespace or key is missing. Enter the definition’s exact full identifier, such as custom.when_to_use.
  • Valid-looking identifier but no output: check the spelling against the definition. The format check cannot confirm that the field exists in your store.
  • Only one product works: fill the metafield on every product involved. Creating a definition does not fill its product values.
  • Unsupported type: use one of the plain-value types above, or connect a compatible content setting with Shopify’s dynamic-source icon.
  • List not split into items: create a List of values definition. A single text value with commas remains one value in list-based sections. Formula comparison’s time-of-day style is an exception: it explicitly splits AM, PM into two badges.

The editor warning is not shown to customers. Missing data follows each section’s existing fallback or intentional empty state; it never borrows another product’s metafield value.

What stays manual, and why

Category attributes are short factual values. They cannot carry a paragraph, a document, or a date. So these stay yours to write:

  • Dossier panel prose, ingredient stories, and protocol step descriptions
  • Proof ledger documents, dates, and test methods
  • Anything with a voice

If you want those to vary per product too, that is what dynamic sources are for. Any text setting in the theme editor with the dynamic-source icon beside it can be bound to a metafield you define yourself:

  1. Create the metafield definition under Settings → Custom data → Products.
  2. Fill it in on each product.
  3. In the theme editor, select the setting, choose the dynamic-source icon, and pick your metafield.

That is a bigger commitment than assigning a category, so reach for it only where the editorial content genuinely differs per product.

When an attribute shows nothing

The section falls back to your typed value, silently and by design — a shopper never sees a gap. If you expected the product’s value instead, check these in order:

  1. The product has no category. No category means no attributes.
  2. The category does not include that attribute. Attributes belong to specific categories. A moisturizer category will not offer SPF level. Pick a more specific category, or a different attribute.
  3. The attribute is empty on the product. Assigning a category creates the field; it does not fill it in.
  4. You are previewing the wrong product. Product sections read the product currently being viewed.

The fastest check is the product page in Shopify admin. If the value is blank there, the theme has nothing to show.

The other per-product source

Category attributes fill copy per product. A different mechanism fills products per product, and two sections use it:

  • The routine builder reads each product’s custom.set_contents product list when filled, otherwise its complementary list, so one template lays out a correct routine for every product in the catalog. See Routines.
  • The formula comparison can lead with the product being viewed and fill the remaining columns from a collection, which the customer then changes from a dropdown on each column. See Formula comparison.

Both need their rows or steps pointed at product data rather than typed values, since the products they pull in have no blocks of yours to read from.

Why it works this way

Themes on the Shopify Theme Store may not require merchants to create custom metafields to function, and may not depend on an app. Category attributes are the one source of per-product structured data that needs no setup beyond a field Shopify already asks you to fill in. Building on them means Manifest shows real per-product content on day one, and your typed values keep the store looking complete until you get there.