Multi-Schema Sections for Multiple Content Types

View as Markdown
Last updated July 17, 2026

Build a single "Featured Card" section that auto-binds correctly when dropped onto a blog post, a product page, or an event page. The section's linked schema is a Global Field embedded in all three content types; structural matching does the rest.

This is the pattern that makes content-type-shaped sections reusable across an enterprise.

The Setup

A Global Field shared across content types

Click to enlarge

Three content types, each embedding the Global Field under a different local name

Click to enlarge

Same shape, different local field names. This is exactly what Studio's structural matching is designed for.

Step 1: Build the Section

  1. Compositions → Sections tab → + New Section → name it featured_card
  2. Link Schema → pick gf_featured_card

Click to enlarge

Studio is now bound to the Global Field's shape, not any one content type's field.

  1. On the canvas, drop a Box at the root (the card frame) and inside it:
  2. An Image component, bind src to template.image
  3. A Heading, bind text to template.heading
  4. A Text, bind to template.description
  5. A Button, bind href to template.cta_url, label can be a static "See product details" or another binding

  6. Save.

Click to enlarge

The section is now anchored on gf_featured_card. Its bindings reference template.<field>, which are the Global Field's children, so they resolve cleanly wherever the field is embedded.

Step 2: Use It on a blog_post Template

  1. Compositions → Templates tab → + New Template → pick blog_post
  2. On the canvas, drop a featured_card section

Studio auto-binds: featured_card linked to gf_featured_card, and blog_post has exactly one gf_featured_card field (hero_card). Single match → auto-pick.

The section renders bound to hero_card. No manual binding step. Open a blog_post entry as the Preview Entry, and you see the featured card render with that entry's hero_card data.

Click to enlarge

Step 3: Use the Same Section on a product Template

  1. + New Template → pick product
  2. Drag the same featured_card section onto the canvas

Same auto-bind, different field: product has one gf_featured_card field (promo_card). Studio picks it automatically. The section renders.

No edits to the section. No fork. Same featured_card composition, bound to a different field on a different content type.

Step 4: Same Again for Events

  1. + New Template → pick event
  2. Drag featured_card onto the canvas
  3. Auto-bound to event.banner

Three content types, one section, zero manual binding work. Studio's structural matcher finds the right field on each page CT.

Step 5: The Multi-Match Case

Now extend product to expose the Global Field twice, adding a second field secondary_card of type gf_featured_card.

Go back to the product template, drop a fresh featured_card instance. Studio finds two matches (promo_card, secondary_card) and:

  • Binds to one of them (the first match)
  • Shows a DATA SOURCE dropdown in the section's right-panel Settings → Properties section, listing both matches so the author can pick which field this instance should bind to.

The dropdown surfaces on every section drop regardless of match count, it shows the currently-bound source. In the single-match case there's one option; in the multi-match case there are two or more, and the author picks:

Click to enlarge

Drop another featured_card below, pick the other field for it from the same dropdown. Two instances, two different bindings, one section.

The dropdown lives in the section's top bar: clicking the schema chip opens a Search Schema picker listing every linked schema attached to this section (one row per content type). On a single-CT section there's one row; on a multi-schema section, all matching CTs appear here:

Click to enlarge

Click to enlarge

What "Matching Structure" Did

Field on page CTWhat Studio checked
hero_card (blog_post)Same data_type (global_field) + same child shape (heading, description, image, cta_url) → ✅ match
promo_card (product)Same → ✅ match
banner (event)Same → ✅ match
title (blog_post)Different data_type → ❌ skip
start_date (event)Different data_type → ❌ skip

Because the field uses a Global Field, the shape is literally identical at all three sites. Studio's positional UID remap doesn't even kick in, as it doesn't need to. This is the strongest auto-bind path.

When This Pattern Shines

  • Shared marketing surfaces. "Featured card", "callout banner", "newsletter signup card" appear on many content types with the same shape.
  • Multi-brand sites. Multiple content types per brand, all using shared Global Fields.
  • Design system widgets. Anything that maps to one consistent data shape.

When the shape varies, build separate sections instead: Studio's auto-binder won't pretend a mismatched shape works.

A Close Cousin: Different Content Types, Similar but Not Identical Shapes

If the underlying fields are Groups (not Global Fields), and they have the same child types in the same order with different names, Studio's positional UID remap kicks in:

Click to enlarge

Studio binds featured_card to hero_card on blog_post and to promo_card on product, remapping by position:

Section bindingblog_post remapproduct remap
template.titletemplate.titletemplate.heading
template.bodytemplate.bodytemplate.desc
template.imagetemplate.imagetemplate.cover

Use a Global Field if you can, as it gives the same shape everywhere with no remap needed and nested structures stay sane. Use Groups with the remap only when you can't centralise the shape.

See Also