EN Keuzehulp Contact

Wat we uitzoeken

Shopify Markets: één webshop in dertien landen

Shopify Markets in de praktijk bij XXLplant: één webshop in dertien landen en negen talen. Vertalen via de API, assortiment en prijs per land, btw en feedlabels voor Performance Max.

E-commerce6 oktober 20269 min lezenZAZU

XXLplant verkoopt grote kamerplanten en buitenplanten, van een Strelitzia van tweeënhalve meter tot een olijfboom voor op het terras. Het is de webshop van ZAZU zelf, en hij levert in dertien landen: Nederland, België, Luxemburg, Duitsland, Oostenrijk, Frankrijk, Ierland, Italië, Spanje, Denemarken, Zweden, Polen en Kroatië.

Dat draait op één Shopify-winkel, zonder eigen magazijn. Dit artikel is geschreven voor developers en PPC-specialisten die een webshop over de grens willen brengen. Het gaat over de inrichting van Shopify Markets, over hoe we het assortiment en de prijs per land automatisch bewaken, en over hoe de productfeed per land aan Performance Max hangt.

Waarom grote planten zich lenen voor verkoop in heel Europa

Een plant van twee meter neem je niet mee in de achterbak, en bij het tuincentrum om de hoek staat hij zelden. Wie zo'n plant zoekt, zoekt online, in Lyon net zo goed als in Utrecht. In Duitsland wordt drie tot vijf keer zo vaak op de grote soorten gezocht als in Nederland, terwijl er weinig gespecialiseerde winkels zijn.

De planten komen rechtstreeks van gespecialiseerde kwekers in Nederland, België en Zuid-Europa, via het netwerk van Everspring. Een kweker maakt de plant pas klaar na de bestelling en verstuurt hem in een doos voor planten, met een kou- of warmtepakket bij extreem weer. Voor elk product en elk land levert Everspring een levertijd, een verzendprijs en een inkoopprijs. Die drie gegevens sturen alles wat hieronder volgt.

Hoe je een Shopify-webshop in meerdere talen zet

Alle talen hangen aan één webpresence in Shopify Markets, met een submap per taal: /de/, /fr/, /it/ en zo verder, en Nederlands op de wortel. Shopify zet zelf de hreflang-tags en de canonical per taal. Een Duitse bezoeker komt op große Zimmerpflanzen en een Nederlandse op grote kamerplanten. Het is dezelfde collectie, met een vertaalde handle.

Die ene webpresence hangt technisch aan één markt. Bij XXLplant is dat toevallig de markt Ierland. Wie die markt verwijdert of zijn webpresence aanpast, breekt de URL's van alle talen tegelijk. Dat is het eerste wat we in de documentatie van de winkel hebben gezet.

De vertaal-app van Shopify vertaalt standaard maar twee talen automatisch. Wij schrijven vertalingen daarom rechtstreeks met de Admin GraphQL-mutatie translationsRegister. Per veld haal je eerst met translatableResources de digest van de brontekst op. Die digest moet exact mee, anders weigert Shopify de vertaling. Wijzigt de Nederlandse bron later, dan staat de vertaling op verouderd tot je hem opnieuw registreert met de nieuwe digest.

Drie dingen vertalen niet vanzelf mee:

  • Metafields van een collectie verschijnen niet in de vertaalbare velden van die collectie. Je vertaalt ze per metafield, op het eigen GID van dat metafield.
  • Links in een artikeltekst wijzen na vertaling nog naar de Nederlandse URL. Een Duitse lezer komt dan op een Nederlandse pagina. Op 5 oktober hebben we in 267 vertaalde artikelversies de collectielinks omgezet naar de collectie in de eigen taal.
  • Een tekst die alleen als standaardwaarde in het schema van een sectie staat, kun je niet vertalen. Dat staat uitgewerkt in Shopify GitHub-integratie in de praktijk.

Waarom je naast vertalen ook Shopify Markets nodig hebt

In Shopify bepaalt de taal alleen wat je leest. Of je kunt bestellen, tegen welke prijs en met welke verzendkosten, regelt een markt. XXLplant heeft er twaalf. Elke markt heeft een eigen catalogus, en een catalogus bestaat uit twee delen: een prijslijst en een publicatie die bepaalt welke producten de klant ziet.

Een paar dingen in de Admin-API kostten ons tijd:

  • marketCreate maakt een markt aan als concept. Je moet hem daarna apart met marketUpdate op actief zetten.
  • publicationUpdate weigert blokken van honderd producten. Blokken van vijfentwintig met een korte pauze werken.
  • autoPublish: true op een catalogus publiceert elk nieuw product automatisch in die markt, ook als het daar niet leverbaar is.

Dat laatste ging mis met een Deense bestelling. Een klant bestelde een Strelitzia nicolai van 170 centimeter, en de kweker weigerde de order omdat die plant niet naar Denemarken gaat. De oorzaak was autoPublish op de Deense catalogus. Sindsdien staat autoPublish overal uit, en bepaalt een script welk product in welke markt hoort.

Hoe een script elke ochtend het assortiment per land bijhoudt

Elke ochtend om 7:15 loopt een synchronisatie over alle catalogi. Een product hoort in een markt als het actief is, in de webshop staat en als Everspring het naar elk land van die markt kan leveren. Leverbaar betekent dat de levertijd niet op uitgeschakeld staat en dat er een verzendprijs is. Een bundel erft de leverbaarheid van zijn onderdelen.

