Migrazione del webshop di Yoast.com da EDD a WooCommerce

Pubblicato: 2018-02-27

In Yoast ottimizziamo ogni aspetto delle prestazioni dei siti web. Il nostro obiettivo è rendere il Web un posto migliore rendendo i siti Web più utilizzabili, più facili da navigare, più veloci e più affidabili.

A settembre 2017 abbiamo migrato il nostro negozio online da Easy Digital Downloads (EDD) a WooCommerce: è qui che vendiamo tutti gli strumenti, i prodotti e i contenuti disponibili su yoast.com. In questo post spiegherò perché l'abbiamo fatto, cosa abbiamo costruito e quali saranno i vantaggi per noi e per i nostri utenti in futuro. WooCommerce ci ha fornito le basi tecniche su cui costruire per gli anni a venire.

Perché il cambiamento?

Yoast.com sta vivendo un'incredibile crescita guidata da due componenti principali: la popolarità del nostro plug-in e il pubblico in espansione del nostro blog SEO. La combinazione di questi due elementi, tuttavia, rende yoast.com un sito web difficile da gestire.

Storicamente, il sito si è evoluto da una semplice installazione di WordPress. Easy Digital Downloads (EDD) è stato aggiunto dal fondatore di Yoast Joost de Valk per facilitare la vendita di plugin premium. Abbiamo anche utilizzato EDD per fornire aggiornamenti per tutte le installazioni Premium nel mondo.

Nel corso degli anni abbiamo apportato sempre più modifiche per assicurarci che EDD potesse ancora soddisfare le nostre esigenze. Consentire ai nostri clienti di pagare in euro o dollari, ad esempio, è stato uno sforzo enorme. Dal momento che volevamo aggiungere altre valute in futuro, dovevamo trovare una soluzione diversa.

Quando abbiamo esaminato altre opzioni, abbiamo considerato diverse esigenze:

  • Essere in grado di supportare gli acquisti multivaluta.
  • Essere in grado di supportare pagamenti ricorrenti.
  • Il costo dell'integrazione degli edifici e la manutenibilità della piattaforma.
  • Essere in grado di supportare gli account utente.
  • Creazione di una piattaforma SEO.
  • Tenendo conto della compatibilità futura, poiché vogliamo avere un sito che funzioni ancora tra 5-10 anni.

Per ottenere tutto quanto sopra, dovevamo escogitare un piano.

Ideazione

A gennaio 2017 abbiamo programmato un incontro con il nostro team di architetti: Joost, Omar, Jip e il sottoscritto. Abbiamo discusso di quali fossero le nostre esigenze e di come potremmo soddisfarle al meglio.

La nostra prima conclusione è stata che non volevamo allontanarci da WordPress. Anche se ora abbiamo plug-in per altre piattaforme, siamo fan di WordPress e ci teniamo profondamente alla sua missione. WordPress è dove sono le nostre radici e ha funzionato molto bene per noi come CMS.

Perché WooCommerce?

Abbiamo quindi considerato quale piattaforma di eCommerce volevamo utilizzare. Ci siamo chiesti quale sia la migliore soluzione di eCommerce per WordPress e siamo giunti alla conclusione che è WooCommerce. Ma, come EDD, WooCommerce non supportava più valute. Quindi avevamo bisogno di una soluzione.

Sono un grande fan dell'idea che tutto sia un remix. Ci siamo ispirati all'idea di utilizzare un sito diverso per ogni lingua, un'idea che è stata ben eseguita dal plugin MultilingualPress. Quindi l'abbiamo remixato: per evitare di dover scrivere una tonnellata di codice personalizzato, abbiamo deciso di utilizzare un'installazione multisito.

Di conseguenza, WooCommerce non ha bisogno di gestire valute diverse. Sul sito del dollaro, WooCommerce fa tutto in dollari. Sul sito euro, WooCommerce fa tutto in euro. Questo rende anche relativamente facile aggiungere una nuova valuta. Dovremmo semplicemente aggiungere un nuovo sito e copiare le impostazioni. In combinazione con MultilingualPress, in futuro questo ci consentirà anche di supportare lingue diverse.

yoast.com USD e UE
yoast.com offre agli utenti una scelta tra dollari USA ed euro, tramite switcher.

