Shopify metafields en metaobjects — custom data zonder apps
Terug naar blog

Shopify metafields en metaobjects — custom data zonder apps

AuthorRuthger Idema
7 april 202610 min leestijd

Productspecificaties, maattabellen, leveranciersinformatie — veel shops lossen dit op met een app die €30 per maand kost. Shopify heeft al jaren een native oplossing. Je gebruikt hem alleen nog niet.

Shopify metafields en metaobjects — custom data zonder apps

Elke maand betalen Shopify-merchants gemiddeld €127 aan apps die data opslaan die Shopify al native ondersteunt. Maattabellen, productspecificaties, leveranciersinformatie, FAQ-per-product — dit zijn allemaal metafields.

Shopify introduceerde metafields al in 2021 als merchants-facing feature. Metaobjects kwamen in 2022. Toch zien wij bij bijna elke audit nog apps als Metafields Guru of Custom Fields draaien. Dat kost geld en vertraagt je storefront.

Dit artikel legt uit hoe je metafields en metaobjects correct inzet — inclusief Liquid-toegang en API-beheer.

Wat je leert in dit artikel

  • Wat het verschil is tussen metafields en metaobjects
  • Wanneer je welke structuur gebruikt
  • Hoe je metafields benadert via Liquid
  • Hoe je metafields beheert via de Admin API
  • Veelgemaakte fouten en hoe je ze vermijdt

Metafields: extra data op bestaande resources

Een metafield is een sleutel-waarde-paar dat je koppelt aan een bestaande Shopify resource: een product, variant, collectie, klant, order of shop.

Elke metafield heeft drie verplichte eigenschappen:

  • namespace — groepeert gerelateerde metafields (bijv. specs)
  • key — de naam van het veld (bijv. gewicht_netto)
  • type — het datatype (bijv. number_decimal, single_line_text_field, json)

Shopify ondersteunt 18 metafield-types. De meest gebruikte:

TypeGebruik
single_line_text_fieldKorte tekst, SKU, kleurcode
multi_line_text_fieldLangere beschrijving, ingrediëntenlijst
number_integerLevertijd in dagen, aantalsverpakking
number_decimalGewicht, afmeting, prijs per eenheid
booleanVegan, recyclebaar, op maat
jsonComplexe gestructureerde data
list.single_line_text_fieldMeerdere waarden, bijv. beschikbare kleuren
file_referenceAfbeelding, PDF, maattabel
product_referenceVerwijzing naar gerelateerd product

Metafields aanmaken in Shopify Admin

Ga naar Settings → Custom data. Hier definieer je definities — dit zijn de templates voor je metafields. Een definitie bepaalt namespace, key, type en of het veld verplicht is.

Zonder definitie kun je wel metafields aanmaken via de API, maar ze zijn niet bewerkbaar in de Admin UI en niet beschikbaar in Liquid zonder de metafield filter.

Maak altijd eerst een definitie aan. Dat kost 2 minuten en voorkomt problemen later.

Metaobjects: herbruikbare datastructuren

Een metaobject is een eigen contenttype dat je zelf definieert. Denk aan:

  • Merken met naam, logo en beschrijving
  • FAQ-items met vraag en antwoord
  • Medewerkerprofielen
  • Garantievoorwaarden per productcategorie
  • Certificeringen met naam, nummer en geldigheidsdatum

Het verschil met metafields is fundamenteel. Een metafield is extra data op een bestaand object. Een metaobject is een zelfstandig object dat je vervolgens kunt koppelen via een metaobject_reference metafield.

Voorbeeld: merk als metaobject

Stel je verkoopt 80 merken. Elk merk heeft een naam, logo, beschrijving en herkomstland. In een app zou je dit opslaan als serialized JSON in een metafield. Dat werkt, maar is niet bewerkbaar door je contentteam en niet querybaar via Liquid.

Met metaobjects definieer je het type merk met de velden naam, logo, beschrijving en herkomstland. Vervolgens koppel je elk product aan een merk via een metaobject_reference metafield.

Je contentteam kan merken aanmaken en bewerken via de Admin UI. Je haalt ze op in Liquid met twee regels.

Liquid-toegang: metafields ophalen in je theme

Metafields zijn bereikbaar via het metafields object op elke resource.

liquid
{%- comment -%}
  Haal een enkel metafield op via namespace en key
{%- endcomment -%}
{{ product.metafields.specs.gewicht_netto.value }}

{%- comment -%}
  Controleer of het metafield bestaat voor je het rendert
{%- endcomment -%}
{%- if product.metafields.specs.materiaal.value != blank -%}
  <p class="product-spec">
    <span>Materiaal:</span>
    {{ product.metafields.specs.materiaal.value }}
  </p>
{%- endif -%}

Voor metaobject-referenties werk je als volgt:

liquid
{%- comment -%}
  Haal het gekoppelde merk-metaobject op
{%- endcomment -%}
{%- assign merk = product.metafields.product_info.merk.value -%}

