Escalar un WooCommerce con muchos productos

¿Cuántos productos son muchos productos para un WooCommerce? La pregunta en sí no es tanto para un WooCommerce sino para cualquier sistema que almacene información en una base de datos.

Pero por poner cifras, planteemos que muchos productos son más de 3.000 productos. Y que, para todo lo que explicaré a continuación, mi cifra de prueba de productos es de 25.000, pero que, en este sentido, podríamos estar hablando de hasta 250.000 productos sin problema.

Por cierto, si quieres hacer pruebas y añadir miles de productos aleatorios para probar, puedes usar el plugin WooCommerce Product Generator que te generará todos los productos que quieras.

Hay muchos factores a la hora de tener en cuenta la optimización de un WooCommerce, ya que no sólo es la de la cantidad de productos sino la cantidad de visitas que tiene el sitio, y la cantidad de veces que se crea un carrito de la compra. El objetivo de este texto es el de explicar una casuística en la que hay «mucho de todo».

WooCommerce es un plugin de WordPress, y WordPress funciona sobre distintos servicios, así que vamos a ir por partes, de la parte más baja, hasta llegar a lo que es la propia optimización de WooCommerce.

Hosting

Para empezar hablemos en general del hosting. Si quieres un WooCommerce óptimo, olvídate de un hosting compartido, necesitas sí o sí un VPS (lo que vendría a ser un hosting sólo para ti, tipo dedicado). Y aquí viene el primer escollo, y es que no todo el mundo tiene conocimientos técnicos para gestionarlo, y por mucho que te digan, ningún hosting te gestiona esto, por muy gestionado que sea. Necesitas a un técnico en tu equipo o alguien que sepa de Administración de Sistemas y de WordPress.

Este tutorial ha sido creado en un VPS de Clouding.io. Puedes crear tu propio VPS desde 3€/mes.

Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.

COLABORACIÓN

Lo segundo es qué tipo de infraestructura queremos. Al hablar de VPS lo que hablamos son de máquinas que tienen sus propios recursos: CPU, RAM y disco. Aunque podemos separar todos los servicios en muchos, si queremos comenzar con buen pie necesitamos al menos 2 servidores VPS. En uno tendremos la base de datos (el MySQL) y en la otra tendremos el resto (el WordPress con su WooCommerce, el PHP, servidor web y caché).

Si lo hacemos todo muy bien, con 2 máquinas de 2 CPU y 4 GB de RAM, con los tamaños de disco SSD que sean necesario, deberíamos tener más que suficiente para un WooCommerce que gestione 25.000 productos y tenga 2.500 carritos al día y que podrían ser unas 25.000 visitas al día. Esto sería una base, unos mínimos que iría bien. Y puestos a elegir un sistema operativo, Ubuntu Server es una buena opción ya que mantiene todos los elementos bastante actualizados.

Estamos hablando de unas máquinas que pueden costar unos 15,00 € al mes (2 CPU, 4 GB de RAM y 50 GB SSD), por lo que por 30 euros al mes puedes tener un sistema muy óptimo con soporte para 100.000 carritos al mes sin problemas.

Por cierto, no todas las empresas de hosting sirven. Para una instalación normal irte a Google, Amazon o similares puede ser una pérdida de tiempo y de dinero. Y otras empresas pueden tener algunas limitaciones, así que busca una empresa de servidores VPS que de de acceso completo al servidor y, en caso de que sea gestionado, que te detalle exactamente qué van a hacer cuando haya un pico de tráfico y cuáles son sus sistemas para optimizar y corregir momentos de saturación. Si la empresa no te da una respuesta clara, es mejor contratar servidores lo más abiertos posibles y buscarte a alguien que sepa de esto.

Base de datos

Si comenzamos por la base de datos, no deberíamos tener nada en especial. Podemos instalar la última versión de MariaDB o de MySQL que todo debería funcionar bien. Cuanto más moderna sea la versión de la base de datos, mejor, porque dará mejor rendimiento. Además, deberemos configurar la base de datos específicamente para la cantidad de CPU y RAM que tengamos. Esta configuración del my.cnf dependerá mucho de cada sistema, por lo que lo deberá hacer un profesional si no quieres que poniendo unas cifras incorrectas haya fallos de memoria o errores graves.

