Een migratie van Magento naar Shopify verhuist je catalogus van een model met templates (attribuutsets, configureerbare hoofdproducten met simple children, store views) naar het plattere model van Shopify (producten met maximaal drie opties, metafields, talen en markten). Voor de catalogus komt het werk neer op zes taken: producten, prijzen en elke store view uit Magento exporteren; attribuutsets omzetten in metafield-definities; elk configureerbaar product herschrijven als één Shopify-product met variantregels; vertalingen per taal laden; staffelprijzen per klantgroep opnieuw opbouwen als B2B-catalogi; en elke oude URL met een redirect aan de nieuwe koppelen.
Deze gids behandelt dat catalogwerk veld voor veld, voor Magento 2 Open Source en Adobe Commerce. We gaan ervan uit dat de keuze voor het platform al gemaakt is. Is dat nog niet zo, lees dan eerst onze vergelijking Shopify vs Magento over kosten, B2B en het variantmodel. Klanten, orders, thema's en apps zijn aparte sporen en komen alleen aan bod waar ze productdata raken.
Zes fasen van een catalogusverhuizing van Magento 2 naar Shopify
- Bevriezen en inventariseren. Maak in Magento geen nieuwe attributen meer aan en noteer elke attribuutset, elk attribuut met invoertype en scope, elk configureerbaar attribuut en de store views met vertalingen.
- Exporteren. Haal de entiteiten Products en Advanced Pricing op, alle store views, en de volledige lijst URL's die verkeer krijgen.
- Opschonen en omvormen. Verwijder dode producten en ongebruikte attributen, splits de samengepakte attribuutkolom in velden en zet configureerbare hoofd- en subproducten om in variantregels.
- Eerst de Shopify-kant bouwen. Maak metafield-definities, publiceer talen en zet markten en B2B-catalogi op vóór de eerste productimport, zodat de import ergens kan landen.
- Importeren als concept en controleren. Laad producten met Status op draft, vergelijk aantallen en controleer steekproefsgewijs varianten, prijzen, afbeeldingen en vertalingen tegen Magento.
- Redirects en livegang. Importeer het redirectbestand, verhuis het domein, crawl daarna de oude URL-lijst en los elke 404 op.
Fase 2 tot en met 5 lopen via een van drie routes. Een migratieapp uit de Shopify App Store koppelt met beide winkels en laat je meestal eerst een testmigratie draaien; de meeste nemen ook klanten en orders mee. Bij de handmatige route exporteer je CSV-bestanden en vorm je ze om in een spreadsheet. Een PIM ertussen importeert uit Magento en exporteert naar Shopify. De koppelkeuzes in de rest van deze gids zijn op elke route hetzelfde; via CSV of een PIM heb je er de meeste controle over.
Products, Advanced Pricing en elke store view exporteren uit Magento
De standaardexport van Magento zit onder System > Data Transfer > Export. De exportdocumentatie van Adobe noemt de entiteiten, en voor de catalogus tellen er twee: Products en Advanced Pricing. Staffelprijzen staan niet in het productbestand maar komen uit de entiteit Advanced Pricing. De export loopt via de message queue, dus cron moet draaien, en het bestand komt in `var/export` (of in de map voor remote storage als die module aanstaat).
Het productbestand heeft één regel per product voor de standaardscope plus extra regels per store view waar waarden afwijken, gemarkeerd met `store_view_code`. Bewaar die regels. Ze bevatten je vertaalde namen, omschrijvingen, metavelden en URL-keys. Andere kolommen om op te letten:
- `product_type` onderscheidt simple, configurable, bundle, grouped, virtual en downloadable. Elk type vraagt op Shopify een eigen aanpak.
- `configurable_variations` op de regel van het hoofdproduct noemt elke sub-SKU met de optiewaarden, bijvoorbeeld `sku=MS-TEE-NAV-M,color=Navy,size=M|sku=MS-TEE-NAV-L,color=Navy,size=L`.
- `additional_attributes` stopt alle eigen attributen als `code=waarde`-paren in één cel. Splits die eerst in kolommen.
- `url_key` is het laatste deel van de product-URL. Met een achtervoegsel zoals `.html` en de instelling Use Categories Path for Product URLs aan, is één product volgens Adobe via meerdere URL's bereikbaar.
- `base_image`, `small_image`, `thumbnail_image` en `additional_images` verwijzen naar bestanden onder `pub/media`. Shopify heeft publiek bereikbare afbeeldings-URL's nodig, dus controleer of de export ze vanaf een live domein laat zien.
Voor de URL-lijst combineer je drie bronnen: het URL Rewrites-overzicht onder Marketing > SEO & Search > URL Rewrites, het paginarapport in Search Console en een crawl van de live winkel. Rewrites laten zien wat Magento kan serveren; Search Console en analytics laten zien welke URL's echt verkeer en links krijgen.
Van attribuutsets naar metafield-definities: het Shopify-schema vóór de import
Shopify kent geen attribuutsets. Elk eigen veld wordt een metafield-definitie op het product (of de variant) met een namespace, key en type, en elk product toont dezelfde definities. Maak ze aan vóór de eerste import: de product-CSV van Shopify leest metafield-kolommen in het formaat `product.metafields.custom.material`, maar alleen voor definities die al bestaan, en ondersteunt variant-metafields helemaal niet. Onze gids over Shopify-metafields gaat dieper in op namespaces en types.
Het type dat je kiest bepaalt of waarden de import overleven. Koppel elk Magento-invoertype bewust:
Invoertypes van Magento-attributen en hun bestemming in Shopify
| Text Field | material | Metafield: tekst op één regel | Direct |
|---|---|---|---|
| Text Area of Page Builder | care_instructions | Metafield: tekst op meerdere regels, of het veld Beschrijving | Eerst HTML opschonen |
| Dropdown | fit | Metafield: tekst op één regel met een keuzelijst van maximaal 128 waarden | Direct |
| Multiple Select | activity | Metafield: lijst met metaobject-verwijzingen, of tags | Omvormen |
| Yes/No | is_vegan | Metafield: waar of onwaar | Direct |
| Date | launch_date | Metafield: datum | Direct |
| Price | msrp | Metafield: geld, of de vergelijkingsprijs | Betekenis bepalen |
| Visual of Text Swatch (configureerbaar) | color, size | Productoptie, eventueel gekoppeld aan een categorie-metafield | Omvormen |
| Gewicht (systeemattribuut) | weight | Gewicht (gram) per variant | Eenheden omrekenen |
| Media Image | label_image | Productmedia of een bestandsmetafield buiten de CSV | Opnieuw bouwen |
| Fixed Product Tax | weee | Geen productveld; belastinginstellingen van Shopify | Opnieuw bouwen |
Twee gewoontes houden het schema schoon. Geef definities een familievoorvoegsel als een attribuut maar bij één productfamilie past (`custom.bike_frame_size` in plaats van `custom.size`), want Shopify toont het op elk product. En laat attributen vallen die niemand invult: staat een veld in `additional_attributes` maar op een handvol producten, vraag je dan af of het in Shopify nog moet bestaan.
Een configureerbaar T-shirt herschrijven als variantregels voor Shopify
Neem een configureerbaar T-shirt `MS-TEE` met twee configureerbare attributen, kleur en maat, en vier simple children. In Magento zijn dat vijf producten: één hoofdproduct met omschrijving en afbeeldingen, en vier subproducten met eigen SKU, prijs, voorraad, gewicht en EAN. In Shopify wordt het één product met twee opties en vier varianten. Shopify staat drie opties en 2.048 varianten per product toe, dus dit shirt past ruim.
Eén configureerbaar Magento-product als CSV-regels voor Shopify
| merino-tee | Merino T-shirt | Kleur | Navy | Maat | M | MS-TEE-NAV-M | 49,00 | gtin:9506000134352 |
| merino-tee | Kleur | Navy | Maat | L | MS-TEE-NAV-L | 49,00 | gtin:(EAN van subproduct) | |
| merino-tee | Kleur | Zand | Maat | M | MS-TEE-SND-M | 49,00 | gtin:(EAN van subproduct) | |
| merino-tee | Kleur | Zand | Maat | L | MS-TEE-SND-L | 49,00 | gtin:(EAN van subproduct) |
Details die bepalen of dit werkt:
- De handle komt uit de `url_key` van het hoofdproduct, niet uit de titel, zodat oude en nieuwe URL's herkenbaar gelijk blijven.
- Gegevens van subproducten gaan naar variantkolommen. De EAN gaat in Barcodes met een typevoorvoegsel (`gtin:` of `upc:`; de kolom neemt tot 20 waarden), het gewicht in Weight value (grams) en de afbeelding van het subproduct in Variant image URL.
- Attributen van subproducten die geen optie zijn (een binnenbeenlengte per maat, een patrooncode per kleur) hebben geen CSV-kolom, omdat variant-metafields niet in CSV worden ondersteund. Laad ze via de bulkeditor voor varianten, de Admin API of een app.
- Vier of meer configureerbare attributen betekent twee samenvoegen tot één optie, het product splitsen of een app. De blog over de Shopify-variantenlimiet loopt elke route door.
- Simple producten zonder hoofdproduct krijgen één regel met Option1 name `Title` en Option1 value `Default Title`, de Shopify-conventie voor producten zonder opties.
Van store views naar talen en markten in Shopify
Een Magento-store view met Nederlandse of Franse content wordt in Shopify een gepubliceerde taal. Volgens de documentatie over talen krijgt elke gepubliceerde taal eigen URL's, en komen vertalingen uit Translate & Adapt, uit CSV-bestanden of uit een vertaalapp. Ook handles zijn te vertalen: de vereisten voor meerdere talen tonen `/en-ca/products/shoes` als `/es-mx/products/zapatos`, waarbij alleen het woord `products` vastligt. De `url_key` van elke store view kan dus mee als vertaalde handle. Kies je de CSV-route, dan exporteer je het vertaal-CSV via Instellingen > Talen pas als de producten bestaan, en dat bestand herkent producten aan hun resource-ID in Shopify, niet aan de SKU. Koppel de `store_view_code`-regels uit Magento dus via handle of SKU aan die ID's en vul daarna de kolom Vertaalde content met namen, omschrijvingen en SEO-velden.
Prijzen splitsen anders. Magento kan prijzen per website instellen; Shopify regelt landprijzen via markten, met procentuele aanpassingen of vaste prijzen per markt (de product-CSV heeft een kolom Price / International voor een markt met de naam International). Een Magento-opzet met een Nederlandse website in euro en een Belgische website met Franse store view wordt één Shopify-winkel met markten en talen. Onze blog over Shopify Markets instellen behandelt die opzet.
Staffelprijzen per klantgroep opnieuw opbouwen als B2B-catalogi
In Magento zijn staffelprijzen regels in de Advanced Pricing van elk product: een website, een klantgroep (of een shared catalog bij Adobe Commerce B2B), een aantal, en een vaste prijs of een kortingspercentage. Een groothandel heeft bijvoorbeeld "Winkelier" met 10% korting vanaf 12 stuks en "Distributeur" met een vaste EUR 31,50 vanaf 48 stuks.
In Shopify is de B2B-catalogus het equivalent. Volgens de documentatie over B2B-catalogi bepaalt een catalogus welke producten en prijzen een bedrijf ziet; Basic, Grow en Advanced staan tot drie actieve catalogi toe over alle B2B-markten, Plus staat onbeperkt catalogi toe en directe toewijzing aan bedrijven en locaties. Binnen een catalogus voeg je met staffelprijzen tot 10 prijsdrempels per product toe, en hoeveelheidsregels leggen per variant een minimum, maximum en veelvoud vast.
- Eén klantgroep, één catalogus is de schone vertaling. Tel eerst je groepen: meer dan drie betekent Plus of samenvoegen.
- Procentuele staffels worden een procentuele catalogusaanpassing plus prijsdrempels; vaste staffels worden vaste catalogusprijzen.
- Staffelprijzen voor consumenten (de groep NOT LOGGED IN of General) hebben geen plek in een B2B-catalogus. Bouw ze opnieuw als korting of met een app.
- Shared catalogs en onderhandelde offertes uit Adobe Commerce B2B vragen de meeste zorg; inventariseer ze per bedrijf voordat je kiest.
Een redirectplan van .html-URL-keys naar /products/-handles
Elke Magento-URL die rankt of backlinks heeft, heeft een 301 nodig naar de opvolger in Shopify. Shopify doet dat met URL-omleidingen onder Content > Menu's, en je kunt ze importeren als CSV met de kolommen Redirect from en Redirect to. De documentatie over URL-omleidingen geeft de regels die het plan bepalen:
- Limieten: tot 100.000 omleidingen, of 20.000.000 op Plus.
- Alleen kapotte URL's worden omgeleid. Een omleiding werkt alleen als het oude pad op Shopify een 404 geeft, wat voor Magento-paden na de domeinverhuizing de normale situatie is.
- Gereserveerde paden zoals `/apps`, `/cart` en `/collections/all` kun je niet omleiden.
- Taalsubmappen: één omleiding geldt standaard voor elke submap van een markt, maar vertaalde Magento-URL's hebben per taal een eigen regel nodig als het oude pad afweek.
- De `.html`-eigenaardigheid: Shopify ziet een URL met en zonder `.html` als dezelfde, dus `/maattabel.html` omleiden naar `/maattabel` gaat niet. Verwijs naar `/pages/maattabel`.
Bouw het plan uit de eerder geëxporteerde URL-lijst: product-URL's (`/merino-tee.html`, `/heren/tops/merino-tee.html`) naar `/products/merino-tee`, categorie-URL's naar `/collections/<handle>`, CMS-pagina's naar `/pages/<handle>`. Samengevoegde of uitgefaseerde producten gaan naar de best passende collectie, niet naar de homepage. WISEPIM maakt of beheert geen redirects, dus dit bestand bouwt je eigen team, bureau of migratieapp. De gids over Magento SEO-instellingen behandelt de URL-instellingen in Magento die deze paden opleveren.
Catalogus opschonen vóór de laatste export
Elk probleem dat je in Magento laat staan, wordt geïmporteerd, vertaald en omgeleid. Deze controles leveren het meest op vóór de laatste export, niet na de livegang.
Magento-catalogus opschonen voor de overstap naar Shopify
Dezelfde discipline geldt voor andere platformwissels. Een winkel die van WooCommerce komt, krijgt dezelfde vragen over varianten en metafields met een eenvoudiger bronmodel, besproken in WooCommerce vs Shopify.
De catalogus via een PIM tussen Magento en Shopify laten lopen
Een migratie is een goed moment om productdata helemaal los te halen van de webshop. WISEPIM koppelt met beide platforms: de Magento 2-koppeling importeert producten, categorieën en configureerbare koppelingen, en de Shopify-koppeling exporteert producten op SKU met varianten als opties, metafields, en vertaalde titels en omschrijvingen per locale. Daartussen schoon je attributen op, groepeer je producten in families, vertaal je ontbrekende store views met AI en controleer je verplichte velden met Quality Guard voordat iets in Shopify belandt.
Twee grenzen om rekening mee te houden: WISEPIM verhuist geen klanten, orders of redirects, en zet Magento-attribuutsets niet automatisch om in productfamilies. Vervang je tijdens de overstap ook een oudere PIM, dan beschrijft de pagina over PIM-migratie hoe teams die data meenemen.

