Migration de la boutique en ligne de Yoast.com d'EDD vers WooCommerce

Publié: 2018-02-27

Chez Yoast, nous optimisons chaque aspect des performances des sites Web. Notre objectif est de rendre le Web meilleur en rendant les sites Web plus utilisables, plus faciles à naviguer, plus rapides et plus fiables.

En septembre 2017, nous avons migré notre boutique en ligne d'Easy Digital Downloads (EDD) vers WooCommerce - c'est là que nous vendons tous les outils, produits et contenus disponibles sur yoast.com. Dans cet article, j'expliquerai pourquoi nous l'avons fait, ce que nous avons construit et quels en seront les avantages pour nous et pour nos utilisateurs à l'avenir. WooCommerce nous a fourni la base technique sur laquelle nous appuyer pour les années à venir.

Pourquoi le changement ?

Yoast.com connaît une croissance incroyable tirée par deux éléments principaux : la popularité de notre plugin et l'audience croissante de notre blog SEO. Cependant, la combinaison de ces deux éléments fait de yoast.com un site Web difficile à gérer.

Historiquement, le site a évolué à partir d'une simple installation de WordPress. Easy Digital Downloads (EDD) a été ajouté par le fondateur de Yoast, Joost de Valk, pour faciliter la vente de plugins premium. Nous avons également utilisé EDD pour fournir des mises à jour pour toutes les installations Premium dans le monde.

Au fil des ans, nous avons apporté de plus en plus de modifications pour nous assurer qu'EDD puisse toujours répondre à nos besoins. Permettre à nos clients de payer en euros ou en dollars, par exemple, a demandé un énorme effort. Puisque nous voulions ajouter d'autres devises à l'avenir, nous devions trouver une solution différente.

Lorsque nous avons examiné d'autres options, nous avons considéré plusieurs besoins :

  • Pouvoir prendre en charge les achats multidevises.
  • Être capable de supporter des paiements récurrents.
  • Le coût de l'intégration du bâtiment et la maintenabilité de la plate-forme.
  • Être capable de prendre en charge les comptes d'utilisateurs.
  • Création d'une plateforme SEO.
  • En tenant compte de la compatibilité future, puisque nous voulons avoir un site qui fonctionnera encore dans 5 à 10 ans.

Pour réaliser tout ce qui précède, nous avons dû élaborer un plan.

Idéation

En janvier 2017, nous avons programmé une réunion avec notre équipe d'architectes : Joost, Omar, Jip et moi-même. Nous avons discuté de nos besoins et de la meilleure façon d'y répondre.

Notre première conclusion était que nous ne voulions pas nous éloigner de WordPress. Même si nous avons maintenant des plugins pour d'autres plateformes, nous sommes des fans de WordPress et nous nous soucions profondément de sa mission. WordPress est là où se trouvent nos racines et cela a très bien fonctionné pour nous en tant que CMS.

Pourquoi WooCommerce ?

Nous avons ensuite réfléchi à la plateforme de commerce électronique que nous souhaitions utiliser. Nous nous sommes demandé quelle était la meilleure solution de commerce électronique pour WordPress et sommes arrivés à la conclusion qu'il s'agissait de WooCommerce. Mais, comme EDD, WooCommerce ne prenait pas en charge plusieurs devises. Il nous fallait donc une solution.

Je suis un grand fan de l'idée que tout est un remix. Nous avons été inspirés par l'idée d'utiliser un site différent pour chaque langue, une idée qui a été bien exécutée par le plugin MultilingualPress. Nous l'avons donc remixé : pour éviter d'avoir à écrire une tonne de code personnalisé, nous avons décidé d'utiliser une installation multisite.

En conséquence, WooCommerce n'a pas besoin de gérer différentes devises. Sur le site en dollars, WooCommerce fait tout en dollars. Sur le site en euros, WooCommerce fait tout en euros. Cela rend également relativement facile l'ajout d'une nouvelle devise. Nous ajouterions simplement un nouveau site et copierions les paramètres. En combinaison avec MultilingualPress, cela nous permettra également à l'avenir de prendre en charge différentes langues.

yoast.com USD et UE
yoast.com offre aux utilisateurs le choix entre le dollar américain et l'euro, via un commutateur.

