Migrando a loja virtual do Yoast.com de EDD para WooCommerce

Publicados: 2018-02-27

Na Yoast, otimizamos todos os aspectos do desempenho dos sites. Nosso objetivo é tornar a web um lugar melhor, tornando os sites mais úteis, fáceis de navegar, mais rápidos e mais confiáveis.

Em setembro de 2017, migramos nossa loja virtual do Easy Digital Downloads (EDD) para o WooCommerce — é onde vendemos todas as ferramentas, produtos e conteúdo disponíveis no yoast.com. Neste post, explicarei por que fizemos isso, o que construímos e quais serão os benefícios para nós e para nossos usuários no futuro. WooCommerce nos forneceu a base técnica para construir nos próximos anos.

Por que a mudança?

Yoast.com está experimentando um crescimento incrível impulsionado por dois componentes principais - a popularidade do nosso plugin e o público em expansão do nosso blog de SEO. A combinação desses dois elementos, no entanto, torna o yoast.com um site desafiador para gerenciar.

Historicamente, o site evoluiu de uma simples instalação do WordPress. O Easy Digital Downloads (EDD) foi adicionado pelo fundador do Yoast, Joost de Valk, para facilitar a venda de plugins premium. Também usamos o EDD para fornecer atualizações para todas as instalações Premium existentes no mundo.

Ao longo dos anos, fizemos mais e mais ajustes para garantir que o EDD ainda pudesse atender às nossas necessidades. Tornar possível que nossos clientes paguem em euros ou dólares, por exemplo, foi um esforço enorme. Como queríamos adicionar outras moedas no futuro, precisávamos encontrar uma solução diferente.

Quando analisamos outras opções, consideramos várias necessidades:

  • Ser capaz de suportar compras em várias moedas.
  • Ser capaz de suportar pagamentos recorrentes.
  • O custo de construção de integração e a manutenção da plataforma.
  • Ser capaz de suportar contas de usuário.
  • Criação de uma plataforma de SEO.
  • Levando em conta a compatibilidade futura, pois queremos ter um site que ainda funcione em 5-10 anos.

Para alcançar todos os itens acima, tivemos que elaborar um plano.

Ideação

Em janeiro de 2017 marcamos uma reunião com nossa equipe de arquitetos: Joost, Omar, Jip e eu. Discutimos quais eram nossas necessidades e como poderíamos atendê-las melhor.

Nossa primeira conclusão foi que não queríamos nos afastar do WordPress. Embora agora tenhamos plugins para outras plataformas, somos fãs do WordPress e nos preocupamos profundamente com sua missão. O WordPress é onde estão nossas raízes e funcionou muito bem para nós como CMS.

Por que WooCommerce?

Em seguida, consideramos qual plataforma de comércio eletrônico queríamos usar. Nos perguntamos qual é a melhor solução de comércio eletrônico para WordPress e chegamos à conclusão de que é WooCommerce. Mas, como o EDD, o WooCommerce não suportava várias moedas. Então precisávamos de uma solução.

Eu sou um grande fã da ideia de que tudo é um remix. Fomos inspirados pela ideia de usar um site diferente para cada idioma, uma ideia que foi bem executada pelo plugin MultilingualPress. Então, nós o remixamos: para evitar ter que escrever uma tonelada de código personalizado, decidimos usar uma instalação multisite.

Como resultado, o WooCommerce não precisa gerenciar moedas diferentes. No site do dólar, o WooCommerce faz tudo em dólares. No site do euro, o WooCommerce faz tudo em euros. Isso também torna relativamente fácil adicionar uma nova moeda. Nós apenas adicionamos um novo site e copiamos as configurações. Em combinação com o MultilingualPress, no futuro, isso também nos possibilitará oferecer suporte a diferentes idiomas.

yoast.com USD e UE
yoast.com oferece aos usuários uma escolha entre dólares americanos e euros, via switcher.