WooCommerce ha finito per essere un'ottima soluzione per yoast.com per diversi motivi:

  • Un buon modello di dati.
  • Un grande ecosistema.
  • API REST e supporto webhook integrati.
  • La possibilità di dogfood il nostro plugin in combinazione con WooCommerce.
  • WooCommerce risolve il dominio eCommerce. Non volevamo dedicare molto tempo a lavorare sul dominio eCommerce. La SEO è la nostra esperienza, quindi vogliamo concentrarci sulla SEO.
  • WooCommerce ha una comunità vivace a cui possiamo partecipare.

eCommerce: SKU, record storici e rimborsi

Voglio concentrarmi un momento sul dominio eCommerce. Un aspetto da considerare qui è lo SKU. Ogni prodotto ha uno SKU, un identificatore univoco. Uno SKU potrebbe suonare come qualcosa di superfluo. Perché ho bisogno di uno SKU quando ho un ID nel database? Ma poi ti rendi conto che ogni dipartimento finanziario di ogni azienda dispone già di questo sistema. Gli SKU non vengono incrementati automaticamente: è necessario un modo per tenere traccia dei prodotti in modo inequivocabile. I nomi non sono adatti a questo. Quindi su yoast.com lo SKU è ora lo stesso numero che il nostro dipartimento finanziario usa per tracciare i prodotti.

Un altro requisito era avere una registrazione storica di ogni acquisto. WooCommerce lo fa per impostazione predefinita. Una volta che un ordine è completo, il gioco è fatto. Tutti i dati sono immutabili. Se un cliente cambia nome, indirizzo o e-mail, le nuove informazioni vengono utilizzate solo per i nuovi ordini. Per uno sviluppatore può sembrare strano, ma in realtà è un punto di forza. Non vorresti nemmeno che la tua banca modifichi le transazioni dopo il fatto: una volta terminate, sono terminate. Ogni mutazione è una nuova transazione.

Avere un record storico fa la differenza più grande quando si tratta di rimborsi. Nella vecchia configurazione, gli ordini rimborsati scomparirebbero dalle nostre esportazioni, il che cambierebbe le entrate di quel mese. In WooCommerce, ogni rimborso ha la sua data e importo. Quindi una volta terminato il mese, è davvero fatto.

In WooCommerce, ogni rimborso ha la sua data e importo. Quindi una volta terminato il mese, è davvero fatto.

Dettagli tecnici sulla migrazione di Yoast.com a WooCommerce

Migrazione

Abbiamo molti dati storici, il che significa che abbiamo dovuto migrare un gran numero di ordini. Abbiamo scelto uno strumento chiamato panda, uno strumento progettato per gestire set di dati di grandi dimensioni e una buona scelta per migrarli tutti in una volta. Se pianificassimo un'altra migrazione, probabilmente andremmo in una direzione diversa: formatteremmo lentamente i dati storici nell'arco di mesi. Ciò ridurrebbe drasticamente la quantità di dati da migrare il giorno del trasloco effettivo.

C'era un punto dolente principale che ha reso il processo più complesso del necessario. Poiché tutti i dati sono stati salvati in un metavalore nel database, è stato necessario annullare la serializzazione. Python non ha un modo efficiente e corretto per annullare la serializzazione di PHP, quindi abbiamo finito per sborsare PHP per essere in grado di annullare la serializzazione di questi dati.

Aggregazione dei dati

Potresti aver notato che ora abbiamo due siti. Ma vogliamo comunque avere una panoramica di tutti i dati in un'unica posizione. Questo è uno dei motivi per cui costruiamo MyYoast. Tutti gli ordini che riceviamo vengono sincronizzati su MyYoast. Ciò significa che MyYoast sa tutto.

WooCommerce ha un sistema per sincronizzare tutti gli ordini: webhook. Il più grande svantaggio dei webhook, in generale, è che se il sistema di ricezione è inattivo, il webhook non viene ricevuto. Quando guardi il codice dei webhook, trovi il seguente snippet:

“`
/*
* Consenti ad altri plugin di intercettare la consegna per alcune code di messaggi come rabbit/zeromq
*/
return apply_filters( 'woocommerce_webhook_should_deliver', $should_deliver, $this, $arg );
“`