WooCommerce a fini par convenir parfaitement à yoast.com pour plusieurs raisons :

  • Un bon modèle de données.
  • Un vaste écosystème.
  • API REST intégrée et prise en charge de Webhook.
  • La possibilité de dogfooder notre plugin en combinaison avec WooCommerce.
  • WooCommerce résout le domaine du commerce électronique. Nous ne voulions pas passer beaucoup de temps à travailler sur le domaine du commerce électronique. Le référencement est notre expertise, nous voulons donc nous concentrer sur le référencement.
  • WooCommerce a une communauté dynamique à laquelle nous pouvons participer.

Commerce électronique : SKU, historiques et remboursements

Je veux me concentrer un instant sur le domaine du commerce électronique. Un aspect à considérer ici est le SKU. Chaque produit a un SKU - un identifiant unique. Un SKU peut sembler quelque chose de superflu. Pourquoi ai-je besoin d'un SKU alors que j'ai un ID dans la base de données ? Mais ensuite, vous vous rendez compte que chaque service financier de chaque entreprise a déjà ce système en place. Les SKU ne sont pas auto-incrémentés - vous avez besoin d'un moyen de suivre les produits de manière non ambiguë. Les noms ne conviennent pas à cela. Ainsi, sur yoast.com, le SKU est désormais le même numéro que notre service financier utilise pour suivre les produits.

Une autre exigence était d'avoir un historique de chaque achat. WooCommerce le fait par défaut. Une fois la commande terminée, c'est tout. Toutes les données sont immuables. Si un client change de nom, d'adresse ou d'e-mail, les nouvelles informations ne sont utilisées que pour les nouvelles commandes. Pour un développeur, cela peut sembler étrange, mais c'est en fait une force. Vous ne voudriez pas non plus que votre banque modifie les transactions après coup - une fois qu'elles sont terminées, elles sont terminées. Toute mutation est une nouvelle transaction.

Avoir un historique fait la plus grande différence en matière de remboursement. Dans l'ancienne configuration, les commandes remboursées disparaissaient de nos exportations, ce qui modifiait les revenus du mois. Dans WooCommerce, chaque remboursement a sa propre date et son propre montant. Donc une fois par mois c'est fait, c'est vraiment fait.

Dans WooCommerce, chaque remboursement a sa propre date et son propre montant. Donc une fois par mois c'est fait, c'est vraiment fait.

Détails techniques de la migration de Yoast.com vers WooCommerce

Migration

Nous avons beaucoup de données historiques, ce qui signifie que nous avons dû migrer un grand nombre de commandes. Nous avons choisi un outil appelé pandas, un outil conçu pour gérer de grands ensembles de données, et un bon choix pour tout migrer en une seule fois. Si nous prévoyions une autre migration, nous irions probablement dans une direction différente - nous formaterions lentement les données historiques au fil des mois. Cela réduirait considérablement la quantité de données à migrer le jour même du déménagement.

Il y avait un point douloureux principal qui rendait le processus plus complexe qu'il ne devait l'être. Étant donné que toutes les données étaient enregistrées dans une méta-valeur de la base de données, elles devaient être désérialisées. Python n'a pas de moyen efficace et correct de désérialiser PHP, nous avons donc fini par nous adresser à PHP pour pouvoir désérialiser ces données.

Agréger les données

Vous avez peut-être remarqué que nous avons maintenant deux sites. Mais nous voulons toujours avoir une vue d'ensemble de toutes les données en un seul endroit. C'est l'une des raisons pour lesquelles nous construisons MyYoast. Toutes les commandes que nous recevons sont synchronisées avec MyYoast. Cela signifie que MyYoast sait tout.

WooCommerce dispose d'un système pour synchroniser toutes les commandes : les webhooks. Le plus gros inconvénient des webhooks, en général, est que si le système de réception est en panne, le webhook n'est pas reçu. Lorsque vous regardez le code des webhooks, vous trouvez l'extrait suivant :

"`
/*
* Laisser d'autres plugins intercepter la livraison pour certaines files d'attente de messages comme rabbit/zeromq
*/
return apply_filters( 'woocommerce_webhook_should_deliver', $should_deliver, $this, $arg );
"`