O WooCommerce acabou sendo uma ótima opção para o yoast.com por vários motivos:

  • Um bom modelo de dados.
  • Um grande ecossistema.
  • API REST integrada e suporte a Webhook.
  • A possibilidade de dogfood nosso plugin em combinação com WooCommerce.
  • WooCommerce resolve o domínio de comércio eletrônico. Não queríamos gastar muito tempo trabalhando no domínio de comércio eletrônico. SEO é a nossa especialidade, por isso queremos focar em SEO.
  • WooCommerce tem uma comunidade vibrante na qual podemos participar.

eCommerce: SKUs, registros históricos e reembolsos

Quero me concentrar por um momento no domínio do comércio eletrônico. Um aspecto a considerar aqui é o SKU. Cada produto tem um SKU — um identificador exclusivo. Um SKU pode soar como algo supérfluo. Por que preciso de um SKU quando tenho um ID no banco de dados? Mas então você percebe que todos os departamentos financeiros de todas as empresas já possuem esse sistema. Os SKUs não são incrementados automaticamente — você precisa de uma maneira de rastrear produtos de forma inequívoca. Os nomes não são adequados para isso. Portanto, no yoast.com, o SKU agora é o mesmo número que nosso departamento financeiro usa para rastrear produtos.

Outro requisito era ter um registro histórico de cada compra. O WooCommerce faz isso por padrão. Uma vez que um pedido é concluído, é isso. Todos os dados são imutáveis. Se um cliente alterar seu nome, endereço ou e-mail, as novas informações serão usadas apenas para novos pedidos. Para um desenvolvedor isso pode parecer estranho, mas na verdade é um ponto forte. Você também não gostaria que seu banco alterasse as transações após o fato - uma vez que elas são feitas, elas são feitas. Qualquer mutação é uma nova transação.

Ter um registro histórico faz a maior diferença quando se trata de reembolsos. Na configuração antiga, os pedidos reembolsados ​​desapareceriam de nossas exportações, o que alteraria a receita daquele mês. No WooCommerce, cada reembolso tem sua própria data e valor. Então, uma vez por mês é feito, é realmente feito.

No WooCommerce, cada reembolso tem sua própria data e valor. Então, uma vez por mês é feito, é realmente feito.

Detalhes técnicos da migração do Yoast.com para o WooCommerce

Migração

Temos muitos dados históricos, o que significa que tivemos que migrar um grande número de pedidos. Escolhemos uma ferramenta chamada pandas, uma ferramenta projetada para lidar com grandes conjuntos de dados e uma boa opção para migrar tudo de uma vez. Se planejássemos outra migração, provavelmente iríamos em uma direção diferente - formataríamos lentamente os dados históricos ao longo de meses. Isso reduziria drasticamente a quantidade de dados a serem migrados no dia da mudança real.

Havia um ponto de dor principal que tornava o processo mais complexo do que precisava ser. Como todos os dados foram salvos em um meta valor no banco de dados, ele precisava ser não serializado. O Python não tem uma maneira eficiente e correta de fazer a desserialização do PHP, então acabamos desembolsando o PHP para poder desserializar esses dados.

Agregando os dados

Você deve ter notado que agora temos dois sites. Mas ainda queremos ter uma visão geral de todos os dados em um local. Esta é uma das razões pelas quais construímos o MyYoast. Todos os pedidos que recebemos são sincronizados com o MyYoast. Isso significa que o MyYoast sabe tudo.

O WooCommerce possui um sistema para sincronizar todos os pedidos: webhooks. A maior desvantagem dos webhooks, em geral, é que, se o sistema receptor estiver inativo, o webhook não será recebido. Ao analisar o código dos webhooks, você encontra o seguinte snippet:

“`
/*
* Permitir que outros plugins interceptem a entrega para algumas filas de mensagens como coelho/zeromq
*/
return apply_filters( 'woocommerce_webhook_should_deliver', $should_deliver, $this, $arg );
“`