Abbiamo considerato l'utilizzo di una coda di messaggi come suggerito nel commento, ma abbiamo adottato un approccio più semplice.

C'è un progetto delay_job dalla community di Ruby on Rails. Abbiamo trovato una porta PHP adatta alle nostre esigenze. Il lavoro ritardato fa ciò che suggerisce il nome: pianifica un lavoro da eseguire in seguito. Ciò significa che un lavoro non può mai essere perso. E se il lavoro fallisce, verrà ripetuto altre quattro volte. Successivamente, il lavoro può essere utilizzato per il debug di ciò che è andato storto. Questo ci dà una configurazione davvero robusta.

WebhookJobs

Abbiamo configurato WooCommerce per provare a inviare webhook al nostro URL fittizio personalizzato: `http://my-yoast-job.url`. Ciò garantisce che possiamo catturare queste richieste dal codice. Abbiamo una classe "Scheduler" che è responsabile della pianificazione dei lavori. Cattura le richieste webhook e le trasforma invece in lavori.

Classi di lavoro

Abbiamo diverse classi che gestiscono i lavori, una per ciascuno degli elementi costitutivi fondamentali di yoast.com. I lavori vengono quindi gestiti da un lavoratore in background. Questo processo è rapido, quindi un cliente vedrà immediatamente i propri prodotti in MyYoast.

WordPress come applicazione

Se non hai mai letto l'app The Twelve-Factor , ti consiglio vivamente di farlo. Suggerisce un framework molto robusto per lo sviluppo di applicazioni web. Come si traduce questo in un contesto WordPress? Meglio di quanto potresti pensare.

WordPress ha alcune caratteristiche uniche che rendono più difficile la configurazione. Ma puoi aggirarli per ottenere una solida installazione di WordPress. Se esegui solo uno di questi, dovrebbe essere il fattore delle dipendenze. Inizia a usare Composer! È qui e funziona. Rarst ha creato una buona panoramica su come utilizzare Composer per lo sviluppo di WordPress. L'aggiornamento automatico non è un'opzione per un'applicazione Web complessa. Quindi hai bisogno di una soluzione diversa e Composer fa un ottimo lavoro.

Prestazione

Abbiamo iniziato senza utilizzare la cache degli oggetti. Si è rivelata una cattiva idea. Se gestisci un volume sostanziale di vendite utilizzando WooCommerce, hai bisogno della memorizzazione nella cache degli oggetti. Senza di esso, un modello di ordine deve essere completamente ripristinato su ogni richiesta relativa a quell'ordine. È molto costoso, perché il modello dell'ordine è richiesto su molte pagine. Come minimo, tutte le pagine di pagamento devono accedere all'ordine.

Abbiamo anche creato alcune richieste pull su WooCommerce stesso per migliorare le prestazioni senza memorizzare nella cache. Uno di questi era una modifica per memorizzare nella cache le valute. Prima della modifica, tutte le valute sarebbero state tradotte ogni volta che un pezzo di codice necessitava di una sola valuta. Questo è molto inefficiente considerando che ogni negozio funziona solo in una valuta.

Una cosa che non potevamo risolvere semplicemente all'interno di WooCommerce stesso era la ricerca di ordini e abbonamenti. In questo modo si otterrebbe una query che potrebbe eliminare l'intero sito Web: questa query contiene molte ricerche di post meta e queste richiedono molto tempo. Abbiamo risolto questo problema costruendo la nostra funzionalità di ricerca su MyYoast.

Il problema della meta ricerca sarebbe risolto anche se WooCommerce utilizzasse tabelle personalizzate, che fortunatamente è già sulla roadmap tecnica di WooCommerce. Questo problema ha anche informato il nostro pensiero sul nostro plug-in. Possiamo ridurre la quantità di meta chiavi create da Yoast SEO? Di conseguenza, abbiamo aggiunto anche la creazione di una tabella personalizzata alla nostra tabella di marcia tecnica.

Elenco attuale dei plugin di WordPress e delle estensioni WooCommerce

