Les metafields attachent des données à des ressources existantes. Les metaobjects sont des enregistrements autonomes que vous référencez n'importe où. Voici quand utiliser quoi, comment les modéliser et les patterns API qui passent à l'échelle sur des milliers de produits.

La plupart des boutiques Shopify ont des metafields et personne ne sait d'où ils viennent. Une app installée il y a trois ans en a créés. Le développeur précédent en a ajouté d'autres. Le thème actuel en lit deux. Personne ne peut vous dire ce qu'il y a dans le namespace accentuate.product_specs ni si supprimer custom.legacy_size va casser le storefront.
Si cela vous parle, ce post est pour vous. Nous allons d'abord clarifier le modèle conceptuel, puis dérouler les patterns que nous utilisons sur les projets Shopify en 2026 pour que metafields et metaobjects fassent du vrai travail au lieu de s'accumuler en dette silencieuse.
C'est aussi la couche de données qui supporte le post sur le schema markup publié la semaine dernière. Le schema ne vaut que par les données structurées qui l'alimentent, et ces données vivent dans les metafields et les metaobjects. Bien faire cette couche bénéficie au schema, à la visibilité IA, au storefront headless et aux apps internes : tout partage la même source de vérité.
La version deux lignes qui tient dans la tête :
Les metafields attachent des données à des ressources Shopify existantes. Un metafield vit sur un produit, un client, une commande, une collection ou une page spécifique. Pensez-y comme à une colonne custom ajoutée à cette ressource.
Les metaobjects sont des enregistrements autonomes que vous définissez et réutilisez. Un metaobject vit seul. Vous pouvez le référencer depuis un metafield, depuis un autre metaobject, ou le récupérer directement via l'API. Pensez-y comme à une table custom ajoutée à votre boutique.
L'erreur que la plupart des équipes font est de les traiter comme interchangeables. Ils ne le sont pas. Ils se chevauchent sur les cas simples mais divergent fortement dès que vos données ont une vraie structure.
Utilisez un metafield quand la donnée :
Exemples qui doivent être des metafields : care_instructions sur un produit, wholesale_tier sur un client, seo_keywords sur une collection, vat_exempt sur une commande.
Produit : "Manteau en laine"
metafield : custom.material = "100% Mérinos"
metafield : custom.weight_grams = 1200
metafield : custom.country_of_origin = "Portugal"Utilisez un metaobject quand la donnée :
Exemples qui doivent être des metaobjects : un profil Designer référencé par plusieurs produits, un guide des tailles réutilisé sur une collection, une entrée FAQ affichée sur plusieurs pages produit, une Store Location référencée par les logiques de stock et de livraison, une bibliothèque de symboles d'entretien, un bandeau promo récurrent.
Metaobject : Designer
field : name = "Maison Lemaire"
field : bio_rich_text = "..."
field : photo = file_reference
field : country = "France"
field : founded_year = 1991Puis sur chaque produit :
Produit : "Manteau en laine"
metafield : custom.designer = reference -> Designer "Maison Lemaire"Si un détail du designer change, vous mettez à jour une entrée metaobject et chaque produit qui la référence se met à jour immédiatement. Avec les metafields seuls, il faudrait mettre à jour chaque produit individuellement.
Posez-vous une question : "Si je duplique cette valeur sur 50 produits, vais-je le regretter à la première modification ?"
Si oui, utilisez un metaobject et référencez-le.
Si non, utilisez un metafield directement sur le produit.
Ce seul test couvre environ 80% des décisions de modélisation. Les 20% restants sont des cas limites que nous couvrons plus bas.
C'est la partie que tout le monde rate et celle qui fait le plus mal quand elle est ratée. Les namespaces et les clés sont la manière dont vos données sont adressables à travers les thèmes, les apps, l'API et votre futur vous.
Shopify supporte plusieurs modèles d'ownership. Restons pratiques.
custom.* est le namespace par défaut, owned par le marchand. À utiliser pour les données que vous contrôlez et que vous voulez que le thème lise directement. La plupart des boutiques devraient avoir la plupart de leurs données marchand dans custom.
$app:votre-app.* est réservé aux apps que vous possédez. Si vous construisez une app custom pour le marchand, mettez ses données privées ici, pas dans custom. Les mélanger plus tard est douloureux.
Les namespaces réservés Shopify (shopify-discount, shopify-tax, tout ce qui commence par shopify--) sont gérés par Shopify. N'y écrivez pas directement.
Pour les clés, trois règles qui vous évitent de souffrir plus tard :
snake_case, jamais camelCase. Les conventions de l'API Shopify, des thèmes et du tooling supposent tous snake_case. Soyez cohérent.
Pluriel pour les listes, singulier pour les valeurs uniques. material est une valeur. materials est une liste. La convention aide le prochain développeur (souvent vous, six mois plus tard) à savoir à quoi s'attendre.
Préfixé par domaine quand c'est utile. tech_gsm est plus clair que gsm si votre boutique vend à la fois du textile (où GSM signifie grammes par mètre carré) et d'autres catégories.
Évitez de mettre de la logique métier dans les clés. custom.is_eligible_for_b2b_discount_tier_2 est le signe qu'il faut utiliser une référence metaobject vers une définition Discount Tier.
Les types de metafield Shopify sont plus riches que ce que la plupart des développeurs imaginent. Utilisez le bon.
Types texte. single_line_text_field, multi_line_text_field, rich_text_field. Le type rich text stocke un AST JSON, plus robuste que du HTML pour le rendu headless. Utilisez-le dès que le contenu peut avoir besoin de formatage.
Types nombre. number_integer, number_decimal. Toujours utiliser ces types pour les données numériques plutôt que du texte. Cela débloque le filtrage, la validation et une sérialisation JSON propre dans l'API.
Boolean. boolean. Évident, mais sous-utilisé. Nous voyons des boutiques stocker "true"/"false" en string, ce qui casse toute condition de thème.
Date et heure. date, date_time. À utiliser pour les dates de lancement, dates d'expiration, tracking last-updated.
Dimension, weight, volume, rating. dimension, weight, volume, rating. Ces types stockent la valeur plus l'unité (centimètres, grammes, millilitres) dans un seul champ. Fortement recommandés plutôt que de stocker l'unité séparément ou de la hardcoder.
Référence fichier. file_reference. Stocke un fichier hébergé Shopify. Mieux qu'une string URL parce que Shopify gère la livraison CDN, le redimensionnement et l'intégrité.
Références produit, variante, page, collection. product_reference, variant_reference, page_reference, collection_reference. À utiliser pour les liens cross-ressources plutôt que de stocker des handles ou des IDs en string.
Référence metaobject. metaobject_reference et mixed_reference. C'est comme cela qu'on connecte les metafields aux metaobjects. Critique pour les patterns de modélisation ci-dessous.
Variantes list. La plupart des types ont une variante list.* (list.single_line_text_field, list.product_reference). À utiliser pour les collections ordonnées plutôt que des strings séparées par virgules.
Ajoutez des règles de validation chaque fois que c'est applicable : limites de caractères, valeurs min/max, patterns regex, valeurs autorisées depuis une liste. La validation attrape les problèmes de qualité de données au moment de l'écriture, qui est le moment le moins cher pour les attraper.
Ce sont les patterns que nous ressortons en boucle. Aucun n'est exotique. La valeur est dans la discipline de choisir le bon tôt.
Le cas le plus simple. Une valeur, un produit.
Définition : Product metafield "Care Instructions"
namespace : custom
key : care_instructions
type : multi_line_text_fieldUtilisé directement dans votre thème ou récupéré via l'API. À utiliser quand aucune réutilisation n'est nécessaire.
Une liste de valeurs autorisées spécifique à la catégorie. La matière est un classique : vous voulez chaque produit textile taggué avec une de "coton", "laine", "lin", "soie", "synthétique", "mélange", pas n'importe quel texte libre que le merchandiser a tapé aujourd'hui.
Définition metaobject : Material
field : name (single_line_text_field, required)
field : hex_color_swatch (color)
field : care_default (multi_line_text_field)
Entrées (créées une fois) :
- "100% coton bio"
- "Mérinos"
- "Lin"
...
Product metafield : custom.material
type : metaobject_reference -> MaterialMaintenant chaque produit référence une entrée Material. Le filtrage par matière est fiable. Si vous devez mettre à jour les instructions d'entretien par défaut pour le coton, vous mettez à jour une entrée metaobject.
Du contenu qui apparaît sur de nombreux produits et change depuis un seul endroit. Profils de designers, histoires de marques, guides des tailles, déclarations de durabilité.
Définition metaobject : Designer
field : name
field : bio_rich_text
field : photo
field : country
field : founded_year
field : instagram_handle
Product metafield : custom.designer
type : metaobject_reference -> DesignerUtilisé dans le thème pour rendre un panneau designer sur chaque page produit sans dupliquer le contenu par produit.
Spécifications spécifiques à une catégorie qui vont au-delà du simple key/value. Un "Wine Profile" avec tannins, acidité, notes de dégustation, région, vieillissement.
Définition metaobject : Wine Profile
field : tannins (number_integer, 1-10)
field : acidity (number_integer, 1-10)
field : flavor_notes (list.single_line_text_field)
field : region (metaobject_reference -> Region)
field : aging_duration (single_line_text_field)
field : serving_temperature (single_line_text_field)
Product metafield : custom.wine_profile
type : metaobject_reference -> Wine ProfileDeux gains : vous obtenez une UI admin dédiée pour éditer le profil (plus propre que 6 metafields séparés sur le produit), et le même metaobject Region peut être référencé par plusieurs vins, articles de blog et pages de contenu.
Relations many-to-many que le modèle de données Shopify ne fournit pas nativement. Cross-sells, produits liés, bundles, recettes.
Définition metaobject : Bundle
field : primary_product (product_reference)
field : bundled_products (list.product_reference)
field : bundle_discount_percent (number_decimal)
field : bundle_name (single_line_text_field)
field : active (boolean)Chaque entrée Bundle est une ligne dans ce qui serait une table de jointure en relationnel. Le marchand gère les bundles depuis une section dédiée de l'admin, et le thème ou l'API storefront les lit pour rendre l'UI des bundles.
La manière dont vous interrogez ces données compte. L'API GraphQL Admin et l'API Storefront se comportent différemment et toutes deux ont des rate limits qui mordent à grande échelle.
Pour lire les metafields sur un produit depuis un storefront Hydrogen ou autre headless :
const PRODUCT_QUERY = `#graphql
query Product($handle: String!) {
product(handle: $handle) {
id
title
material: metafield(namespace: "custom", key: "material") {
value
type
}
designer: metafield(namespace: "custom", key: "designer") {
reference {
... on Metaobject {
id
type
fields {
key
value
reference {
... on MediaImage { image { url altText } }
}
}
}
}
}
}
}
`;Deux remarques sur ce qui fait trébucher.
D'abord, les metafields ne sont exposés à la Storefront API que si vous les marquez "Storefront API accessible" dans la définition du metafield. Oubliez ce toggle et le champ retourne null dans votre requête storefront alors qu'il s'affiche bien dans l'admin.
Ensuite, les champs metaobject sont retournés comme une liste plate. Vous parcourez le tableau fields et prenez les clés voulues. Certaines équipes préfèrent envelopper cela dans un petit helper qui retourne un objet typé :
function metaobjectToRecord(metaobject) {
if (!metaobject) return null;
const record = { id: metaobject.id, type: metaobject.type };
for (const f of metaobject.fields ?? []) {
record[f.key] = f.reference ?? f.value;
}
return record;
}Pour des lectures ou écritures en masse depuis une app custom, utilisez l'API GraphQL Admin et batchez vos requêtes. Lire les metafields un produit à la fois va saturer les rate limits sur n'importe quel catalogue au-dessus de quelques centaines de SKU.
const BULK_QUERY = `#graphql
query Products($cursor: String) {
products(first: 100, after: $cursor) {
edges {
node {
id
handle
metafields(first: 20, namespace: "custom") {
nodes { key value type }
}
}
}
pageInfo { hasNextPage endCursor }
}
}
`;Pour les très gros catalogues (50k+ SKU), utilisez l'API Bulk Operations de Shopify. Vous soumettez une requête, Shopify écrit le résultat dans un fichier JSONL, vous le téléchargez et le parsez. C'est la seule manière saine de faire des audits ou des migrations metafield sur tout le catalogue.
Si vous avez hérité d'une boutique avec des metafields dispersés sur plusieurs namespaces, le pattern de cleanup qui fonctionne est :
custom, ou supprimer. Les apps que vous utilisez encore restent dans leur namespace. Les apps que vous avez retirées doivent voir leurs données soit supprimées soit migrées.Nous menons typiquement cela en 2 semaines : 3 jours d'inventaire et de modélisation, 4 jours de scripts de migration et de vérification, le reste pour les mises à jour de thème et de storefront et la sécurité de rollback. Les catalogues au-dessus de 100k SKU prennent plus de temps parce que les bulk operations prennent plus de temps ; la méthodologie est la même.
Trois choses ont changé.
La sortie des Agentic Storefronts en mars 2026 a fait des données structurées la différence entre être recommandé et être invisible. Les metafields sont la source de vérité qui alimente le Shopify Catalog, le schema sur vos pages produit et les données que les agents voient à travers le Storefront MCP.
Les attentes en schema markup sont passées d'un socle à 8 propriétés à 20+ propriétés. Générer ce schema à la main par produit est irréaliste. Le générer depuis des metafields et metaobjects bien modélisés est direct.
Shopify Functions et Checkout Extensibility acceptent désormais l'accès aux metaobjects, ce qui veut dire que votre logique métier dans la logique de remise et de validation peut lire des données metaobject directement. Les tarifs B2B sur mesure, les règles de livraison spécifiques par site, la logique d'éligibilité complexe, tout cela devient piloté par metaobjects plutôt qu'hardcodé.
L'investissement dans la modélisation correcte se rembourse dans chaque couche de la stack, chaque canal sur lequel vous livrez, chaque expérimentation storefront que vous lancez.
Pour du contenu qui vit dans le domaine Shopify (spécifications produit, profils designer, store locators, FAQ, lookbooks liés aux produits), les metaobjects sont plus simples, moins chers et évitent complètement le problème de sync. Pour du contenu vraiment séparé du commerce (site corporate, blog éditorial à cycle long, contenu multi-marque), un CMS dédié reste le bon outil. Beaucoup de marchands font tourner les deux : metaobjects pour le contenu adjacent au commerce, CMS pour l'éditorial.
Effectivement illimité pour un usage normal. Les contraintes de performance se déclenchent sur les patterns de requête API, pas sur le nombre d'entrées. Des boutiques avec 100k+ entrées metaobject sont routinières.
Pas nativement. Si vous avez besoin d'un workflow éditorial (brouillons, revues, publication planifiée), soit vous le construisez avec un champ statut plus des admin extensions, soit vous utilisez un CMS dédié pour ce sous-ensemble de contenu.
Activez "Storefront API accessible" dans la définition du metafield ou du metaobject. Sans ce toggle, les données sont invisibles à vos requêtes storefront même si elles s'affichent correctement dans l'admin.
Une définition donne au metafield un type, des règles de validation, une UI admin et un accès Storefront API explicite. Un metafield sans définition fonctionne quand même via l'API mais est plus difficile à gérer et plus facile à corrompre. Créez toujours des définitions pour les données de production.
Considérez ce guide comme le chapitre d'implémentation après deux lectures plus courtes. L'audit de visibilité en 10 minutes montre ce qui manque en surface aujourd'hui. La liste des propriétés de schema markup en fait une liste de champs concrète pour les agents et la recherche. Les metafields et les metaobjects sont la solution sous-jacente : une couche catalogue typée et gouvernée pour que ces champs restent cohérents dans l'admin, l'API Storefront et le JSON-LD quand le catalogue grandit.
Si vous voulez de l'aide pour concevoir l'architecture metafield et metaobject de votre catalogue avant de commencer à remplir des milliers de valeurs, contactez-nous. Nous livrons typiquement le modèle de données dans un atelier d'une demi-journée avec votre équipe, et l'implémentation suit en deux à quatre semaines selon la taille du catalogue.

Le 30 juin 2026 est un mur. L'édition des Scripts est déjà verrouillée. Si vos remises de checkout, règles de livraison ou logique de paiement tournent encore sur Scripts, voici le playbook de migration, les modes d'échec et ce que ça coûte.

L'analyse approfondie d'un ingénieur sur les Shopify Functions en 2026. Les cinq points d'extension, ce que chacun résout, quand les Functions battent les apps, quand les apps battent les Functions, et comment les Functions s'intègrent à un storefront headless.

Le cadre de décision d'ingénieur pour la stratégie d'app Shopify en 2026. Quand construire une app custom, quand installer depuis l'App Store, quand étendre une app existante, et le calcul de coût réel derrière chaque chemin.