Naar hoofdinhoud

Reviews verzamelen met Magento 2: van extensie tot werkende koppeling

Door Angelo van Cleef7 min lezen1572 woorden

Gebruik een module die op het event sales_order_save_after luistert en de bestelling in een eigen wachtrij zet, zodat cron het versturen doet en je afrekenproces er nooit op wacht. Hang de uitnodiging aan de orderstatus complete en wacht daarna drie tot vijf dagen. De ingebouwde product reviews van Magento zijn iets anders dan verzamelde klantbeoordelingen: die staan op je eigen domein en jij bepaalt wat er blijft staan.

Magento is het enige grote e-commerce platform waar een slecht gebouwde reviewkoppeling je winkel echt onderuit kan halen. Bij kleinere systemen kost een trage extensie je een seconde; hier kost hij je een orderbevestiging.

Dat komt door de manier waarop Magento events afhandelt. Een observer die iets over het net stuurt, doet dat midden in het opslaan van de order.

Hieronder staat hoe je het wel inricht, wat je moet nakijken voordat je een extensie installeert, en waar het misgaat op Adobe Commerce Cloud.

Wat je gaat leren

  • Welk event je gebruikt en waarom je daar nooit rechtstreeks een verzoek in doet
  • Hoe je de juiste orderstatus kiest en welke wachttijd bij jouw assortiment past
  • Wat je nakijkt bij een extensie uit de Adobe Commerce Marketplace
  • Hoe je rich snippets behoudt en waarom een thema ze zo vaak sloopt

De ingebouwde product reviews in Magento

Magento 2 heeft standaard product reviews. Een klant laat een cijfer per eigenschap achter en een tekst, en jij keurt die goed onder Marketing, User Content, Reviews.

Aanzetten en instellen gaat via Stores, Configuration, Catalog, Catalog, Product Reviews. Daar staat één schakelaar die er echt toe doet: of gasten een review mogen achterlaten of alleen ingelogde klanten.

Zet die op ingelogde klanten. Anders kan iedereen met een browser een review plaatsen op elk product in jouw magento 2-winkel, en dan zegt het cijfer eronder weinig.

Magento kent daarnaast beoordelingen per eigenschap, waarbij je zelf de dimensies bepaalt. Prijs, kwaliteit en waarde staan er standaard in. Dat is nuttig, want het geeft je in je rapportage meer dan één getal per product.

Wat de ingebouwde reviews in Magento niet doen: uitnodigen. Er zit geen enkele functie in om een klant na zijn bestelling te vragen een review achter te laten. Dat is precies het gat waar elke extensie in springt.

Het verschil met verzamelde klantbeoordelingen

Bij de product reviews binnen Magento bepaal jij wat er blijft staan. Dat is geen kwade opzet maar wel een zwakte, en sinds de Europese richtlijn moet je bovendien uitleggen hoe je controleert of een review van een echte klant komt.

Een externe koppeling met een reviewplatform lost dat op, omdat het bedrijf waarover geschreven wordt niet degene is die beslist of de tekst blijft staan.

In de praktijk gebruik je ze naast elkaar. Reviews in Magento helpen bij de keuze tussen twee producten in jouw catalogus. Geverifieerde reviews op een onafhankelijk platform helpen bij de keuze tussen jouw magento webshop en een andere.

Een goede koppeling levert beide vanuit één uitnodiging, zodat je klant één mail krijgt in plaats van twee. Zo helpt het verzamelen van reviews je om vertrouwen op te bouwen zonder je klant te belasten.

Welk event je gebruikt voor de koppeling

Magento werkt met events en observers. Voor het aanleveren van een bestelling is sales_order_save_after het juiste haakje.

Dat event vuurt bij elke wijziging van de order, dus je moet er zelf bij vaststellen of de status werkelijk is veranderd. Dat doe je met getOrigData op het statusveld: is de oude waarde anders dan de nieuwe, dan is er iets gebeurd.

Zonder die controle levert een extensie dezelfde bestelling opnieuw aan zodra iemand in het beheerscherm een notitie toevoegt.

Een observer die een netwerkverzoek doet, doet dat terwijl de order wordt opgeslagen. Bij een trage ontvanger loopt je afrekenproces vast.

De regel is daarom simpel. De observer schrijft de bestelling in een eigen tabel en gaat meteen door. Het versturen gebeurt daarna in een geplande taak.

Waarom je koppeling op cron hoort te draaien

Magento heeft een eigen takenplanner. Een extensie registreert zijn taak in crontab.xml en Magento roept die aan zodra cron draait.

Een taak die elke vijf minuten kijkt of er iets in de wachtrij staat, is voor reviewuitnodigingen ruim genoeg. Niemand merkt het verschil tussen een uitnodiging om 14:00 en een om 14:05.

Controleer wel of cron op je installatie werkelijk loopt. Op veel Magento-installaties staat hij half ingericht, en dan blijft je wachtrij vollopen zonder dat er iets vertrekt. Dat zie je terug in cron_schedule, waar taken op pending blijven staan. Configuratie en probleemoplossing beginnen bij die tabel.

Op Magento Cloud is cron standaard geregeld, en daar zit juist een ander risico: de omgeving heeft cloud ondersteuning nodig van de extensie zelf. Een extensie die naar het bestandssysteem schrijft op een plek die na een deploy weg is, verliest zijn wachtrij bij elke uitrol.

Een reviews extensie voor Magento 2 uitkiezen