Per dare un'idea completa di dove siamo arrivati, ecco l'elenco dei plugin che utilizziamo attualmente che sono rilevanti per la funzione del nostro sito come negozio. L'elenco completo contiene 55 plugin attivi.

  • CMB2: utilizzato per aggiungere più campi personalizzati ai tipi di post.
  • Tipo di campo CMB2: utilizzato per allegare più post come metavalore.
  • Campo di ricerca post CMB2: utilizzato per cercare un singolo post da allegare come meta valore.
  • Google Authenticator: aggiunta di 2FA al nostro login.
  • Google Authenticator, prompt per utente: in questo modo tutti i dipendenti Yoast possono utilizzare 2FA, ma i clienti non devono farlo.
  • MailChimp per WordPress e MailChimp per WordPress – Premium: utilizzato per collegare gli ordini a MailChimp.
  • Membri: per la gestione delle autorizzazioni per ruoli diversi, come gli ingegneri del supporto.
  • MultilingualPress: utilizzato per gestire i diversi siti nel multisito.
  • Accesso personalizzato a MyYoast: stilizza la schermata di accesso.
  • New Relic Reporting per WordPress: utilizziamo NewRelic per monitorare le nostre prestazioni.
  • Timbro postale: per inviare e-mail in modo affidabile.
  • Combinazione di colori per amministratori romantici: tutti hanno bisogno di un po' di rosa nelle loro vite!
  • WooCommerce: come puoi immaginare, per elaborare gli ordini su yoast.com!
  • Yoast SEO: WooCommerce: aggiunta della compatibilità tra WooCommerce e Yoast SEO.
  • Yoast SEO Premium: utilizzato per reindirizzamenti, suggerimenti di collegamenti interni e più parole chiave.

Elenco attuale dei plugin di WordPress e delle estensioni WooCommerce

  • WooCommerce – Pagamenti basati sul paese: utilizzato per mostrare metodi di pagamento diversi a clienti di paesi diversi.
  • WooCommerce AdyenCw: utilizzato per aggiungere i gateway di pagamento Adyen a WooCommerce.
  • Link coupon WooCommerce: utilizzati per creare link che applicano automaticamente un determinato coupon.
  • Prezzo dinamico WooCommerce : utilizzato per offrire sconti sugli acquisti all'ingrosso.
  • Personalizzatore e-mail WooCommerce: utilizzato per definire lo stile delle e-mail inviate da WooCommerce.
  • Partita IVA UE WooCommerce: utilizzata per riscuotere la partita IVA dei clienti europei e convalidare il numero utilizzando il servizio VIES.
  • WooCommerce Give Products: utilizzato per regalare prodotti.
  • WooCommerce PayPal Express Checkout Gateway: utilizzato per aggiungere un gateway di pagamento PayPal a WooCommerce con supporto per gli abbonamenti WooCommerce.
  • Pacchetti di prodotti WooCommerce: utilizzati per creare i pacchetti nel nostro negozio.
  • Abbonamenti WooCommerce: utilizzati per tenere traccia del tempo rimanente sul supporto e gli aggiornamenti dei plug-in.
Yoast.com ora esegue WooCommerce
Dai un'occhiata a yoast.com, ora supportato da WooCommerce.

Takeaway e risultati

Abbiamo lanciato questa nuova piattaforma il 29 agosto 2017. Nelle settimane successive abbiamo notevolmente migliorato le prestazioni del sito. Abbiamo raggiunto tutti gli obiettivi che volevamo raggiungere. Dopo la migrazione abbiamo anche iniziato a costruire molte altre cose. Il nostro team di supporto ora ha un tempo molto più semplice per il rimborso e il trasferimento degli account. Abbiamo migrato la nostra accademia Yoast al multisito. E abbiamo un sacco di piani entusiasmanti per il 2018, tra cui:

  • Aggiunta di un negozio dove vendiamo in sterline inglesi. Grazie alle nostre scelte passate e al nostro passaggio a WooCommerce, possiamo farlo in un giorno, non richiederà quasi nessun codice aggiuntivo. Aggiunta di una dashboard di vendita per il nostro team di vendita.
  • Aggiunta di una dashboard di vendita per il nostro team di vendita.
  • Aggiunta del supporto per Composer ai nostri plugin premium.

WooCommerce ha fornito a Yoast le basi tecniche su cui costruire e migliorare la nostra piattaforma nel prossimo decennio. Stai pensando di migrare un negozio online esistente su un'altra piattaforma? L'hai già fatto? Condividi la tua esperienza nei commenti.