Migración de la tienda web de Yoast.com de EDD a WooCommerce
Publicado: 2018-02-27En Yoast, optimizamos todos los aspectos del rendimiento de los sitios web. Nuestro objetivo es hacer de la web un lugar mejor al hacer que los sitios web sean más utilizables, más fáciles de navegar, más rápidos y más confiables.
En septiembre de 2017, migramos nuestra tienda web de Easy Digital Downloads (EDD) a WooCommerce: es donde vendemos todas las herramientas, los productos y el contenido disponible en yoast.com. En esta publicación, explicaré por qué lo hicimos, qué construimos y cuáles serán los beneficios para nosotros y para nuestros usuarios en el futuro. WooCommerce nos ha proporcionado la base técnica sobre la que construir en los próximos años.
¿Por qué el cambio?
Yoast.com está experimentando un crecimiento increíble impulsado por dos componentes principales: la popularidad de nuestro complemento y la audiencia en expansión de nuestro blog de SEO. Sin embargo, la combinación de estos dos elementos hace que yoast.com sea un sitio web difícil de administrar.
Históricamente, el sitio ha evolucionado a partir de una simple instalación de WordPress. Easy Digital Downloads (EDD) fue agregado por el fundador de Yoast, Joost de Valk, para facilitar la venta de complementos premium. También usamos EDD para brindar actualizaciones para todas las instalaciones Premium que existen en el mundo.
A lo largo de los años, hemos realizado más y más ajustes para asegurarnos de que EDD aún pueda satisfacer nuestras necesidades. Hacer posible que nuestros clientes pagaran en euros o dólares, por ejemplo, fue un esfuerzo enorme. Como queríamos agregar otras monedas en el futuro, necesitábamos encontrar una solución diferente.
Cuando buscamos otras opciones, consideramos varias necesidades:
- Ser capaz de soportar compras multidivisa.
- Pudiendo soportar pagos recurrentes.
- El costo de construir la integración y la mantenibilidad de la plataforma.
- Ser capaz de soportar cuentas de usuario.
- Creación de una plataforma SEO.
- Teniendo en cuenta la compatibilidad futura, ya que queremos tener un sitio que siga funcionando en 5-10 años.
Para lograr todo lo anterior, tuvimos que idear un plan.
Ideación
En enero de 2017 programamos una reunión con nuestro equipo de arquitectos: Joost, Omar, Jip y yo. Discutimos cuáles eran nuestras necesidades y cómo podríamos satisfacerlas mejor.
Nuestra primera conclusión fue que no queríamos alejarnos de WordPress. Aunque ahora tenemos complementos para otras plataformas, somos fanáticos de WordPress y nos preocupamos profundamente por su misión. WordPress es donde están nuestras raíces, y nos ha funcionado muy bien como CMS.
¿Por qué WooCommerce?
Luego consideramos qué plataforma de comercio electrónico queríamos usar. Nos preguntamos cuál es la mejor solución de comercio electrónico para WordPress y llegamos a la conclusión de que es WooCommerce. Pero, al igual que EDD, WooCommerce no admitía múltiples monedas. Así que necesitábamos una solución.
Soy un gran fan de la idea de que todo es un remix. Nos inspiró la idea de usar un sitio diferente para cada idioma, una idea que el complemento MultilingualPress ha ejecutado bien. Así que lo remezclamos: para evitar tener que escribir una tonelada de código personalizado, decidimos usar una instalación multisitio.
Como resultado, WooCommerce no necesita administrar diferentes monedas. En el sitio del dólar, WooCommerce hace todo en dólares. En el sitio del euro, WooCommerce hace todo en euros. Esto también hace que sea relativamente fácil agregar una nueva moneda. Simplemente agregaríamos un nuevo sitio y copiaríamos la configuración. En combinación con MultilingualPress, en el futuro esto también nos permitirá admitir diferentes idiomas.
WooCommerce terminó siendo una excelente opción para yoast.com por varias razones:
- Un buen modelo de datos.
- Un gran ecosistema.
- Compatibilidad con Webhook y API REST integradas.
- La posibilidad de probar nuestro complemento en combinación con WooCommerce.
- WooCommerce resuelve el dominio de comercio electrónico. No queríamos pasar mucho tiempo trabajando en el dominio de comercio electrónico. El SEO es nuestra experiencia, por lo que queremos centrarnos en el SEO.
- WooCommerce tiene una comunidad vibrante en la que podemos participar.
Comercio electrónico: SKU, registros históricos y reembolsos
Quiero centrarme por un momento en el dominio del comercio electrónico. Un aspecto a considerar aquí es el SKU. Cada producto tiene un SKU, un identificador único. Un SKU puede sonar como algo superfluo. ¿Por qué necesito un SKU cuando tengo una ID en la base de datos? Pero luego te das cuenta de que todos los departamentos financieros de todas las empresas ya cuentan con este sistema. Los SKU no se incrementan automáticamente: necesita una forma de rastrear productos de una manera que no sea ambigua. Los nombres no son adecuados para esto. Entonces, en yoast.com, el SKU ahora es el mismo número que nuestro departamento de finanzas usa para rastrear productos.
Otro requisito era tener un registro histórico de cada compra. WooCommerce hace esto por defecto. Una vez que se completa un pedido, eso es todo. Todos los datos son inmutables. Si un cliente cambia su nombre, dirección o correo electrónico, la nueva información solo se usa para nuevos pedidos. Para un desarrollador esto puede sonar extraño, pero en realidad es una fortaleza. Tampoco le gustaría que su banco cambiara las transacciones después del hecho: una vez que se realizan, se realizan. Cualquier mutación es una nueva transacción.
Tener un registro histórico hace la mayor diferencia cuando se trata de reembolsos. En la configuración anterior, los pedidos reembolsados desaparecerían de nuestras exportaciones, lo que cambiaría los ingresos de ese mes. En WooCommerce, cada reembolso tiene su propia fecha y monto. Entonces, una vez que se hace un mes, realmente se hace.
En WooCommerce, cada reembolso tiene su propia fecha y monto. Entonces, una vez que se hace un mes, realmente se hace.
Detalles técnicos de la migración de Yoast.com a WooCommerce
Migración
Tenemos muchos datos históricos, lo que significó que tuvimos que migrar una gran cantidad de pedidos. Elegimos una herramienta llamada pandas, una herramienta diseñada para manejar grandes conjuntos de datos y una buena opción para migrarlos todos a la vez. Si planeáramos otra migración, probablemente iríamos en una dirección diferente: formatearíamos lentamente los datos históricos durante meses. Eso reduciría drásticamente la cantidad de datos para migrar el día del traslado real.
Hubo un punto principal de dolor que hizo que el proceso fuera más complejo de lo necesario. Debido a que todos los datos se guardaron en un valor meta en la base de datos, era necesario deserializarlos. Python no tiene una forma eficiente y correcta de deserializar PHP, por lo que terminamos pagando a PHP para poder deserializar estos datos.
Agregando los datos
Es posible que haya notado que ahora tenemos dos sitios. Pero aún queremos tener una visión general de todos los datos en una ubicación. Esta es una de las razones por las que construimos MyYoast. Todos los pedidos que recibimos están sincronizados con MyYoast. Esto significa que MyYoast lo sabe todo.
WooCommerce tiene un sistema para sincronizar todos los pedidos: webhooks. El mayor inconveniente de los webhooks, en general, es que si el sistema de recepción no funciona, el webhook no se recibe. Al mirar el código de los webhooks, encontrará el siguiente fragmento:
“`
/*
* Permitir que otros complementos intercepten la entrega de algunos mensajes en cola como rabbit/zeromq
*/
return apply_filters( 'woocommerce_webhook_should_deliver', $should_deliver, $this, $arg );
“`
Consideramos usar una cola de mensajes como se sugiere en el comentario, pero optamos por un enfoque más simple.
Hay un proyecto delay_job de la comunidad de Ruby on Rails. Encontramos un puerto PHP que se adaptaba a nuestras necesidades. El trabajo retrasado hace lo que sugiere su nombre: programa un trabajo para que se ejecute más tarde. Esto significa que nunca se puede perder un trabajo. Y si el trabajo falla, se volverá a intentar cuatro veces más. Después de eso, el trabajo se puede usar para depurar lo que salió mal. Esto nos da una configuración realmente robusta.
Configuramos WooCommerce para intentar enviar webhooks a nuestra URL ficticia personalizada: `http://my-yoast-job.url`. Esto asegura que podamos capturar estas solicitudes desde el código. Tenemos una clase 'Programador' que es responsable de programar trabajos. Atrapa las solicitudes de webhook y las convierte en trabajos.
Tenemos varias clases que manejan trabajos, una para cada uno de los bloques de construcción fundamentales de yoast.com. Luego, los trabajos son manejados por un trabajador en segundo plano. Este proceso es rápido, por lo que un cliente verá instantáneamente sus productos en MyYoast.
WordPress como una aplicación
Si nunca ha leído la aplicación The Twelve-Factor App , le recomiendo que lo haga. Sugiere un marco muy robusto para el desarrollo de aplicaciones web. ¿Cómo se traduce esto en un contexto de WordPress? Mejor de lo que piensas.
WordPress tiene algunas características únicas que hacen que sea más difícil de configurar. Pero puede evitarlos para obtener una instalación robusta de WordPress. Si solo hace uno de estos, debería ser el factor de dependencias. ¡Empieza a usar Composer! Está aquí, y funciona. Rarst creó una buena descripción general de cómo usar Composer para el desarrollo de WordPress. La actualización automática no es una opción para una aplicación web compleja. Entonces necesita una solución diferente, y Composer hace un muy buen trabajo.
Rendimiento
Comenzamos sin usar caché de objetos. Eso resultó ser una mala idea. Si maneja un volumen sustancial de ventas con WooCommerce, necesita el almacenamiento en caché de objetos. Sin él, un modelo de pedido debe restablecerse por completo en cada solicitud relacionada con ese pedido. Es muy costoso, porque el modelo de pedido se requiere en muchas páginas. Como mínimo, todas las páginas de pago deben acceder al pedido.
También creamos algunas solicitudes de extracción en WooCommerce para mejorar el rendimiento sin almacenamiento en caché. Uno de estos fue una modificación para almacenar en caché las monedas. Antes de la modificación, todas las monedas se traducirían cada vez que cualquier pieza de código necesitara una sola moneda. Eso es muy ineficiente considerando que cada tienda solo opera en una moneda.
Una cosa que no podíamos arreglar simplemente dentro de WooCommerce era buscar pedidos y suscripciones. Hacer esto daría como resultado una consulta que podría eliminar todo nuestro sitio web; esta consulta contiene muchas búsquedas de metadatos de publicaciones, y esas consultas toman mucho tiempo. Solucionamos este problema creando nuestra propia funcionalidad de búsqueda sobre MyYoast.
El problema de la metabúsqueda también se resolvería si WooCommerce usara tablas personalizadas, que afortunadamente ya está en la hoja de ruta técnica de WooCommerce. Este problema también informó nuestro pensamiento sobre nuestro propio complemento. ¿Podemos reducir la cantidad de claves meta que crea Yoast SEO? Como resultado, también hemos agregado la creación de una tabla personalizada a nuestra propia hoja de ruta técnica.
Lista actual de complementos de WordPress y extensiones de WooCommerce
Para dar una idea completa de dónde aterrizamos, aquí está la lista de complementos que usamos actualmente que son relevantes para la función de nuestro sitio como tienda. La lista completa contiene 55 complementos activos.
- CMB2: se utiliza para agregar más campos personalizados a los tipos de publicaciones.
- Tipo de campo CMB2: se usa para adjuntar múltiples publicaciones como un valor meta.
- Campo de búsqueda de publicación de CMB2: se utiliza para buscar una sola publicación para adjuntarla como metavalor.
- Google Authenticator: agregando 2FA a nuestro inicio de sesión.
- Autenticador de Google, aviso por usuario: De esta manera, todos los empleados de Yoast pueden usar 2FA, pero los clientes no tienen que hacerlo.
- MailChimp para WordPress y MailChimp para WordPress – Premium: se utiliza para conectar pedidos a MailChimp.
- Miembros: para administrar permisos para diferentes roles, como ingenieros de soporte.
- MultilingualPress: Se utiliza para administrar los diferentes sitios en el multisitio.
- Inicio de sesión personalizado de MyYoast: diseña la pantalla de inicio de sesión.
- Informes de New Relic para WordPress: utilizamos NewRelic para realizar un seguimiento de nuestro rendimiento.
- Matasellos: Para enviar correos electrónicos de manera confiable.
- Esquema de color de administrador romántico: ¡Todos necesitan un poco de rosa en sus vidas!
- WooCommerce: como puede suponer, ¡para procesar pedidos en yoast.com!
- Yoast SEO: WooCommerce: Adición de compatibilidad entre WooCommerce y Yoast SEO.
- Yoast SEO Premium: se utiliza para redireccionamientos, sugerencias de enlaces internos y varias palabras clave.
Lista actual de complementos de WordPress y extensiones de WooCommerce
- WooCommerce – Pagos basados en países: se utiliza para mostrar diferentes métodos de pago a clientes de diferentes países.
- WooCommerce AdyenCw: se usa para agregar las pasarelas de pago de Adyen a WooCommerce.
- Enlaces de cupones de WooCommerce: se utilizan para crear enlaces que aplican automáticamente un cupón determinado.
- Precio dinámico de WooCommerce : se utiliza para ofrecer descuentos en compras al por mayor.
- Personalizador de correo electrónico de WooCommerce: se utiliza para diseñar los correos electrónicos que envía WooCommerce.
- Número de IVA de la UE de WooCommerce: se utiliza para recopilar el número de IVA de los clientes europeos y validar el número mediante el servicio VIES.
- WooCommerce Give Products: se utiliza para regalar productos.
- WooCommerce PayPal Express Checkout Gateway: se utiliza para agregar una pasarela de pago de PayPal a WooCommerce con soporte para suscripciones de WooCommerce.
- Paquetes de productos de WooCommerce: se utilizan para crear los paquetes en nuestra tienda.
- Suscripciones de WooCommerce: se utiliza para realizar un seguimiento del tiempo restante en el soporte y las actualizaciones del complemento.
Conclusiones y resultados
Lanzamos esta nueva plataforma el 29 de agosto de 2017. En las semanas siguientes, hemos mejorado mucho el rendimiento del sitio. Hemos logrado todos los objetivos que queríamos alcanzar. Desde la migración también hemos comenzado a construir muchas otras cosas. Nuestro equipo de soporte ahora tiene mucho más facilidad para reembolsar y transferir cuentas. Hemos migrado nuestra academia Yoast al multisitio. Y tenemos un montón de planes emocionantes para 2018, que incluyen:
- Agregar una tienda donde vendamos en libras esterlinas. Gracias a nuestras elecciones pasadas y nuestro cambio a WooCommerce, podemos hacer esto en un día, casi no requerirá código adicional. Agregar un tablero de ventas para nuestro equipo de ventas.
- Agregar un tablero de ventas para nuestro equipo de ventas.
- Agregar compatibilidad con Composer a nuestros complementos premium.
WooCommerce le ha dado a Yoast la base técnica sobre la cual construir y mejorar nuestra plataforma en la próxima década. ¿Está considerando migrar una tienda web existente a otra plataforma? ¿Ya has hecho esto? Comparte tu experiencia en los comentarios.