Consideramos usar uma fila de mensagens conforme sugerido no comentário, mas optamos por uma abordagem mais simples.

Existe um projeto delay_job da comunidade Ruby on Rails. Encontramos uma porta PHP que atendeu às nossas necessidades. O trabalho atrasado faz o que seu nome sugere: ele agenda um trabalho para ser executado mais tarde. Isso significa que um emprego nunca pode ser perdido. E se o trabalho falhar, ele será repetido mais quatro vezes. Depois disso, o trabalho pode ser usado para depurar o que deu errado. Isso nos dá uma configuração realmente robusta.

WebhookJobs

Configuramos o WooCommerce para tentar enviar webhooks para nosso URL fictício personalizado: `http://my-yoast-job.url`. Isso garante que possamos capturar essas solicitações do código. Temos uma classe `Scheduler` que é responsável por agendar jobs. Ele captura as solicitações de webhook e as transforma em trabalhos.

Classes de trabalho

Temos várias classes que lidam com trabalhos, uma para cada um dos blocos de construção fundamentais do yoast.com. Os trabalhos são então tratados por um trabalhador em segundo plano. Esse processo é rápido, então um cliente verá instantaneamente seus produtos no MyYoast.

WordPress como aplicativo

Se você nunca leu The Twelve-Factor App , eu recomendo que você o faça. Ele sugere uma estrutura muito robusta para o desenvolvimento de aplicativos da web. Como isso se traduz em um contexto do WordPress? Melhor do que você imagina.

O WordPress tem alguns recursos exclusivos que dificultam a configuração. Mas você pode contornar isso para obter uma instalação robusta do WordPress. Se você fizer apenas um desses, deve ser o fator de dependências. Comece a usar o Composer! Está aqui e funciona. Rarst criou uma boa visão geral de como usar o Composer para desenvolvimento WordPress. A atualização automática não é uma opção para um aplicativo Web complexo. Então você precisa de uma solução diferente, e o Composer faz um trabalho muito bom.

atuação

Começamos sem usar o cache de objetos. Isso acabou sendo uma má ideia. Se você lida com um volume substancial de vendas usando o WooCommerce, precisa de cache de objetos. Sem ele, um modelo de pedido precisa ser completamente restabelecido a cada solicitação referente a esse pedido. É muito caro, porque o modelo de pedido é exigido em muitas páginas. No mínimo, todas as páginas de checkout precisam acessar o pedido.

Também criamos alguns pull requests no próprio WooCommerce para melhorar o desempenho sem cache. Uma delas foi uma modificação para armazenar em cache as moedas. Antes da modificação, todas as moedas seriam convertidas sempre que qualquer pedaço de código precisasse de apenas uma moeda. Isso é muito ineficiente, considerando que cada loja funciona apenas em uma moeda.

Uma coisa que não podíamos simplesmente consertar dentro do próprio WooCommerce era procurar pedidos e assinaturas. Fazer isso resultaria em uma consulta que poderia derrubar todo o nosso site — essa consulta contém muitas pesquisas por meta de postagem, e elas levam muito tempo. Resolvemos esse problema criando nossa própria funcionalidade de pesquisa no MyYoast.

O problema da meta pesquisa também seria resolvido se o WooCommerce usasse tabelas personalizadas, o que felizmente já está no roteiro técnico do WooCommerce. Esse problema também informou nosso pensamento sobre nosso próprio plugin. Podemos reduzir a quantidade de meta-chaves que o Yoast SEO cria? Como resultado, também adicionamos a criação de uma tabela personalizada ao nosso roteiro técnico.

Lista atual de plugins do WordPress e extensões do WooCommerce

