Op 4 september kwam er een vraag binnen voor mijn eigen winkel. NeverLeafs verkoopt kunstplanten, en het idee was een krasvak in een zijtab: wie krast krijgt bij aankoop van een kunstplant een Agave van 40 cm gratis. Het voorbeeld lag er al, techweise.com doet zoiets.
De eerste reflex bij zo’n vraag is de app store. Daar staan tientallen krasspellen en draaiende wielen in, ze zijn in tien minuten geïnstalleerd, en ze doen visueel precies wat je vraagt. Tot je erbij zegt dat je ook wilt weten of het iets oplevert. Dan valt die hele categorie af, en dat heeft alles te maken met de manier waarop Shopify sinds dit voorjaar test.
Wat Rollouts is
Shopify kondigde Rollouts aan op 31 maart 2026. Het zit in de admin onder Markten en het doet twee dingen die los van elkaar staan.
- Een launch. Een set wijzigingen aan je thema, je checkout of je accountpagina’s die je inplant op een datum, eventueel met een terugvaldatum erachter. Handig voor een actieweek die vanzelf begint en vanzelf stopt.
- Een experiment. Dezelfde set wijzigingen, maar dan naast je huidige versie. Shopify verdeelt de bezoekers over een control en een treatment, houdt iedere bezoeker in dezelfde groep, en meet beide kanten.
Voor een experiment moet je winkel op Grow of hoger zitten. Plannen en gefaseerd uitrollen kan vanaf Basic. Wil je een proef beperken tot een specifieke markt, dan heb je Advanced of Plus nodig. Daar kom ik verderop op terug, want dat is precies waar ik tegenaan liep.
De verdeling gebeurt aan de kant van Shopify, voordat de pagina bij de bezoeker aankomt. Dat is het verschil met de meeste testtools: er is geen script dat na het laden de pagina nog omgooit, dus er is ook geen moment waarop iemand eerst de oude versie ziet.
Waarom Flow afvalt, en een app ook
Shopify Flow was het eerste dat werd geopperd. Flow automatiseert de achterkant: een order krijgt een tag, een klant komt in een segment, een voorraadmelding gaat de deur uit. Het toont geen enkele bezoeker iets en het verdeelt geen verkeer. Voor een krasvak in beeld doet het niets.
Een app uit de app store is een subtieler probleem, want die doet visueel wel wat je wilt. Alleen zet een rollout thema tegen thema, en een app hangt niet aan een thema. Hij laadt aan allebei de kanten. Je control ziet dan dezelfde krastab als je treatment, het verschil tussen de twee groepen is nul, en de uitslag die je na drie maanden afleest gaat over ruis.
De actie moest dus een sectie in het thema worden. 566 regels Liquid, zeventien instellingen, standaard uit.
Wat er in die sectie zit

De tab staat verticaal tegen de rechterrand. Eerst stond hij als pil linksonder, waar de keuzehulp al zit, en op een telefoon namen die twee samen het onderste deel van het scherm in beslag. Een kruisje verbergt de tab voor de rest van het bezoek; bij een volgend bezoek staat hij er weer.
Het krasvlak zelf is een canvas met een drempel eronder. Is er genoeg weggekrast, dan klapt het cadeau open. Krassen kan alleen met een muis of een vinger, dus staat er een gewone knop naast die hetzelfde doet. Zonder die knop komt niemand die met een toetsenbord navigeert ooit bij zijn cadeau.

Achter dat cadeau zit een automatische korting van het type koop X krijg Y: koopt iemand iets uit de collectie kunstplanten, dan gaat de Agave er gratis bij, maximaal een per bestelling. Twee dingen waren daarbij niet vanzelfsprekend. De korting legt de plant niet zelf in de winkelwagen, dus dat doet de sectie. Zonder die stap krast de klant, wint, en krijgt niets. Andersom mag het cadeau er niet in liggen als de winkelwagen verder leeg is, want dan grijpt de korting niet en betaalt hij de plant gewoon.
Verder een voorraadgrens. Staat de Agave op tien stuks of minder, dan rendert de hele sectie niet meer: geen tab, niets te winnen. Dat werkt alleen als de variant voorraadbeheer aan heeft staan.
De markt zit in het thema, niet in de proef
De actie moest alleen op de Nederlandse winkel draaien, want de teksten bestaan niet in het Engels of het Frans. In het rolloutscherm staat naast het thema een chipje met de tekst All dat eruitziet alsof je daar een markt kiest. Het opent niets, want targeting per markt begint bij Advanced. De afbakening zit daarom in de sectie zelf, op taal en host, met een uitzondering voor de themabewerker zodat hij zichtbaar blijft tijdens het bouwen.
{% if request.design_mode
or (request.locale.iso_code == 'nl'
and request.host contains 'neverleafs.nl') %}
De proef zelf
De rollout draait sinds 4 september 16:30 en valt op 3 december 15:30 terug naar nul. Control is een kopie van het live thema die Shopify bij de start zelf aanmaakt, treatment is het thema met de sectie erin, allebei op 50 procent, en alle bezoekers doen mee. Zet je dat laatste percentage lager, dan eist Shopify een begin- en einddatum.