Servidor web

Si queremos un sistema escalable debemos dejar de lado Apache HTTPD, que sí, que funciona bien y es fácil para aquellos que quieren cambiar el .htaccess, pero tiene unos consumos de memoria elevados para alto tráfico. Así que nos pasaremos a nginx que carga su configuración en memoria de forma que tendrá todo precalculado.

Obviamente deberemos configurar nginx de forma óptima a nivel de servidor, pero también deberemos configurar correctamente el host de WordPress para él mismo, optimizando los elementos estáticos para que sean cacheados en el servidor del usuario e incluso en el propio servidor web.

PHP

Si queremos sacar partido al máximo deberemos asegurarnos de usar la versión de PHP adecuada, y para empezar ha de ser PHP-FPM. En este momento, aunque existe PHP 8.0, la versión recomendada es 7.4. En cualquier caso debemos asegurarnos siempre de usar una versión que funcione correctamente con todos nuestros plugins.

A nivel de PHP deberemos configurar todos las extensiones de WordPress recomendadas (WooCommerce no tiene ninguna en especial) y también activaremos el OpCache. Con esto activaremos la propia caché de PHP que, mientras no hagamos ninguna actualización, dejará precalculado todo el código fuente.

La decisión principal de usar PHP-FPM es que, con nginx funciona mejor, y por otro, que se puede optimizar muy fácilmente cuánto consumo queremos tener en este servicio de forma simple mediante la configuración de sus hilos, uso de memoria y cantidad de RAM que tenga el servidor.

Caché de Objetos

Y como último gran componente deberemos elegir una caché de objetos. De forma nativa WordPress da soporte a Redis y memcached, cada una con sus pros y sus contras. Si bien es cierto que memcached puede ser algo más rápida, el hecho de que esté en memoria tiene ciertas desventajas, por lo que elegiremos Redis como elemento más persistente y estable siempre y cuando tengamos discos, al menos, SSD o NVMe.

De la misma manera que en otros casos, deberemos elegir correctamente la configuración de Redis para poder almacenar sin problema toda la información temporal de WordPress y de WooCommerce, que hará un uso intensivo de este almacenamiento temporal de datos.

TLS + HTTP/2

Aunque de por sí nginx ya le da soporte, elegiremos como sistema óptimo nginx con soporte HTTP/2, y si te pones, montar el sistema para dar soporte a HTTP/3, y por tanto, tener de forma paralela un certificado TLS 1.2 y 1.3, que te puede dar el propio Let’s Encrypt de forma gratuita.

Configurar WordPress para el hosting

Sin duda el peso del hosting y de todos sus elementos es muy importante, pero sirve de muy poco si no lo sincronizamos con el propio WordPress para activar sus funcionalidades y sacarle provecho.

En cualquier caso usaremos algunos plugins (los que voy a comentar, u otros similares, que en parte va a gustos) para cada uno de los elementos.

Siguiendo el orden previo de elementos del hosting, voy a intentar comentar un plugin para cada servicio.

Si comenzamos por la base de datos, en especial no hay ningún plugin, aunque luego haremos algunos cambios en la configuración para hacer ciertas optimizaciones.

En la parte del servidor web hemos comentado varias cosas. La primera de ellas ha sido la posibilidad de cachear y optimizar los elementos estáticos, así que usaremos un plugin del estilo a Autoptimize que nos permita minimizar y fusionar los CSS y JavaScript. Con esto conseguiremos cachear y optimizar esta parte de estáticos.

Y en esta parte también haremos la sincronización de la caché de página que será servida y optimizada por el servidor web. En este caso una buena integración con WP Super Cache debería ser suficiente.

En la parte del PHP hemos hablado del OpCaché, así que vamos a usar el plugin WP OPcache que gestionará las actualizaciones de plugins, temas y del propio núcleo de WordPress.

Para la caché de objetos hemos decidido usar Redis, así que usaremos un plugin como Redis Object Cache que nos hará la activación de este servicio.

Y para acabar hemos hablado de HTTP/2, y aunque WordPress gestiona bastante bien esta parte, siempre podemos optimizar un poco más con HTTP2 push content.

Optimizando WordPress

