Migration des Webshops von Yoast.com von EDD zu WooCommerce
Veröffentlicht: 2018-02-27Bei Yoast optimieren wir jeden Aspekt der Leistung von Websites. Unser Ziel ist es, das Web zu einem besseren Ort zu machen, indem wir Websites benutzerfreundlicher, einfacher zu navigieren, schneller und zuverlässiger machen.
Im September 2017 haben wir unseren Webshop von Easy Digital Downloads (EDD) zu WooCommerce migriert – dort verkaufen wir alle Tools, Produkte und Inhalte, die auf yoast.com verfügbar sind. In diesem Beitrag erkläre ich, warum wir es getan haben, was wir gebaut haben und welche Vorteile es für uns und unsere Benutzer in der Zukunft haben wird. WooCommerce hat uns die technische Grundlage gegeben, auf der wir in den kommenden Jahren aufbauen können.
Warum die Änderung?
Yoast.com erlebt ein unglaubliches Wachstum, das von zwei Hauptkomponenten angetrieben wird – der Popularität unseres Plugins und dem wachsenden Publikum unseres SEO-Blogs. Die Kombination dieser beiden Elemente macht yoast.com jedoch zu einer schwierig zu verwaltenden Website.
Historisch gesehen hat sich die Seite aus einer einfachen WordPress-Installation entwickelt. Easy Digital Downloads (EDD) wurde von Yoast-Gründer Joost de Valk hinzugefügt, um den Verkauf von Premium-Plugins zu erleichtern. Wir haben EDD auch verwendet, um Updates für alle Premium-Installationen auf der Welt bereitzustellen.
Im Laufe der Jahre haben wir immer mehr Optimierungen vorgenommen, um sicherzustellen, dass EDD immer noch unsere Anforderungen erfüllen kann. Es war ein enormer Aufwand, unseren Kunden beispielsweise das Bezahlen in Euro oder Dollar zu ermöglichen. Da wir in Zukunft weitere Währungen hinzufügen wollten, mussten wir eine andere Lösung finden.
Als wir uns andere Optionen ansahen, berücksichtigten wir mehrere Anforderungen:
- In der Lage sein, Käufe in mehreren Währungen zu unterstützen.
- In der Lage sein, wiederkehrende Zahlungen zu unterstützen.
- Die Kosten für die Gebäudeintegration und die Wartbarkeit der Plattform.
- Benutzerkonten unterstützen können.
- Erstellen einer SEO-Plattform.
- Unter Berücksichtigung der Zukunftskompatibilität, da wir eine Seite haben wollen, die auch in 5-10 Jahren noch funktioniert.
Um all das zu erreichen, mussten wir uns einen Plan ausdenken.
Ideenfindung
Im Januar 2017 vereinbarten wir ein Treffen mit unserem Architektenteam: Joost, Omar, Jip und mir. Wir besprachen, was unsere Bedürfnisse waren und wie wir sie am besten erfüllen können.
Unser erstes Fazit war, dass wir nicht von WordPress wegkommen wollten. Obwohl wir jetzt Plugins für andere Plattformen haben, sind wir WordPress-Fans und kümmern uns sehr um seine Mission. WordPress ist dort, wo unsere Wurzeln liegen, und es hat für uns als CMS sehr gut funktioniert.
Warum WooCommerce?
Wir haben dann überlegt, welche E-Commerce-Plattform wir nutzen möchten. Wir haben uns gefragt, was die beste E-Commerce-Lösung für WordPress ist, und sind zu dem Schluss gekommen, dass es WooCommerce ist. Aber wie EDD unterstützte WooCommerce nicht mehrere Währungen. Also brauchten wir eine Lösung.
Ich bin ein großer Fan der Idee, dass alles ein Remix ist. Wir wurden von der Idee inspiriert, für jede Sprache eine andere Website zu verwenden, eine Idee, die vom MultilingualPress-Plugin gut umgesetzt wurde. Also haben wir es neu gemischt: Um zu vermeiden, eine Menge benutzerdefinierten Code schreiben zu müssen, haben wir uns für eine Multisite-Installation entschieden.
Dadurch muss WooCommerce keine unterschiedlichen Währungen verwalten. Auf der Dollar-Site macht WooCommerce alles in Dollar. Auf der Euro-Seite macht WooCommerce alles in Euro. Dies macht es auch relativ einfach, eine neue Währung hinzuzufügen. Wir würden einfach eine neue Website hinzufügen und die Einstellungen kopieren. In Kombination mit MultilingualPress ermöglicht uns dies zukünftig auch die Unterstützung verschiedener Sprachen.
WooCommerce passte aus mehreren Gründen hervorragend zu yoast.com:
- Ein gutes Datenmodell.
- Ein großes Ökosystem.
- Integrierte REST-API und Webhook-Unterstützung.
- Die Möglichkeit, unser Plugin in Kombination mit WooCommerce zu dogfooden.
- WooCommerce löst die eCommerce-Domain. Wir wollten nicht viel Zeit mit der Arbeit an der E-Commerce-Domäne verbringen. SEO ist unsere Expertise, deshalb wollen wir uns auf SEO konzentrieren.
- WooCommerce hat eine lebendige Community, an der wir teilnehmen können.
E-Commerce: SKUs, historische Aufzeichnungen und Rückerstattungen
Ich möchte mich kurz auf den eCommerce-Bereich konzentrieren. Ein Aspekt, der hier zu berücksichtigen ist, ist die SKU. Jedes Produkt hat eine SKU – eine eindeutige Kennung. Eine SKU mag wie etwas Überflüssiges klingen. Warum brauche ich eine SKU, wenn ich eine ID in der Datenbank habe? Aber dann stellen Sie fest, dass jede Finanzabteilung jedes Unternehmens dieses System bereits implementiert hat. SKUs werden nicht automatisch inkrementiert – Sie brauchen eine Möglichkeit, Produkte eindeutig zu verfolgen. Namen sind dafür nicht geeignet. Auf yoast.com ist die SKU also jetzt dieselbe Nummer, die unsere Finanzabteilung verwendet, um Produkte zu verfolgen.
Eine weitere Anforderung bestand darin, eine historische Aufzeichnung jedes Kaufs zu haben. WooCommerce tut dies standardmäßig. Sobald eine Bestellung abgeschlossen ist, ist es soweit. Alle Daten sind unveränderlich. Wenn ein Kunde seinen Namen, seine Adresse oder seine E-Mail-Adresse ändert, werden die neuen Informationen nur für neue Bestellungen verwendet. Für einen Entwickler mag das seltsam klingen, aber es ist tatsächlich eine Stärke. Sie möchten auch nicht, dass Ihre Bank Transaktionen nachträglich ändert – sobald sie erledigt sind, sind sie erledigt. Jede Mutation ist eine neue Transaktion.
Eine historische Aufzeichnung macht den größten Unterschied, wenn es um Rückerstattungen geht. In der alten Konfiguration verschwanden erstattete Bestellungen aus unseren Exporten, was den Umsatz dieses Monats verändern würde. In WooCommerce hat jede Rückerstattung ein eigenes Datum und einen eigenen Betrag. Also einmal im Monat ist es wirklich geschafft.
In WooCommerce hat jede Rückerstattung ein eigenes Datum und einen eigenen Betrag. Also einmal im Monat ist es wirklich geschafft.
Technische Details zur Migration von Yoast.com zu WooCommerce
Migration
Wir haben viele historische Daten, was bedeutete, dass wir eine große Anzahl von Bestellungen migrieren mussten. Wir haben uns für ein Tool namens Pandas entschieden, ein Tool, das für die Verarbeitung großer Datensätze entwickelt wurde und eine gute Wahl ist, um alles auf einmal zu migrieren. Wenn wir eine weitere Migration planen würden, würden wir wahrscheinlich in eine andere Richtung gehen – wir würden historische Daten langsam über Monate formatieren. Das würde die zu migrierende Datenmenge am Tag des eigentlichen Umzugs drastisch reduzieren.
Es gab einen Hauptschmerzpunkt, der den Prozess komplexer machte, als er sein musste. Da alle Daten in einem Metawert in der Datenbank gespeichert wurden, mussten sie deserialisiert werden. Python hat keine effiziente und korrekte Möglichkeit, PHP zu deserialisieren, also haben wir uns letztendlich an PHP gewandt, um diese Daten deserialisieren zu können.
Aggregation der Daten
Sie haben vielleicht bemerkt, dass wir jetzt zwei Standorte haben. Aber wir wollen trotzdem alle Daten an einem Ort im Überblick haben. Dies ist einer der Gründe, warum wir MyYoast entwickelt haben. Alle Bestellungen, die wir erhalten, werden mit MyYoast synchronisiert. Das bedeutet, dass MyYoast alles weiß.
WooCommerce hat ein System, um alle Bestellungen zu synchronisieren: Webhooks. Der größte Nachteil von Webhooks besteht im Allgemeinen darin, dass der Webhook nicht empfangen wird, wenn das Empfangssystem ausfällt. Wenn Sie sich den Code von Webhooks ansehen, finden Sie das folgende Snippet:
„`
/*
* Lassen Sie andere Plugins die Zustellung für einige Nachrichtenwarteschlangen wie rabbit/zeromq abfangen
*/
return apply_filters( 'woocommerce_webhook_should_deliver', $should_deliver, $this, $arg );
„`
Wir haben überlegt, eine Nachrichtenwarteschlange zu verwenden, wie im Kommentar vorgeschlagen, aber wir haben uns für einen einfacheren Ansatz entschieden.
Es gibt ein delayed_job-Projekt der Ruby on Rails-Community. Wir haben einen PHP-Port gefunden, der unseren Anforderungen entsprach. Verzögerter Job tut, was sein Name andeutet: Er plant einen Job, der später ausgeführt werden soll. Das bedeutet, dass ein Job niemals verloren gehen kann. Und wenn der Job fehlschlägt, wird er noch viermal wiederholt. Danach kann der Job zum Debuggen verwendet werden, was schief gelaufen ist. Dies gibt uns ein wirklich robustes Setup.
Wir haben WooCommerce so konfiguriert, dass es versucht, Webhooks an unsere benutzerdefinierte Dummy-URL zu senden: `http://my-yoast-job.url`. Dadurch wird sichergestellt, dass wir diese Anforderungen aus dem Code abfangen können. Wir haben eine "Scheduler"-Klasse, die für die Planung von Jobs verantwortlich ist. Es fängt die Webhook-Anfragen ab und wandelt sie stattdessen in Jobs um.
Wir haben mehrere Klassen, die Jobs bearbeiten, eine für jeden der grundlegenden Bausteine von yoast.com. Die Jobs werden dann von einem Arbeiter im Hintergrund bearbeitet. Dieser Prozess ist schnell, sodass ein Kunde seine Produkte sofort in MyYoast sieht.
WordPress als Anwendung
Wenn Sie The Twelve-Factor App noch nie gelesen haben, würde ich Ihnen wärmstens empfehlen, dies zu tun. Es schlägt ein sehr robustes Framework für die Entwicklung von Webanwendungen vor. Wie lässt sich das in einen WordPress-Kontext übersetzen? Besser als Sie vielleicht denken.
WordPress hat einige einzigartige Funktionen, die die Einrichtung erschweren. Sie können diese jedoch umgehen, um eine robuste WordPress-Installation zu erhalten. Wenn Sie nur eines davon tun, sollte es der Abhängigkeitsfaktor sein. Beginnen Sie mit der Verwendung von Composer! Es ist da und es funktioniert. Rarst hat einen guten Überblick über die Verwendung von Composer für die WordPress-Entwicklung erstellt. Die automatische Aktualisierung ist keine Option für eine komplexe Webanwendung. Sie brauchen also eine andere Lösung, und Composer leistet sehr gute Arbeit.
Leistung
Wir haben begonnen, ohne den Objekt-Cache zu verwenden. Das stellte sich als schlechte Idee heraus. Wenn Sie mit WooCommerce ein beträchtliches Verkaufsvolumen abwickeln, benötigen Sie Objekt-Caching. Ohne sie muss ein Bestellmodell bei jeder Anfrage bezüglich dieser Bestellung vollständig neu instanziiert werden. Es ist sehr aufwendig, da das Bestellmodell auf vielen Seiten benötigt wird. Als absolutes Minimum müssen alle Checkout-Seiten auf die Bestellung zugreifen.
Wir haben auch ein paar Pull-Requests auf WooCommerce selbst erstellt, um die Leistung ohne Caching zu verbessern. Eine davon war eine Modifikation, um die Währungen zwischenzuspeichern. Vor der Änderung wurden alle Währungen jedes Mal übersetzt, wenn ein Codeteil nur eine Währung benötigte. Das ist sehr ineffizient, wenn man bedenkt, dass jeder Shop nur in einer Währung läuft.
Eine Sache, die wir nicht einfach in WooCommerce selbst beheben konnten, war die Suche nach Bestellungen und Abonnements. Dies würde zu einer Abfrage führen, die unsere gesamte Website zum Erliegen bringen könnte – diese Abfrage enthält viele Suchen nach Post-Meta, und diese dauern sehr lange. Wir haben dieses Problem umgangen, indem wir unsere eigene Suchfunktion auf MyYoast aufgebaut haben.
Das Problem der Metasuche wäre auch gelöst, wenn WooCommerce benutzerdefinierte Tabellen verwenden würde, was glücklicherweise bereits auf der technischen Roadmap von WooCommerce steht. Dieses Problem beeinflusste auch unsere Überlegungen zu unserem eigenen Plugin. Können wir die Menge an Metaschlüsseln reduzieren, die Yoast SEO erstellt? Aus diesem Grund haben wir die Erstellung einer benutzerdefinierten Tabelle auch zu unserer eigenen technischen Roadmap hinzugefügt.
Aktuelle Liste der WordPress-Plugins und WooCommerce-Erweiterungen
Um eine umfassende Vorstellung davon zu geben, wo wir gelandet sind, finden Sie hier die Liste der Plugins, die wir derzeit verwenden und die für die Funktion unserer Website als Geschäft relevant sind. Die vollständige Liste enthält 55 aktive Plugins.
- CMB2: Wird zum Hinzufügen weiterer benutzerdefinierter Felder zu Beitragstypen verwendet.
- CMB2-Feldtyp: Wird verwendet, um mehrere Beiträge als Metawert anzuhängen.
- CMB2-Post-Suchfeld: Wird verwendet, um nach einem einzelnen Post zu suchen, der als Metawert angehängt werden kann.
- Google Authenticator: Hinzufügen von 2FA zu unserem Login.
- Google Authenticator, Per User Prompt: Auf diese Weise können alle Yoast-Mitarbeiter 2FA verwenden, Kunden müssen dies jedoch nicht.
- MailChimp für WordPress und MailChimp für WordPress – Premium: Wird verwendet, um Bestellungen mit MailChimp zu verbinden.
- Mitglieder: Zum Verwalten von Berechtigungen für verschiedene Rollen, z. B. Supporttechniker.
- MultilingualPress: Wird verwendet, um die verschiedenen Websites in der Multisite zu verwalten.
- MyYoast Custom Login: Gestaltet den Anmeldebildschirm.
- New Relic Reporting für WordPress: Wir verwenden NewRelic, um unsere Leistung zu verfolgen.
- Poststempel: Für den zuverlässigen Versand von E-Mails.
- Romance Admin Farbschema: Jeder braucht ein bisschen Pink in seinem Leben!
- WooCommerce: Wie Sie sich vorstellen können, um Bestellungen auf yoast.com zu bearbeiten!
- Yoast SEO: WooCommerce: Kompatibilität zwischen WooCommerce und Yoast SEO hinzugefügt.
- Yoast SEO Premium: Wird für Weiterleitungen, Vorschläge für interne Links und mehrere Schlüsselwörter verwendet.
Aktuelle Liste der WordPress-Plugins und WooCommerce-Erweiterungen
- WooCommerce – Country Based Payments: Wird verwendet, um Kunden aus verschiedenen Ländern verschiedene Zahlungsmethoden anzuzeigen.
- WooCommerce AdyenCw: Wird verwendet, um die Adyen-Zahlungsgateways zu WooCommerce hinzuzufügen.
- WooCommerce Coupon Links: Wird verwendet, um Links zu erstellen, die automatisch einen bestimmten Coupon anwenden.
- WooCommerce Dynamic Pricing : Wird verwendet, um Rabatte auf Großeinkäufe anzubieten.
- WooCommerce Email Customizer: Wird verwendet, um die E-Mails zu gestalten, die WooCommerce versendet.
- WooCommerce EU-Umsatzsteuernummer: Wird verwendet, um die Umsatzsteuer-Identifikationsnummer europäischer Kunden zu erfassen und die Nummer mithilfe des VIES-Dienstes zu validieren.
- WooCommerce Give Products: Wird verwendet, um Produkte zu verschenken.
- WooCommerce PayPal Express Checkout Gateway: Wird verwendet, um WooCommerce ein PayPal-Zahlungsgateway mit Unterstützung für WooCommerce-Abonnements hinzuzufügen.
- WooCommerce-Produktbündel: Wird verwendet, um die Bündel in unserem Shop zu erstellen.
- WooCommerce-Abonnements: Wird verwendet, um die verbleibende Zeit für Plugin-Support und -Updates zu verfolgen.
Takeaways und Ergebnisse
Wir haben diese neue Plattform am 29. August 2017 gestartet. In den folgenden Wochen haben wir die Leistung der Website erheblich verbessert. Wir haben alle Ziele erreicht, die wir erreichen wollten. Seit der Migration haben wir auch angefangen, viele andere Dinge zu bauen. Unser Support-Team hat es jetzt viel einfacher, Konten zurückzuerstatten und zu übertragen. Wir haben unsere Yoast Academy auf die Multisite migriert. Und wir haben eine Menge spannender Pläne für 2018, darunter:
- Hinzufügen eines Shops, in dem wir in britischen Pfund verkaufen. Dank unserer bisherigen Entscheidungen und unseres Wechsels zu WooCommerce können wir dies an einem Tag erledigen, es wird fast kein zusätzlicher Code benötigt. Hinzufügen eines Verkaufs-Dashboards für unser Verkaufsteam.
- Hinzufügen eines Verkaufs-Dashboards für unser Verkaufsteam.
- Hinzufügen von Composer-Unterstützung zu unseren Premium-Plugins.
WooCommerce hat Yoast die technische Grundlage gegeben, auf der wir unsere Plattform im nächsten Jahrzehnt aufbauen und verbessern können. Überlegen Sie, einen bestehenden Webshop auf eine andere Plattform zu migrieren? Hast du das schon gemacht? Teilen Sie Ihre Erfahrungen in den Kommentaren.