Nous avons envisagé d'utiliser une file d'attente de messages comme suggéré dans le commentaire, mais nous avons opté pour une approche plus simple.

Il existe un projet delay_job de la communauté Ruby on Rails. Nous avons trouvé un portage PHP qui correspondait à nos besoins. Le travail différé fait ce que son nom l'indique : il planifie un travail à exécuter plus tard. Cela signifie qu'un emploi ne peut jamais être perdu. Et si le travail échoue, il sera réessayé quatre fois de plus. Après cela, le travail peut être utilisé pour déboguer ce qui n'a pas fonctionné. Cela nous donne une configuration vraiment robuste.

WebhookJobs

Nous avons configuré WooCommerce pour essayer d'envoyer des webhooks à notre URL factice personnalisée : `http://my-yoast-job.url`. Cela garantit que nous pouvons intercepter ces requêtes à partir du code. Nous avons une classe `Scheduler` qui est responsable de la planification des tâches. Il intercepte les demandes de webhook et les transforme en tâches à la place.

Classes d'emploi

Nous avons plusieurs classes qui gèrent les tâches, une pour chacun des éléments fondamentaux de yoast.com. Les travaux sont ensuite gérés par un travailleur en arrière-plan. Ce processus est rapide, de sorte qu'un client verra instantanément ses produits dans MyYoast.

WordPress en tant qu'application

Si vous n'avez jamais lu The Twelve-Factor App , je vous recommande fortement de le faire. Il suggère un cadre très robuste pour le développement d'applications Web. Comment cela se traduit-il dans un contexte WordPress ? Mieux que vous ne le pensez.

WordPress a quelques fonctionnalités uniques qui le rendent plus difficile à configurer. Mais vous pouvez les contourner pour obtenir une installation WordPress robuste. Si vous n'en faites qu'un, ce devrait être le facteur dépendances. Commencez à utiliser Composer ! C'est ici, et ça marche. Rarst a créé un bon aperçu de la façon d'utiliser Composer pour le développement WordPress. La mise à jour automatique n'est pas une option pour une application Web complexe. Vous avez donc besoin d'une solution différente, et Composer fait un très bon travail.

Performance

Nous avons commencé sans utiliser le cache d'objets. Cela s'est avéré être une mauvaise idée. Si vous gérez un volume de ventes substantiel à l'aide de WooCommerce, vous avez besoin d'une mise en cache d'objets. Sans cela, un modèle de commande doit être complètement réinstancié à chaque requête concernant cette commande. C'est très coûteux, car le modèle de commande est requis sur de nombreuses pages. Au minimum, toutes les pages de paiement doivent accéder à la commande.

Nous avons également créé quelques demandes d'extraction sur WooCommerce lui-même pour améliorer les performances sans mise en cache. L'un d'eux était une modification pour mettre en cache les devises. Avant la modification, toutes les devises étaient traduites chaque fois qu'un morceau de code n'avait besoin que d'une seule devise. C'est très inefficace étant donné que chaque magasin ne fonctionne que dans une seule devise.

Une chose que nous ne pouvions pas simplement résoudre dans WooCommerce lui-même était la recherche de commandes et d'abonnements. Cela entraînerait une requête qui pourrait supprimer l'ensemble de notre site Web - cette requête contient de nombreuses recherches de post-méta, et celles-ci prennent beaucoup de temps. Nous avons contourné ce problème en créant notre propre fonctionnalité de recherche au-dessus de MyYoast.

Le problème de méta-recherche serait également résolu si WooCommerce utilisait des tables personnalisées, ce qui est heureusement déjà sur la feuille de route technique de WooCommerce. Ce problème a également éclairé notre réflexion sur notre propre plugin. Pouvons-nous réduire la quantité de méta-clés créées par Yoast SEO ? Par conséquent, nous avons également ajouté la création d'un tableau personnalisé à notre propre feuille de route technique.

Liste actuelle des plugins WordPress et des extensions WooCommerce