Een product komt er alleen bij met minstens 15 procent marge, en gaat er alleen af als het niet leverbaar is of verlies maakt. Het script heeft twee remmen. Bij meer dan zestig wijzigingen in één markt stopt het voor die markt, en als Everspring voor minder dan driehonderd varianten data teruggeeft stopt het helemaal. Een storing bij de leverancier haalt dan niet ongemerkt de halve winkel offline.

Het resultaat is een assortiment dat per land verschilt. Spanje krijgt 328 producten, Zweden 321 en Duitsland 397. De grootste maten vallen in een aantal landen af, omdat geen kweker ze daar kan bezorgen.

Hoe je in Shopify Markets de prijs per land berekent

Verzenden kost per land en per product iets anders. Een doos met een Strelitzia van 250 centimeter kost binnen Nederland €34 en naar Duitsland €75. Een vaste opslag voor het buitenland is daardoor op het ene product te laag en op het andere veel te hoog. XXLplant rekent daarom per product een prijsvloer uit.

De vloer is de kostprijs in het duurste land van de markt, gedeeld door één min de doelmarge, maal de btw. De kostprijs is de inkoop plus de verzending van de kweker. De doelmarge loopt af met het bedrag: 25 procent, 21 procent boven veertig euro winst en 18 procent boven tachtig euro. Daarna maakt het script er een prijs op ,95 van. Het telt de verzendkosten die de klant betaalt mee, en het controleert ook of twee stuks in één bestelling nog genoeg opleveren, omdat de kweker dan vaak één doos stuurt.

Elke ochtend trekt het script een te lage prijs op naar de vloer, als vaste prijs in de prijslijst van die markt. De Nederlandse prijzen raakt het niet aan. Op 3 oktober hebben we daarnaast eenmalig alle buitenlandse prijzen herrekend met de verzending van de klant erbij, en daarbij gingen te hoge prijzen omlaag. Voor Duitsland geldt een eigen ondergrens, omdat de prijs daar moet kunnen concurreren met de grote Duitse plantenwinkels. Een Strelitzia nicolai van 190 centimeter kost een Duitse klant sindsdien €154,95 plus €39,95 verzending. Daarvoor was dat €229,95 plus €69,95.

Wat de OSS-drempel betekent voor je btw

Bij de btw moet je letten op de drempel voor afstandsverkopen. Zolang je samen minder dan €10.000 per jaar aan particulieren in andere EU-landen verkoopt, reken je Nederlandse btw, en Shopify doet dat dan ook op een Deense order. Daarboven reken je de btw van het land van de klant en geef je die aan via OSS. De prijsformule moet dan mee, want voor Denemarken en Zweden ligt het tarief op 25 procent.

Hoe feedlabels per land aan Performance Max hangen

Voor PPC is de markt de eenheid. De productfeed gaat via de app Simprosys naar Merchant Center, met per markt een eigen feedlabel in de vorm EUR_<markt-id>, DKK_<markt-id> of PLN_<markt-id>. Elke Performance Max-campagne hangt aan het feedlabel van zijn markt. Zo staat in de Duitse campagne precies het Duitse assortiment, met de Duitse prijs en de Duitse taal.

Dat heeft een gevolg dat je moet kennen. Toen we Duitsland op 3 oktober losmaakten van Oostenrijk en Luxemburg, hebben we de bestaande markt Duitsland laten heten en Oostenrijk verhuisd naar een andere markt. Andersom had de Duitse campagne een nieuw feedlabel gekregen, en had hij zijn leerhistorie moeten opbouwen op een leeg label.

Drie andere dingen uit de feed:

  • De feedtitel volgt de opbouw naam, maat, botanische naam en kenmerk, met verticale strepen ertussen. De maat staat op plek twee, omdat een Shopping-kaart de titel afkapt en de maat bij grote planten het verschil maakt.
  • Merchant Center haalde naast de feed zelf 1.271 producten op door de site te crawlen, met andere ID's en vertaalde titels. Daarvan was 63 procent afgekeurd. Die automatisch gevonden bron staat nu verborgen, zodat er per product één bron is.
  • De feed gebruikt de SEO-titel en SEO-omschrijving van het product. Een verbetering in de SEO-tekst komt dus na een synchronisatie ook in Shopping terecht.

Vier keuzes voordat je internationaal gaat verkopen

Wil je met je eigen webshop de grens over, dan kom je dezelfde vragen tegen. Dit zijn ze, in de volgorde waarin wij ze tegenkwamen.

  1. Kies per land of je alleen vertaalt of ook echt verkoopt. Een Spaanse pagina zonder Spaanse markt trekt bezoekers die niet kunnen afrekenen.
  2. Laat het assortiment per land volgen uit wat je echt kunt leveren, en laat een script dat bijhouden. Een product dat niet aankomt, kost je meer dan een product dat er niet staat.
  3. Reken de prijs per product en per land uit vanaf je kostprijs inclusief verzending. Een vaste opslag voor het buitenland klopt bijna nooit.
  4. Leg de structuur van je markten vast voordat je campagnes bouwt. Een feedlabel verhuizen kost je de leerhistorie van een campagne.

Hoe XXLplant daarnaast SEO, 3D-modellen en een plantendokter test, lees je in Shopify SEO en 3D-modellen met AR in de praktijk.

Een vertaalde webshop is pas een internationale webshop als iemand in dat land kan afrekenen, tegen een prijs die klopt.

Wil je weten of jouw webshop klaar is voor een tweede of derde land? Dan kijken we samen naar je markten, je feed en je prijsopbouw.

Wat dit voor jouw bedrijf betekent.

Doe de keuzehulp: na drie vragen weet je waar je het beste kunt beginnen.

Zo bouwen we webshops

Verder lezen