{%- if merk != blank -%}
  <div class="brand-block">
    <img
      src="{{ merk.logo.value | image_url: width: 200 }}"
      alt="{{ merk.naam.value }}"
      width="200"
      height="80"
      loading="lazy"
    >
    <h3>{{ merk.naam.value }}</h3>
    <p>{{ merk.beschrijving.value }}</p>
    <span>Herkomst: {{ merk.herkomstland.value }}</span>
  </div>
{%- endif -%}

Lijsten itereren

Als je metafield een list-type heeft (bijv. list.single_line_text_field), itereer je er direct over:

liquid
{%- comment -%}
  Maattabel als lijst van strings: "S:40-45cm", "M:46-51cm"
{%- endcomment -%}
{%- assign maatwaarden = product.metafields.sizing.maattabel.value -%}
{%- if maatwaarden != blank -%}
  <table class="size-guide">
    <thead>
      <tr><th>Maat</th><th>Borstomvang</th></tr>
    </thead>
    <tbody>
      {%- for maat in maatwaarden -%}
        {%- assign delen = maat | split: ':' -%}
        <tr>
          <td>{{ delen[0] }}</td>
          <td>{{ delen[1] }}</td>
        </tr>
      {%- endfor -%}
    </tbody>
  </table>
{%- endif -%}

Metafields beheren via de Admin API

Voor bulkoperaties gebruik je de GraphQL Admin API. De REST API werkt ook, maar GraphQL is sneller en ondersteunt bulk mutations.

Metafield aanmaken via GraphQL

graphql
mutation MetafieldsSet($metafields: [MetafieldsSetInput!]!) {
  metafieldsSet(metafields: $metafields) {
    metafields {
      id
      namespace
      key
      value
    }
    userErrors {
      field
      message
    }
  }
}

Met variabelen:

json
{
  "metafields": [
    {
      "ownerId": "gid://shopify/Product/1234567890",
      "namespace": "specs",
      "key": "gewicht_netto",
      "type": "number_decimal",
      "value": "2.35"
    },
    {
      "ownerId": "gid://shopify/Product/1234567890",
      "namespace": "specs",
      "key": "materiaal",
      "type": "single_line_text_field",
      "value": "100% gerecycled polyester"
    }
  ]
}

De metafieldsSet mutation accepteert tot 25 metafields per call. Voor grotere imports gebruik je bulk operations — die komen aan bod in het artikel over Shopify API rate limits.

Metafields uitlezen via GraphQL

graphql
query ProductMetafields($id: ID!) {
  product(id: $id) {
    metafields(
      identifiers: [
        { namespace: "specs", key: "gewicht_netto" }
        { namespace: "specs", key: "materiaal" }
        { namespace: "product_info", key: "merk" }
      ]
    ) {
      namespace
      key
      value
      type
    }
  }
}

Veelgemaakte fouten

Geen definitie aanmaken. Metafields zonder definitie zijn niet bewerkbaar in de Admin en niet doorzoekbaar via de Storefront API. Altijd eerst een definitie. Namespace en key niet consistent houden. Gebruik een naamgevingsconventie en houdt die bij. product_specs, specs, productspecs — drie teams, drie namespaces, drie keer zoekproblemen. JSON-type misbruiken voor alles. Het json type is flexibel maar niet querybaar. Gebruik typed fields waar mogelijk. Shopify kan ze valideren en ze zijn bewerkbaar in de Admin UI. Metafields direct in theme.liquid zetten. Zet metafield-rendering in snippets. Je theme.liquid wordt anders een onleesbare mix van layout en data-rendering. Geen fallback tonen. In productie missen metafields soms een waarde. Controleer altijd op blank voor je rendert.

Wanneer toch een app?

Metafields en metaobjects dekken 80% van de use cases. De resterende 20%:

  • Je wilt metafields bulksgewijs importeren vanuit een Excel of PIM — gebruik dan de Admin API of een dedicated import-tool, geen app
  • Je hebt conditional logic nodig in het Admin-formulier (veld B verschijnt alleen als veld A is ingevuld) — dat kan niet met native metafield definities
  • Je wilt metafields synchroniseren tussen Shopify-stores — dat vereist custom code of een integratie

Voor de meeste shops is native voldoende. Schrijf het eerst zo.

Conclusie

Shopify metafields en metaobjects zijn volwassen features. Ze vervangen app-lagen voor custom data, zijn gratis en laden sneller omdat ze geen externe API-calls veroorzaken.

De investering is een uur definitie-setup en een ontwikkelaar die de Liquid-toegang bouwt. De besparing is €30-90 per maand aan apps en een lichtere storefront.

Meer lezen over Shopify-development? Bekijk onze Shopify-diensten of lees hoe je Liquid vs Hydrogen afweegt voor je volgende project. Voor de complete metafields documentatie, zie de Shopify metafields reference op shopify.dev.

Wil je weten welke apps in jouw Shopify-store vervangen kunnen worden door native functionaliteit? Neem contact op voor een vrijblijvende audit.

Ruthger Idema

Geschreven door Ruthger Idema

15+ jaar ervaring in e-commerce development. Gespecialiseerd in Magento, Shopify en Laravel maatwerk.

Meer over ons team →
Deel dit artikel:

Wil je jouw e-commerce naar het volgende niveau?

Plan een vrijblijvend gesprek met onze experts over Magento, Shopify of Laravel maatwerk.

Plan een Tech Check