Skip to content

Metaobjects as web pages and storefront content

A metaobject is a content type you design yourself — a designer profile, a size guide, an FAQ, a store location, an ingredient entry. Unlike a metafield (which adds one field to an existing thing like a product), a metaobject is standalone and reusable. This page covers how to shape one, fill it with entries, publish those entries as real web pages with their own SEO, and render them on your storefront.

For metafields — typed fields on products, customers, and other built-in resources — see Metafields & metaobjects.

Definitions vs entries

Every metaobject has two distinct parts, managed in two different places:

PartWhat it isWhere
DefinitionThe shape — a type key plus a list of typed fields and the capabilities you turn onSettings → Custom data → Metaobjects
EntriesThe actual records that fill that shape, one per itemContent → Metaobjects

You define the designer type once (with fields like Name, Bio, Photo), then create one entry per designer. Right after you save a brand-new definition, Sellerlane drops you straight into adding its first entry.

Define a content type

  1. Go to Settings → Custom data, find the Metaobjects section, and click Add Definition.

  2. Enter a Name (for example Designer). The Type key auto-fills (designer). The Type cannot be changed after the definition is created, so pick it carefully. Add an optional Description to help staff.

  3. Add Fields — pick a value type from the picker. The types are the same ones used for metafields, grouped into Most Used, Text, Number, Date and Time, Measurement, Reference, Other, and Advanced (single line text, rich text, integer, decimal, date, file, metaobject reference, product reference, URL, color, money, rating, JSON, and more).

  4. Drag the handle on any field to reorder it — the order here is the order buyers and staff see the fields in.

  5. Mark exactly one single-line-text field as the Display name. This is the human-readable label used to identify each entry in lists.

  6. Turn on the capabilities you need under Metaobject options (next section), then Save.

Field validations

Each field is validated exactly like a metafield value of the same type — min/max character counts and a regex (or a fixed list of preset choices) for text, min/max for numbers, allowed file types for files, earliest/latest for dates, min/max measurement for weight/volume/dimension, a rating scale, allowed URL domains, or a JSON schema. See Metafields & metaobjects for the full per-type table. Any field can also be marked Required.

Capabilities

The Metaobject options section turns on optional behaviours per definition. All are off by default:

  • Active-draft status — gives each entry a published/draft state, so you can stage entries before they go live.
  • Translations — lets entries be translated into your store’s other languages.
  • Publish entries as web pages — gives each entry its own URL on your storefront (see below). Enabling this reveals the page settings.
  • Storefronts API access — exposes the type for read access via the public Storefront API (needed for headless reads).
  • Customer Account API access — exposes the type in customer-account contexts.

Publish entries as web pages

When you tick Publish entries as web pages, three settings appear:

  1. Page title — choose which of the definition’s fields supplies the browser/SEO title for each entry’s page. If you leave it unset, the page falls back to the entry’s Display name.

  2. Meta description — choose which field supplies the meta description used for SEO and link previews.

  3. URL handle — an optional folder name (for example designers). This is captured for the future and is not yet used — see the URL note below.

  4. Tick the nested Online Store toggle so the entry data can be read inside your theme (required for the page template to render anything).

How the URL works today

Published entries are served at:

/metaobjects/<type>/<handle>

For example, a designer entry with the handle jane-doe lives at /metaobjects/designer/jane-doe. The handle comes from the entry itself — it auto-fills from the Display name value when you create the entry and is locked once saved.

A page needs a template

A published entry only renders if your theme has a page template at templates/metaobject/<type>.json (for example templates/metaobject/designer.json). Create it in the visual editor or in theme code, and add sections that read the metaobject object (see below). If no template exists for the type — or the entry is a draft, or the definition doesn’t have web pages enabled — the URL returns your theme’s 404 page instead.

Create entries

  1. Go to Content → Metaobjects (or click Add entry from the definition).

  2. Pick the definition and fill each field. The Handle — the slug used in the URL — auto-fills from the Display name field; you can edit it before saving. Handles allow letters, numbers, and hyphens, and are locked after creation.

  3. If Active-draft status is on, flip the Status switch to Active to publish (or leave it Draft to stage it).

  4. Save. If web pages are enabled and a template exists, the entry is now live at its URL.

Render entries in your theme

There are two ways to surface metaobject data, with no rebuild either way.

Inside a templates/metaobject/<type>.json template, the current entry is available as the metaobject object. Reference its fields by key:

<h1>{{ metaobject.name }}</h1>
<p>{{ metaobject.bio }}</p>
<img src="{{ metaobject.photo | image_url: width: 600 }}" alt="">

metaobject.system.url, metaobject.handle, metaobject.type, metaobject.seo_title, and metaobject.seo_description are also available.

Reference an entry from a product

To attach a metaobject entry to a product (or any resource), add a Metaobject reference metafield on that resource pointing at the definition. Then render it in Liquid:

{% assign designer = product.metafields.custom.designer.value %}
<p>By {{ designer.name }}</p>

You can also bind a compatible section or block setting to a metaobject value in the visual editor with no code — see Dynamic sources.

Common use cases

  • Brand / designer profiles — a designer type with name, bio, and photo, linked from each product via a metaobject-reference metafield, plus a public profile page per designer.
  • Size guides — a size_guide type holding a measurement table, referenced from products and shown in a tab or popover.
  • FAQs — an faq type with question and answer fields, looped on a support page.
  • Store locations — a location type with address, hours, and a map link, rendered as a “find us” directory.
  • Ingredient / glossary libraries — an ingredient type with name, description, and origin, cross-linked from product pages.

Troubleshooting

  • Entry page returns 404. Confirm the definition has Publish entries as web pages on, the entry’s Status is Active (when draft status is enabled), and your theme has a templates/metaobject/<type>.json template for the type.
  • Page renders but the title or description is generic. Set the Page title and Meta description fields on the definition and make sure those fields are filled on the entry. With no Page title field, the page falls back to the Display name.
  • My custom URL folder isn’t taking effect. The definition’s URL handle folder isn’t live yet — entries use /metaobjects/<type>/<handle> for now.
  • Theme can’t read the data. The nested Online Store toggle (under Publish entries as web pages) must be on for theme access. For headless reads, turn on Storefronts API access.
  • Can’t change a field’s type or the Type key. Both are locked after creation. Delete and recreate the definition (values won’t carry over).

Next steps

Metafields & metaobjects

The companion page on custom fields and the definition basics. Open

Themes & editor

Build the metaobject/<type> template that renders each entry. Open

Dynamic sources

Bind theme settings to metaobject values with no code. Open

SEO

How titles, descriptions, and canonical URLs help discovery. Open