Pour donner une idée complète de l'endroit où nous avons atterri, voici la liste des plugins que nous utilisons actuellement et qui sont pertinents pour la fonction de notre site en tant que magasin. La liste complète contient 55 plugins actifs.

  • CMB2 : Utilisé pour ajouter plus de champs personnalisés aux types de publication.
  • Type de champ CMB2 : utilisé pour joindre plusieurs publications en tant que méta-valeur.
  • Champ de recherche de publication CMB2 : utilisé pour rechercher une publication unique à joindre en tant que méta-valeur.
  • Google Authenticator : Ajout de 2FA à notre connexion.
  • Google Authenticator, Per User Prompt : De cette façon, tous les employés de Yoast peuvent utiliser 2FA, mais les clients n'ont pas à le faire.
  • MailChimp pour WordPress et MailChimp pour WordPress – Premium : utilisé pour connecter les commandes à MailChimp.
  • Membres : pour gérer les autorisations des différents rôles, tels que les ingénieurs de support.
  • MultilingualPress : Permet de gérer les différents sites du multisite.
  • Connexion personnalisée MyYoast : stylise l'écran de connexion.
  • New Relic Reporting pour WordPress : Nous utilisons NewRelic pour suivre nos performances.
  • Cachet de la poste : pour envoyer des e-mails de manière fiable.
  • Schéma de couleurs Romance Admin : tout le monde a besoin d'un peu de rose dans sa vie !
  • WooCommerce : Comme vous pouvez le deviner, pour traiter les commandes sur yoast.com !
  • Yoast SEO : WooCommerce : Ajout de la compatibilité entre WooCommerce et Yoast SEO.
  • Yoast SEO Premium : utilisé pour les redirections, les suggestions de liens internes et plusieurs mots clés.

Liste actuelle des plugins WordPress et des extensions WooCommerce

  • WooCommerce - Paiements basés sur le pays : Utilisé pour montrer différentes méthodes de paiement aux clients de différents pays.
  • WooCommerce AdyenCw : utilisé pour ajouter les passerelles de paiement Adyen à WooCommerce.
  • Liens de coupon WooCommerce : utilisés pour créer des liens qui appliquent automatiquement un certain coupon.
  • Tarification dynamique WooCommerce : Utilisé pour offrir des remises sur les achats groupés.
  • WooCommerce Email Customizer : utilisé pour styliser les e-mails envoyés par WooCommerce.
  • WooCommerce EU VAT Number : utilisé pour collecter le numéro de TVA des clients européens et valider le numéro à l'aide du service VIES.
  • WooCommerce Give Products : Utilisé pour donner des produits.
  • WooCommerce PayPal Express Checkout Gateway : utilisé pour ajouter une passerelle de paiement PayPal à WooCommerce avec prise en charge des abonnements WooCommerce.
  • Bundles de produits WooCommerce : utilisés pour créer les bundles dans notre boutique.
  • Abonnements WooCommerce : utilisés pour suivre le temps restant sur le support et les mises à jour des plugins.
Yoast.com utilise désormais WooCommerce
Jetez un coup d'œil par vous-même sur yoast.com, désormais propulsé par WooCommerce.

Plats à emporter et résultats

Nous avons lancé cette nouvelle plateforme le 29 août 2017. Dans les semaines qui ont suivi nous avons grandement amélioré les performances du site. Nous avons atteint tous les objectifs que nous voulions atteindre. Depuis la migration, nous avons également commencé à construire beaucoup d'autres choses. Notre équipe d'assistance a maintenant beaucoup plus de facilité à rembourser et à transférer des comptes. Nous avons migré notre académie Yoast vers le multisite. Et nous avons un tas de projets passionnants pour 2018, notamment :

  • Ajout d'une boutique où nous vendons en livres sterling. Grâce à nos choix passés et à notre passage à WooCommerce, nous pouvons le faire en une journée, cela ne nécessitera quasiment aucun code supplémentaire. Ajout d'un tableau de bord des ventes pour notre équipe de vente.
  • Ajout d'un tableau de bord des ventes pour notre équipe de vente.
  • Ajout de la prise en charge de Composer à nos plugins premium.

WooCommerce a donné à Yoast la base technique sur laquelle construire et améliorer notre plate-forme au cours de la prochaine décennie. Envisagez-vous de migrer une boutique en ligne existante vers une autre plateforme ? Avez-vous déjà fait cela? Partagez votre expérience dans les commentaires.