Multi-Schema Sections for Multiple Content Types
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
Three content types, each embedding the Global Field under a different local name
Same shape, different local field names. This is exactly what Studio's structural matching is designed for.
Step 1: Build the Section
- Compositions → Sections tab → + New Section → name it featured_card
- Link Schema → pick gf_featured_card
Studio is now bound to the Global Field's shape, not any one content type's field.
- On the canvas, drop a Box at the root (the card frame) and inside it:
- An Image component, bind src to template.image
- A Heading, bind text to template.heading
- A Text, bind to template.description
-
A Button, bind href to template.cta_url, label can be a static "See product details" or another binding
-
Save.
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
- Compositions → Templates tab → + New Template → pick blog_post
- 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.
Step 3: Use the Same Section on a product Template
- + New Template → pick product
- 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
- + New Template → pick event
- Drag featured_card onto the canvas
- 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:
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:
What "Matching Structure" Did
| Field on page CT | What 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:
Studio binds featured_card to hero_card on blog_post and to promo_card on product, remapping by position:
| Section binding | blog_post remap | product remap |
|---|---|---|
| template.title | template.title | template.heading |
| template.body | template.body | template.desc |
| template.image | template.image | template.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
- Linked schema: the matching rules in detail
- Auto-binding: scope-aware binding behaviour
- Card grid with slots: combine multi-schema sections with the List + Slot pattern