De Adobe Marketplace toont per reviews-extensie voor Magento 2 of hij is goedgekeurd door marketplace en met welke versies hij werkt. Dat is je eerste filter en niet je enige.

Vier dingen kijk je zelf na.

Compatibiliteit. Een compatibele plugin noemt de Magento-versies expliciet. Staat er alleen 2.4, dan is dat te vaag; er zit veel verschil tussen 2.4.0 en 2.4.7.

Wachtrij of niet. Zoek in de code naar crontab.xml. Zit die er niet in, dan verstuurt de extensie waarschijnlijk tijdens het opslaan van de order.

Wat er wordt verstuurd. Voor een reviewuitnodiging heb je genoeg aan het e-mailadres, de voornaam, het ordernummer en de artikelnummers. Een extensie die ook het adres en het betaalde bedrag meestuurt, deelt gegevens die niemand nodig heeft.

Herhaalpogingen. Een verzoek dat mislukt met een 500 moet opnieuw; een verzoek dat mislukt met een 400 nooit. Een extensie zonder dat onderscheid blijft eeuwig dezelfde kapotte bestelling proberen.

Reviews in Magento tonen met een widget

Verzamelde reviews wil je terug in je winkel zien. Magento heeft daar widgets voor, die je via Content, Widgets op een pagina of in een blok plaatst.

De meeste reviewplatforms leveren daarnaast een stukje JavaScript dat je in een CMS-blok zet. Aanpasbare widgets zijn daarbij het vermelden waard: je wilt de opmaak kunnen laten aansluiten op je thema, anders valt het blok op als een vreemde eend.

Drie plekken zijn de moeite waard. Op de productpagina bij de reviews van dat artikel, in de footer met je gemiddelde, en op de checkout waar de twijfel het grootst is.

Wat je niet wilt is één pagina met alle reviews onder elkaar waar verder niets naar linkt. Die pagina bezoekt niemand op het moment dat het uitmaakt.

Rich snippets, seo en de sterren in Google

Magento zet zelf structured data op de productpagina, inclusief het gemiddelde cijfer en het aantal reviews. Dat is de bron voor de sterren die Google in de zoekresultaten kan tonen.

Twee dingen slopen dat. Een thema dat het productsjabloon overschrijft laat de markup soms weg, en een module die zijn eigen structured data toevoegt zonder de bestaande te verwijderen levert twee keer aggregateRating op. Google negeert dan meestal allebei.

Controleer het met de test voor rich results van Google, en doe dat opnieuw na elke themawijziging. Voor seo is dit het goedkoopste onderhoud dat er is.

Google reviews zijn hier iets anders dan je product reviews. Die horen bij je bedrijfsprofiel en verschijnen in Maps en in het lokale paneel, niet bij je producten in de zoekresultaten.

De api voor wie het zelf bouwt

Integreer Magento 2 liever zelf, dan heb je twee wegen. De REST-api geeft je orders via GET /V1/orders met een zoekfilter op status en datum. Magento's GraphQL api is bedoeld voor de storefront en minder geschikt voor dit werk.

Een eigen integratie met Magento heeft één voordeel boven een module: je bepaalt zelf wat er wordt aangeleverd en wanneer. Het nadeel is dat je zelf de wachtrij, de herhaalpogingen en de foutafhandeling moet schrijven, en dat is meer werk dan het lijkt.

Voor de meeste webwinkels is een kant-en-klare module de betere keuze. Bouw zelf wanneer je al een middleware hebt draaien waar de orders toch al doorheen komen.

Kernpunten

  • Gebruik sales_order_save_after met een controle op getOrigData, anders lever je dezelfde order steeds opnieuw aan
  • Schrijf in een wachtrij en laat cron het versturen doen, zodat het afrekenen nooit wacht
  • Kies de orderstatus complete en wacht daarna drie tot vijf dagen
  • Kijk bij een extensie naar compatibiliteit, cron, wat er verstuurd wordt en de herhaalpogingen
  • Controleer je rich snippets na elke themawijziging, want daar sneuvelen ze

Je volgende stappen

Kijk eerst in cron_schedule of je cron werkelijk draait. Staat daar een rij taken op pending, dan heeft elke koppeling die je installeert hetzelfde probleem en is dat het eerste dat je oplost.

Kies daarna een module die op de marktplaats staat en zoek in de broncode naar crontab.xml. Dat ene bestand vertelt je binnen dertig seconden of de bouwer heeft nagedacht over waar het versturen thuishoort.

Veelgestelde vragen

Werkt dit ook op Magento Open Source?

Ja. Alles hierboven geldt voor Magento Open Source en voor Adobe Commerce. Op Adobe Commerce Cloud let je extra op of de extensie cloud ondersteuning noemt, want daar overleeft een wachtrij in het bestandssysteem geen deploy.

Kan ik reviews verzamelen zonder extensie?

Ja, via de REST-api of door bestellingen uit een export aan te leveren. Dat werkt en het vraagt onderhoud, want je bouwt zelf de wachtrij en de foutafhandeling.

Verzamel ik reviews over mijn webshop of over mijn producten?

Allebei, en het liefst met één uitnodiging. De review over je winkel gaat over bezorging en service, die over het product over het artikel zelf. Ze beantwoorden verschillende vragen van een koper.

Wat doe ik met bestellingen van voor de koppeling?

Die lever je niet met terugwerkende kracht aan. Een uitnodiging over een aankoop van vier maanden geleden levert weinig op en irriteert. Begin bij de eerstvolgende bestelling.

Bronnen