Ahora que ya tenemos WordPress optimizado para el hosting, podemos hacer ciertas mejoras en lo que al propio WordPress tenemos. Una de las formas más simples de encontrar algún problema es mediante la Salud del Sitio, que podemos mejorar y ampliar con el plugin Health Check & Troubleshooting y que nos será muy útil en caso de problemas.

Lo siguiente será optimizar el WP-Config.php. Algunos de los elementos que deberemos revisar son el de WP_POST_REVISIONS, que dejaremos en false. Este es importante ya que sino, cada vez que actualicemos un producto o contenido nos generará una copia del mismo y multiplicará la base de datos, que es una de las cosas que no queremos.

Otro de los elementos que podemos revisar es el MEDIA_TRASH, que podemos dejar en true, o el EMPTY_TRASH_DAYS que podemos dejar en 7 (días) o el WP_MAIL_INTERVAL a 86400 (un día) para que no esté el sistema intentando encontrar correo que nadie usa.

Dos elementos importantes son el de WP_MEMORY_LIMIT, que dejaremos en 128M y el WP_MAX_MEMORY_LIMIT que dejaremos en 256M. Para que esto sirva de algo hay que revisar y reconfigurar el propio PHP, que mucha gente cambia estos datos y, si no optimizas el PHP no sirve de nada.

Activaremos el uso de caché mediante WP_CACHE a true, configuraremos un identificador único en WP_CACHE_KEY_SALT y activaremos la compresión de CSS y JavaScript con COMPRESS_CSS y COMPRESS_SCRIPTS a true. También validaremos que está activado el Gzip, ya sea a nivel de WordPress con ENFORCE_GZIP a true, y en el servidor web.

Crones

Un elemento muy importante de optimización es el de los crones, que son las tareas programadas. Por defecto WordPress usa un sistema de pseudo-crones que se ejecuta cuando visita la web un usuario, y si tenemos mucho tráfico no es buena idea, así que en el WP-Config configuraremos el DISABLE_WP_CRON a false, y lanzaremos el cron desde el servidor.

Recogiendo la basura

WordPress por defecto hace un par de cosas que no son muy óptimas que digamos. La primera de ellas es almacenar un histórico de casi todo, además de almacenar los elementos que dejamos en la papelera hasta un mes. Esto hace que la base de datos se llene de basura. Y para limpiar la base de datos y tirar la basura usaremos un plugin del estilo a WP-Optimize que nos permitirá eliminar de un plumazo las revisiones de entradas, borradores automáticos, la papelera o los comentarios en Spam.

WooCommerce

Teniendo en cuenta que WooCommerce es un producto de Automattic, y que esta empresa tiene a muchos empleados colaborando en el propio WordPress, poco hay que optimizar, porque en general WooCommerce y WordPress se llevan muy bien…

WooCommerce funciona muy bien, con 100 o 100.000 productos, así que si tenías un problema, no era de WooCommerce y probablemente ya se haya solucionado con todo lo que se ha explicado previamente.

WooCommerce y más

Si queremos que WooCommerce funcione bien hemos de evitar llenarlo de plugins añadidos. tenemos la mala costumbre de querer buscar mil funcionalidades en plugins que probablemente se puedan hacer de una forma mucho más sencilla con algunos pequeños plugins personalizados. En la medida de lo posible evita usar plugins añadidos a WooCommerce.

Por otro lado, evita usar editores visuales como Elementor, Divi o similares porque no aportan absolutamente nada. WooCommerce ha hecho un grandísimo trabajo añadiendo todos los bloques posibles al editor de bloques de WordPress pudiendo incluir casi cualquier cosa en casi cualquier lugar, por lo que cualquier editor visual que no sea el nativo simplemente generará ruido y lentitud.

Y, sobre todo, nunca uses WPML porque cualquier cosa que quieras hacer de multi-idioma, multi-moneda o multi-país lo tirarás a la basura por completo. Si quieres escalar un WooCommerce a nivel internacional, usa MultilingualPress y WordPress MultiSite que tiene unas optimizaciones perfectas para esto.

Conclusión

Si usas WooCommerce, configura muy bien el servidor y no tendrás problemas independientemente del tamaño del sitio.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.