Dat is wat er na een dag staat: 21 sessies tegen 27, nul conversies aan beide kanten en een melding dat er nog te weinig data is. Precies wat je mag verwachten. De winkel trekt ongeveer 2.476 bezoekers per maand, dus per groep zijn dat er zo’n 1.240. Over de looptijd van 89 dagen kom ik op ruwweg 3.700 per kant. Daarmee zie je een groot verschil en zie je een klein verschil niet, en dat is de eerlijke verwachting die bij deze test hoort.
De maatstaven liggen vast en zijn niet aan te passen: sessies, conversiepercentage, bereikte checkout, toevoegingen aan de winkelwagen en het bouncepercentage. Bij conversie en bereikte checkout tekent Shopify er een bandbreedte bij, zodat je ziet hoe zeker een verschil is voordat je erop gaat sturen.
Zes dingen die tijd of data kosten
Twee daarvan hebben me een avond gekost. De eerste is die pushvlag. shopify theme push --only "sections/nlf-kras-en-win.liquid" leest als “zet alleen dit bestand erop”. Wat er gebeurt is dat alleen dat bestand omhoog gaat en dat de opruimronde daarna gewoon doorloopt: alles wat niet lokaal staat verdwijnt van het thema. Mijn eerste themakopie hield een sectie over, zonder templates en zonder layout, en de preview meldde dat theme.liquid ontbrak. De live winkel bleef ongemoeid, maar de kopie kon opnieuw. --nodelete staat sindsdien in de instructies van die repo.
De tweede is de korting. Die geldt winkelbreed, dus ook aan de controlekant. Wie zelf een Agave van 40 cm plus een andere plant in zijn mandje legt krijgt hem gratis, zonder ooit gekrast te hebben. Ik heb dat bewust laten staan: de alternatieven waren een kortingscode per bezoeker of een aparte verborgen collectie, en die kosten meer dan ze hier waard zijn. Het betekent wel dat de treatment een klein voordeel kan hebben dat niet uit het krassen komt. Zoiets hoor je op te schrijven voordat je de uitslag leest.
Daar kwam er later nog een bij die niet in het lijstje past. Zolang de proef loopt serveert deze winkel drie thema’s tegelijk: het hoofdthema, de control-kopie en de treatment. Die laatste staat in de themalijst als niet-gepubliceerd, krijgt wel verkeer, en de Shopify CLI ziet hem helemaal niet. Elke wijziging aan het thema moet dus naar alle drie, via de Admin API. Het kostte een paar uur voordat ik doorhad waarom pushes geen effect leken te hebben.
Wat het je oplevert
- Geen extra script en geen extra app in je winkel. De splitsing gebeurt voordat de pagina wordt opgebouwd, dus geen flikkering en geen tragere pagina.
- Een bezoeker blijft in dezelfde groep, ook als hij morgen terugkomt.
- Alles wat je in de rollout niet aanraakt loopt mee met je gepubliceerde thema. Pas je tijdens de proef je homepage aan, dan zien beide groepen die aanpassing en blijft het verschil tussen de groepen het ding dat je test.
- Terugdraaien is een datum in plaats van een handeling. Doet de variant het slechter, dan valt hij vanzelf weg.
- De meting staat in de admin, naast je gewone cijfers, zonder tweede tool die je moet vertrouwen.
De grenzen horen erbij. Je test thema tegen thema, dus voor een losse knop tuig je alsnog een tweede thema op. De maatstaven liggen vast, dus een eigen doel meten kan niet. Segmenteren per markt begint bij Advanced. Vertaalde teksten binnen een rollout werk je alleen via de Admin API bij, niet met een csv of de gewone vertaalknop. En zolang een rollout niet is afgerond kun je geen nieuw thema publiceren. Archiveren kan wel, alleen wist dat de aanpassingen van die rollout definitief en terugzetten kan daarna niet meer.
Wanneer ik dit zou inzetten
Bij verkeer als dat van NeverLeafs is een rollout geschikt voor ingrepen waarvan je een duidelijk effect verwacht: een actie erbij, een andere homepage, een ander model voor de productpagina. Voor knopkleuren en microcopy heb je meer bezoekers nodig dan de meeste Nederlandse webshops halen, en dan is een rollout vooral een manier om jezelf drie maanden bezig te houden met een uitslag die niets zegt.
Wat ik wel altijd zou doen, ook bij weinig verkeer: zo’n actie in het thema bouwen in plaats van in een app. Ook als je nooit gaat testen. Je houdt de controle over hoe hij eruitziet, hij laadt mee met de rest van de pagina, en op de dag dat je hem toch ergens tegen af wilt zetten kan dat gewoon.
Op 3 december valt de proef terug naar nul en ligt er een uitslag. Die zet ik hier neer, welke kant hij ook op valt.