Para dar uma ideia abrangente de onde chegamos, aqui está a lista de plugins que usamos atualmente e que são relevantes para a função do nosso site como loja. A lista completa contém 55 plugins ativos.

  • CMB2: Usado para adicionar mais campos personalizados aos tipos de postagem.
  • Tipo de campo CMB2: Usado para anexar várias postagens como um valor meta.
  • Campo de pesquisa de postagem CMB2: usado para pesquisar uma única postagem para anexar como um valor meta.
  • Google Authenticator: Adicionando 2FA ao nosso login.
  • Google Authenticator, Per User Prompt: Desta forma, todos os funcionários do Yoast podem usar 2FA, mas os clientes não precisam.
  • MailChimp para WordPress e MailChimp para WordPress – Premium: Usado para conectar pedidos ao MailChimp.
  • Membros: para gerenciar permissões para diferentes funções, como engenheiros de suporte.
  • MultilingualPress: Usado para gerenciar os diferentes sites no multisite.
  • Login personalizado do MyYoast: Estiliza a tela de login.
  • Relatórios New Relic para WordPress: Usamos o NewRelic para acompanhar nosso desempenho.
  • Carimbo postal: Para enviar e-mails de forma confiável.
  • Romance Admin Color Scheme: Todo mundo precisa de um pouco de rosa em suas vidas!
  • WooCommerce: Como você pode imaginar, para processar pedidos no yoast.com!
  • Yoast SEO: WooCommerce: Adicionando compatibilidade entre WooCommerce e Yoast SEO.
  • Yoast SEO Premium: Usado para redirecionamentos, sugestões de links internos e várias palavras-chave.

Lista atual de plugins do WordPress e extensões do WooCommerce

  • WooCommerce – Pagamentos com base no país: Usado para mostrar diferentes métodos de pagamento para clientes de diferentes países.
  • WooCommerce AdyenCw: Usado para adicionar os gateways de pagamento da Adyen ao WooCommerce.
  • Links de cupom WooCommerce: Usado para criar links que aplicam automaticamente um determinado cupom.
  • Preços dinâmicos do WooCommerce : Usado para oferecer descontos em compras a granel.
  • WooCommerce Email Customizer: Usado para estilizar os emails que o WooCommerce envia.
  • WooCommerce EU VAT Number: Usado para coletar o número de VAT de clientes europeus e validar o número usando o serviço VIES.
  • WooCommerce Give Products: Usado para distribuir produtos.
  • WooCommerce PayPal Express Checkout Gateway: Usado para adicionar um gateway de pagamento do PayPal ao WooCommerce com suporte para WooCommerce Subscriptions.
  • Pacotes de produtos WooCommerce: Usados ​​para criar os pacotes em nossa loja.
  • Assinaturas do WooCommerce: Usadas para acompanhar o tempo restante no suporte e nas atualizações do plug-in.
Yoast.com agora roda WooCommerce
Dê uma olhada em yoast.com, agora desenvolvido pelo WooCommerce.

Conquistas e resultados

Lançamos esta nova plataforma em 29 de agosto de 2017. Nas semanas seguintes melhoramos muito o desempenho do site. Alcançamos todos os objetivos que queríamos atingir. Desde a migração, também começamos a construir muitas outras coisas. Nossa equipe de suporte agora tem muito mais facilidade para reembolsar e transferir contas. Migramos nossa academia Yoast para o multisite. E temos vários planos interessantes para 2018, incluindo:

  • Adicionando uma loja onde vendemos em libras esterlinas. Graças às nossas escolhas anteriores e nossa mudança para o WooCommerce, podemos fazer isso em um dia, quase não exigirá código adicional. Adicionando um painel de vendas para nossa equipe de vendas.
  • Adicionando um painel de vendas para nossa equipe de vendas.
  • Adicionando suporte ao Composer aos nossos plugins premium.

O WooCommerce deu ao Yoast a base técnica para construir e melhorar nossa plataforma na próxima década. Você está pensando em migrar uma loja virtual existente para outra plataforma? Você já fez isso? Compartilhe sua experiência nos comentários.