Une migration de Magento vers Shopify fait passer ton catalogue d'un modèle à base de templates (jeux d'attributs, produits configurables parents avec des produits simples enfants, store views) au modèle plus plat de Shopify (produits avec trois options au maximum, metafields, langues et marchés). Côté catalogue, le travail se résume à six chantiers : exporter les produits, les prix et chaque store view depuis Magento ; transformer les jeux d'attributs en définitions de metafields ; réécrire chaque produit configurable en un seul produit Shopify avec des lignes de variantes ; charger les traductions par langue ; reconstruire les prix par palier des groupes de clients sous forme de catalogues B2B ; et faire correspondre chaque ancienne URL à la nouvelle avec une redirection.
Ce guide couvre ce travail de catalogue champ par champ, pour Magento 2 Open Source et Adobe Commerce. Il part du principe que le choix de plateforme est fait. Si ce n'est pas le cas, notre comparatif Shopify vs Magento compare d'abord les coûts, le B2B et le modèle de variantes. Les clients, les commandes, les thèmes et les apps sont des chantiers séparés et n'apparaissent ici que là où ils touchent aux données produit.
Les six phases d'une migration de catalogue de Magento 2 vers Shopify
- Geler et inventorier. Arrête de créer de nouveaux attributs dans Magento, puis liste chaque jeu d'attributs, chaque attribut avec son type de saisie et sa portée, chaque attribut configurable et les store views qui contiennent des traductions.
- Exporter. Récupère les entités Products et Advanced Pricing, toutes les store views et la liste complète des URL qui reçoivent du trafic.
- Nettoyer et remodeler. Supprime les produits morts et les attributs inutilisés, éclate la colonne d'attributs regroupés en champs distincts et transforme les parents et enfants configurables en lignes de variantes.
- Construire d'abord le côté Shopify. Crée les définitions de metafields, publie les langues, configure les marchés et les catalogues B2B avant le premier import de produits, pour que l'import ait un endroit où atterrir.
- Importer en brouillon et vérifier. Charge les produits avec le statut brouillon (draft), compare les nombres et vérifie par échantillon les variantes, les prix, les images et les traductions par rapport à Magento.
- Rediriger et lancer. Importe le fichier de redirections, bascule le domaine, puis crawle la liste des anciennes URL et corrige chaque 404.
Les phases 2 à 5 passent par l'une des trois voies. Une app de migration de l'App Store Shopify se connecte aux deux boutiques et permet en général de lancer d'abord une migration de test ; la plupart transfèrent aussi les clients et les commandes. La voie manuelle exporte des fichiers CSV et les remodèle dans un tableur. Un PIM placé entre les deux importe depuis Magento et exporte vers Shopify. Les décisions de mapping décrites dans la suite de ce guide sont les mêmes quelle que soit la voie ; les voies CSV et PIM te donnent le plus de contrôle sur ces décisions.
Exporter Products, Advanced Pricing et chaque store view depuis Magento
L'export intégré de Magento se trouve sous System > Data Transfer > Export (Système > Transfert de données > Exporter). La documentation d'export d'Adobe liste les types d'entités, et deux comptent pour le catalogue : Products (produits) et Advanced Pricing (tarification avancée). Les prix par palier ne sont pas dans le fichier produits ; ils sortent de l'entité Advanced Pricing. L'export passe par la file de messages, donc le cron doit tourner, et le fichier arrive dans `var/export` (ou dans le dossier de stockage distant si ce module est activé).
Le fichier produits contient une ligne par produit pour la portée par défaut, plus des lignes supplémentaires par store view là où les valeurs diffèrent, repérées par `store_view_code`. Garde ces lignes. Elles contiennent tes noms, descriptions, champs meta et clés d'URL traduits. Autres colonnes à surveiller :
- `product_type` distingue les produits simples, configurables, bundle, groupés, virtuels et téléchargeables. Chaque type demande son propre traitement sur Shopify.
- `configurable_variations` sur la ligne parent liste chaque SKU enfant avec ses valeurs d'option, par exemple `sku=MS-TEE-NAV-M,color=Navy,size=M|sku=MS-TEE-NAV-L,color=Navy,size=L`.
- `additional_attributes` regroupe tous les attributs personnalisés dans une seule cellule sous forme de paires `code=value`. Éclate-la en colonnes avant toute autre chose.
- `url_key` est la dernière partie de l'URL du produit. Avec un suffixe d'URL comme `.html` et le réglage Use Categories Path for Product URLs activé, Adobe montre qu'un même produit peut répondre sur plusieurs URL.
- `base_image`, `small_image`, `thumbnail_image` et `additional_images` référencent des fichiers sous `pub/media`. Shopify a besoin d'URL d'images accessibles publiquement, donc vérifie que l'export les résout depuis un domaine en ligne.
Pour la liste des URL, combine trois sources : la grille URL Rewrites sous Marketing > SEO & Search > URL Rewrites (réécritures d'URL), le rapport sur les pages de ta Search Console et un crawl de la boutique en ligne. Les réécritures te disent ce que Magento peut servir ; la Search Console et tes analytics te disent quelles URL reçoivent réellement du trafic et des liens.
Les jeux d'attributs deviennent des définitions de metafields : construire le schéma Shopify avant l'import
Shopify n'a pas de jeux d'attributs. Chaque champ personnalisé devient une définition de metafield sur le produit (ou la variante) avec un namespace, une clé et un type, et chaque produit affiche les mêmes définitions. Crée-les avant le premier import : le CSV produits de Shopify lit les colonnes de metafields au format `product.metafields.custom.material`, mais uniquement pour les définitions qui existent déjà, et il ne prend pas du tout en charge les metafields de variantes. Notre guide des metafields Shopify détaille les namespaces et les types.
Le type que tu choisis décide si les valeurs survivent à l'import. Fais correspondre chaque type de saisie Magento de façon délibérée :
Types de saisie des attributs Magento et leurs cibles Shopify
| Text Field | material | Metafield : texte sur une ligne | Direct |
|---|---|---|---|
| Text Area ou Page Builder | care_instructions | Metafield : texte multiligne, ou le champ Description | Nettoyer d'abord le HTML |
| Dropdown | fit | Metafield : texte sur une ligne avec une liste de choix de 128 valeurs au maximum | Direct |
| Multiple Select | activity | Metafield : liste de références de metaobjects, ou tags | Remodeler |
| Yes/No | is_vegan | Metafield : vrai ou faux | Direct |
| Date | launch_date | Metafield : date | Direct |
| Price | msrp | Metafield : montant, ou prix barré (Compare-at price) | Décider du sens |
| Visual ou Text Swatch (configurable) | color, size | Option de produit, éventuellement liée à un metafield de catégorie | Remodeler |
| Weight (attribut système) | weight | Weight value (grams) par variante | Convertir les unités |
| Media Image | label_image | Média produit ou metafield de fichier renseigné hors du CSV | À reconstruire |
| Fixed Product Tax | weee | Aucun champ produit ; réglages de taxes Shopify | À reconstruire |
Deux habitudes gardent le schéma propre. Préfixe les définitions par famille quand un attribut n'a de sens que pour une seule famille de produits (`custom.bike_frame_size` plutôt que `custom.size`), car Shopify l'affichera sur chaque produit. Et abandonne les attributs que personne ne remplit : si `additional_attributes` montre un champ sur une poignée de produits seulement, demande-toi s'il doit vraiment exister sur Shopify.
Réécrire un T-shirt configurable en lignes de variantes Shopify
Prends un T-shirt configurable `MS-TEE` avec deux attributs configurables, couleur et taille, et quatre produits simples enfants. Dans Magento, cela fait cinq produits : un parent avec la description et les images, et quatre enfants avec leurs propres SKU, prix, stock, poids et EAN. Sur Shopify, cela devient un seul produit avec deux options et quatre variantes. Shopify autorise trois options et 2 048 variantes par produit, donc ce T-shirt y tient sans problème.
Un produit configurable Magento sous forme de lignes CSV Shopify
| merino-tee | Merino T-shirt | Color | Navy | Size | M | MS-TEE-NAV-M | 49.00 | gtin:9506000134352 |
| merino-tee | Color | Navy | Size | L | MS-TEE-NAV-L | 49.00 | gtin:(EAN de l'enfant) | |
| merino-tee | Color | Sand | Size | M | MS-TEE-SND-M | 49.00 | gtin:(EAN de l'enfant) | |
| merino-tee | Color | Sand | Size | L | MS-TEE-SND-L | 49.00 | gtin:(EAN de l'enfant) |
Les détails qui décident si cela fonctionne :
- Le handle vient du `url_key` du parent, pas du titre, pour que l'ancienne et la nouvelle URL restent reconnaissables.
- Les données des enfants passent dans les colonnes de variantes. L'EAN va dans Barcodes avec un préfixe de type (`gtin:` ou `upc:` ; la colonne accepte jusqu'à 20 valeurs), le poids dans Weight value (grams) et l'image de l'enfant dans Variant image URL.
- Les attributs enfants qui ne sont pas des options (une longueur d'entrejambe par taille, un code motif par couleur) n'ont pas de colonne CSV, car les metafields de variantes ne sont pas pris en charge dans le CSV. Charge-les via l'éditeur en masse des variantes, l'Admin API ou une app.
- Quatre attributs configurables ou plus obligent à fusionner deux attributs en une seule option, à scinder le produit ou à passer par une app. L'article sur la limite de variantes Shopify détaille chaque voie.
- Les produits simples sans parent reçoivent une ligne avec Option1 name `Title` et Option1 value `Default Title`, la convention de Shopify pour les produits sans options.
Des store views aux langues et marchés Shopify
Une store view Magento avec du contenu en néerlandais ou en français devient une langue publiée sur Shopify. La documentation de Shopify sur les langues indique que chaque langue publiée reçoit ses propres URL et que les traductions peuvent venir de Translate & Adapt, de fichiers CSV ou d'une app de traduction. Les handles se traduisent aussi : les exigences multilingues de Shopify montrent `/en-ca/products/shoes` qui devient `/es-mx/products/zapatos`, seul le mot `products` restant fixe, donc le `url_key` de chaque store view peut être repris comme handle traduit. Sur la voie CSV, le CSV de traductions s'exporte depuis Paramètres > Langues une fois les produits créés, et il identifie chaque produit par son ID de ressource Shopify, pas par son SKU. Fais correspondre les lignes `store_view_code` de Magento à ces ID via le handle ou le SKU, puis remplis la colonne Translated content avec les noms, les descriptions et les champs SEO.
Les prix se répartissent autrement. Magento peut définir des prix par website ; Shopify gère les prix par pays via les marchés, avec des ajustements en pourcentage ou des prix fixes par marché (le CSV produits a une colonne Price / International pour un marché nommé International). Une configuration Magento avec un website néerlandais en EUR et un website britannique en GBP devient une seule boutique Shopify avec deux marchés. Notre article sur Shopify Markets couvre cette configuration.
Les prix par palier des groupes de clients reconstruits en catalogues B2B
Dans Magento, les prix par palier sont des lignes dans l'Advanced Pricing de chaque produit : un website, un groupe de clients (ou un shared catalog sur Adobe Commerce B2B), une quantité, et soit un prix fixe, soit une remise en pourcentage. Un grossiste peut avoir « Retailer » à 10 % de remise dès 12 unités et « Distributor » à un prix fixe de 31,50 EUR dès 48 unités.
L'équivalent sur Shopify est le catalogue B2B. Selon la documentation de Shopify sur les catalogues B2B, un catalogue définit quels produits et quels prix une entreprise voit ; les forfaits Basic, Grow et Advanced autorisent jusqu'à trois catalogues actifs sur l'ensemble des marchés B2B, tandis que Plus autorise des catalogues illimités et leur attribution directe aux entreprises et à leurs emplacements. Dans un catalogue, les prix dégressifs ajoutent jusqu'à 10 paliers de prix par produit, et les règles de quantité fixent des minimums, des maximums et des incréments de commande par variante.
- Un groupe de clients, un catalogue : c'est le mapping le plus propre. Compte d'abord tes groupes : plus de trois signifie Plus ou un regroupement.
- Les paliers en pourcentage se traduisent par un ajustement en pourcentage du catalogue plus des paliers de prix dégressifs ; les paliers fixes deviennent des prix de catalogue fixes.
- Les prix par palier pour les acheteurs particuliers (le groupe NOT LOGGED IN ou General) n'ont pas de place dans un catalogue B2B. Reconstruis-les sous forme de réductions ou avec une app.
- Les shared catalogs et les devis négociés d'Adobe Commerce B2B demandent le plus de soin ; inventorie-les entreprise par entreprise avant de décider.
Un plan de redirection des clés d'URL .html vers les handles /products/
Chaque URL Magento qui se positionne ou reçoit des backlinks a besoin d'une 301 vers la page Shopify qui lui succède. Shopify le fait avec les redirections d'URL sous Contenu > Menus, et tu peux les importer sous forme de CSV avec les colonnes Redirect from et Redirect to. La documentation sur les redirections d'URL fixe les règles qui structurent le plan :
- Limites : jusqu'à 100 000 redirections, ou 20 000 000 sur Plus.
- Seules les URL cassées sont redirigées. Une redirection ne se déclenche que si l'ancien chemin renvoie une 404 sur Shopify, ce qui est le cas normal pour les chemins Magento après le changement de domaine.
- Les chemins réservés comme `/apps`, `/cart` et `/collections/all` ne peuvent pas être redirigés.
- Sous-dossiers de langue : par défaut, une redirection s'applique à chaque sous-dossier de marché, mais les URL Magento localisées ont besoin de leur propre ligne par langue si l'ancien chemin était différent.
- Particularité du `.html` : Shopify traite une URL avec et sans `.html` comme identique, donc tu ne peux pas rediriger `/size-guide.html` vers `/size-guide`. Fais-la pointer vers `/pages/size-guide` à la place.
Construis le plan à partir de la liste d'URL exportée plus tôt : les URL produits (`/merino-tee.html`, `/men/tops/merino-tee.html`) vers `/products/merino-tee`, les URL de catégories vers `/collections/<handle>`, les pages CMS vers `/pages/<handle>`. Les produits fusionnés ou retirés vont vers la collection la plus proche, pas vers la page d'accueil. WISEPIM ne crée ni ne gère de redirections : ce fichier est donc construit par ton équipe, ton agence ou ton app de migration. Le guide SEO Magento couvre les réglages d'URL côté Magento qui produisent ces chemins.
Le nettoyage du catalogue à terminer avant l'export final
Chaque problème que tu laisses dans Magento sera importé, traduit et redirigé. Ces vérifications rapportent le plus quand elles sont faites avant le dernier export, pas après le lancement.
Nettoyage du catalogue Magento avant le passage à Shopify
La même discipline vaut pour les autres changements de plateforme. Une boutique qui quitte WooCommerce se pose les mêmes questions de variantes et de metafields avec un modèle source plus simple, traité dans WooCommerce vs Shopify.
Faire passer le catalogue par un PIM entre Magento et Shopify
Une migration est un bon moment pour sortir complètement les données produit de la boutique. WISEPIM se connecte aux deux plateformes : la connexion Magento 2 importe les produits, les catégories et les liens configurables, et la connexion Shopify exporte les produits par SKU avec les variantes en options, les metafields, ainsi que les titres et descriptions traduits par locale. Entre les deux, tu peux nettoyer les attributs, regrouper les produits en familles, traduire avec l'AI les store views manquantes et vérifier les champs obligatoires avec Quality Guard avant que quoi que ce soit n'arrive sur Shopify.
Deux limites à prévoir : WISEPIM ne transfère ni les clients, ni les commandes, ni les redirections, et il ne convertit pas automatiquement les jeux d'attributs Magento en familles de produits. Si tu remplaces aussi un ancien PIM pendant la migration, la page migration de PIM décrit comment les équipes reprennent ces données.

