// Índice de contenidos
WooCommerce es exigente. Cada página de producto ejecuta decenas de consultas a la base de datos. El carrito y checkout son dinámicos y no pueden cachearse. Las pasarelas de pago requieren SSL perfecto. Y cuando llega Black Friday, el tráfico se multiplica por 10.
Un hosting compartido colapsa. Un VPS mal configurado se arrastra. Pero un VPS con HestiaCP correctamente optimizado puede manejar miles de pedidos simultáneos con tiempos de carga inferiores a un segundo.
He configurado tiendas WooCommerce que procesan más de 500 pedidos diarios en servidores modestos. El secreto no es gastar más en hardware, sino optimizar cada capa: PHP, Redis, Nginx, base de datos y el propio WooCommerce.
Requisitos para WooCommerce
WooCommerce necesita más recursos que un WordPress normal. Aquí los requisitos reales según el tamaño de tu tienda:
Requisitos por tamaño de tienda
| Tamaño | Productos | Pedidos/día | RAM | CPU | Almacenamiento |
|---|---|---|---|---|---|
| Pequeña | < 100 | < 20 | 2 GB | 1 vCPU | 40 GB SSD |
| Mediana | 100-500 | 20-100 | 4 GB | 2 vCPU | 60 GB NVMe |
| Grande | 500-2000 | 100-500 | 8 GB | 4 vCPU | 100 GB NVMe |
| Enterprise | 2000+ | 500+ | 16+ GB | 8+ vCPU | 200+ GB NVMe |
Por qué NVMe es crítico
WooCommerce hace muchas consultas a la base de datos. Con SSD tradicional, cada consulta tarda ~5ms. Con NVMe, baja a ~1ms. En una página de producto con 50 consultas, eso es 200ms de diferencia.
Verificar recursos actuales
# RAM disponible
free -h
# Uso de CPU
top -bn1 | head -5
# Tipo de disco (rota=0 es SSD/NVMe)
lsblk -d -o name,rota
# Espacio en disco
df -h
Arquitectura optimizada
Una tienda WooCommerce rápida tiene múltiples capas trabajando juntas:
Stack recomendado
| Capa | Tecnología | Función |
|---|---|---|
| Proxy/CDN | Cloudflare | Cache estático, SSL, DDoS |
| Web Server | Nginx | Servir archivos, FastCGI cache |
| Aplicación | PHP 8.3 + OPcache | Ejecutar WordPress/WooCommerce |
| Object Cache | Redis | Cachear consultas DB |
| Base de datos | MariaDB 10.11 | Almacenar productos, pedidos |
| Almacenamiento | NVMe | Velocidad de I/O |
Flujo de una petición
- Usuario solicita página de producto
- Cloudflare sirve assets estáticos desde cache edge
- Nginx verifica si tiene la página en FastCGI cache
- Si no está cacheada, PHP-FPM procesa la petición
- Redis devuelve consultas cacheadas (hit) o pasa a MySQL (miss)
- MariaDB ejecuta consultas que no estaban en cache
- La respuesta vuelve por el mismo camino
Con todas las capas optimizadas, una página de producto carga en < 500ms.
Configuración de PHP para e-commerce
WooCommerce necesita más memoria y tiempo de ejecución que WordPress básico.
Configuración php.ini para WooCommerce
; Memoria (WooCommerce es intensivo)
memory_limit = 512M
max_execution_time = 300
max_input_time = 300
max_input_vars = 10000
; Uploads (imágenes de productos, importaciones)
upload_max_filesize = 128M
post_max_size = 128M
; OPcache optimizado
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 32
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1
opcache.validate_timestamps = 0
; Sesiones (crítico para carrito)
session.gc_maxlifetime = 7200
session.cookie_lifetime = 7200
PHP-FPM Pool para tienda
; /etc/php/8.3/fpm/pool.d/tienda.conf
[tienda]
user = tienda
group = tienda
listen = /run/php/php8.3-fpm-tienda.sock
listen.owner = www-data
listen.group = www-data
; Configuración para tráfico variable
pm = dynamic
pm.max_children = 30
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 500
pm.process_idle_timeout = 10s
; Logs de rendimiento
slowlog = /var/log/php-fpm/tienda-slow.log
request_slowlog_timeout = 5s
; Variables de entorno
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
; PHP settings específicos
php_admin_value[memory_limit] = 512M
php_admin_value[max_execution_time] = 300
Reiniciar PHP-FPM
systemctl restart php8.3-fpm
Redis para WooCommerce
Redis es esencial para WooCommerce. Las páginas dinámicas (carrito, checkout, mi cuenta) no se pueden cachear a nivel de página, pero sí las consultas a la base de datos.
Configuración Redis optimizada para e-commerce
# /etc/redis/redis.conf
# Memoria generosa para tienda
maxmemory 512mb
maxmemory-policy allkeys-lru
# Socket Unix (más rápido)
unixsocket /var/run/redis/redis.sock
unixsocketperm 770
# Deshabilitar persistencia (es solo caché)
save ""
appendonly no
# Optimizaciones
tcp-keepalive 300
timeout 0
# Límites de conexiones
maxclients 10000
Configurar WooCommerce para Redis
En wp-config.php:
// Redis Object Cache para WooCommerce
define('WP_REDIS_HOST', '/var/run/redis/redis.sock');
define('WP_REDIS_PORT', 0);
define('WP_REDIS_DATABASE', 0);
// Prefijo único para esta tienda
define('WP_REDIS_PREFIX', 'tienda_');
define('WP_CACHE_KEY_SALT', 'tienda_woo_');
// Activar cache
define('WP_CACHE', true);
// Grupos que NO se cachean (transacciones sensibles)
define('WP_REDIS_IGNORED_GROUPS', [
'counts',
'plugins',
'themes',
]);
Instalar plugin Redis Object Cache
# Por WP-CLI
wp plugin install redis-cache --activate --path=/ruta/a/tienda
# Habilitar object cache
wp redis enable --path=/ruta/a/tienda
Verificar Redis funcionando
# Conexión
redis-cli -s /var/run/redis/redis.sock PING
# Respuesta: PONG
# Ver claves de WooCommerce
redis-cli -s /var/run/redis/redis.sock KEYS "*woo*" | head -10
# Estadísticas de hits/misses
redis-cli -s /var/run/redis/redis.sock INFO stats | grep -E "hits|misses"
Un hit ratio superior al 80% indica buena configuración.
WooCommerce listo para vender
El VPS HestiaCP Administrado viene con Redis, FastCGI cache y PHP optimizados para e-commerce. Tu tienda WooCommerce rendirá desde el primer día.
Caché inteligente (sin romper el carrito)
El error más común con WooCommerce es cachear páginas que no deben cachearse. Si cacheas el checkout, todos los clientes verán el carrito de otra persona.
Páginas que NUNCA se cachean
| Página | Razón |
|---|---|
| /cart/ | Contenido único por usuario |
| /checkout/ | Datos de pago sensibles |
| /my-account/ | Información personal |
| /wishlist/ | Lista personal |
| /order-received/ | Confirmación única |
Páginas que SÍ se cachean
| Página | TTL recomendado |
|---|---|
| Inicio | 1 hora |
| Categorías | 30 minutos |
| Productos | 1 hora |
| Blog | 2 horas |
| Páginas estáticas | 24 horas |
Configuración Nginx para WooCommerce
# Mapa de exclusiones de caché
map $request_uri $skip_cache {
default 0;
# WooCommerce páginas dinámicas
~*/cart/* 1;
~*/checkout/* 1;
~*/my-account/* 1;
~*/order-received/* 1;
~*/add-to-cart/* 1;
~*/wishlist/* 1;
# WordPress admin
~*/wp-admin/* 1;
~*/wp-login.php 1;
~*wp-cron.php 1;
# AJAX
~*/wp-admin/admin-ajax.php 1;
~*wc-ajax 1;
}
# Cookies que invalidan cache
map $http_cookie $skip_cache_cookie {
default 0;
~*wordpress_logged_in 1;
~*woocommerce_cart_hash 1;
~*woocommerce_items_in_cart 1;
~*wp_woocommerce_session 1;
}
# Combinar condiciones
set $do_not_cache 0;
if ($skip_cache) {
set $do_not_cache 1;
}
if ($skip_cache_cookie) {
set $do_not_cache 1;
}
if ($request_method = POST) {
set $do_not_cache 1;
}
# Aplicar FastCGI cache
fastcgi_cache_bypass $do_not_cache;
fastcgi_no_cache $do_not_cache;
Plugin de caché compatible con WooCommerce
WP Rocket (pago) es el más compatible:
- Detecta WooCommerce automáticamente
- Excluye páginas correctamente
- Purga caché al actualizar stock
Alternativa gratuita - W3 Total Cache:
- Page Cache: Disk Enhanced
- En “Never cache the following pages”:
/cart/* /checkout/* /my-account/* /order-received/* - Object Cache: Redis
Configuración de base de datos
WooCommerce hace consultas intensivas. Una base de datos mal optimizada es cuello de botella.
Configuración MariaDB para WooCommerce
# /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
# InnoDB Buffer Pool (60-70% de RAM dedicada a MySQL)
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 4
# Logs más grandes para transacciones
innodb_log_file_size = 512M
innodb_log_buffer_size = 32M
# Flush configuration
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# Query cache (útil para WooCommerce)
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 4M
# Conexiones
max_connections = 200
wait_timeout = 600
interactive_timeout = 600
# Tablas temporales
tmp_table_size = 128M
max_heap_table_size = 128M
# Ordenamiento
sort_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
join_buffer_size = 4M
Índices importantes para WooCommerce
-- Índice para wp_postmeta (crítico)
ALTER TABLE wp_postmeta ADD INDEX meta_key_value (meta_key(191), meta_value(100));
-- Índice para wp_options (autoload)
ALTER TABLE wp_options ADD INDEX autoload (autoload);
-- Verificar índices
SHOW INDEX FROM wp_postmeta;
SHOW INDEX FROM wp_woocommerce_order_items;
Limpieza de base de datos
# Con WP-CLI
wp transient delete --expired
wp wc tool clear_transients
wp db optimize
# O con script SQL
DELETE FROM wp_options WHERE option_name LIKE '%_transient_%';
DELETE FROM wp_postmeta WHERE meta_key LIKE '_wc_session_%' AND meta_value < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 DAY));
SSL y seguridad para pagos
Las pasarelas de pago exigen SSL perfecto. Un error de configuración puede bloquear los pagos.
Verificar SSL
# Verificar certificado
openssl s_client -connect tutienda.com:443 -servername tutienda.com
# Verificar con SSL Labs (debe ser A o A+)
# https://www.ssllabs.com/ssltest/
Forzar HTTPS en WooCommerce
En wp-config.php:
define('FORCE_SSL_ADMIN', true);
// Si estás detrás de proxy (Cloudflare)
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
Configuración de seguridad Nginx
# Headers de seguridad para e-commerce
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# HSTS (solo si SSL funciona perfecto)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Proteger wp-config.php
location = /wp-config.php {
deny all;
}
# Proteger uploads de PHP
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
# Rate limit para login
location = /wp-login.php {
limit_req zone=login burst=3 nodelay;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Permisos de archivos
# Directorios: 755
find /home/usuario/web/tienda.com/public_html -type d -exec chmod 755 {} \;
# Archivos: 644
find /home/usuario/web/tienda.com/public_html -type f -exec chmod 644 {} \;
# wp-config.php: 600 (más restrictivo)
chmod 600 /home/usuario/web/tienda.com/public_html/wp-config.php
Optimización de WooCommerce
Más allá del servidor, WooCommerce necesita ajustes internos.
Configuración wp-config.php para WooCommerce
<?php
// Memoria suficiente
define('WP_MEMORY_LIMIT', '512M');
define('WP_MAX_MEMORY_LIMIT', '512M');
// Reducir revisiones (cada producto las genera)
define('WP_POST_REVISIONS', 3);
// Vaciar papelera más rápido
define('EMPTY_TRASH_DAYS', 7);
// Deshabilitar cron de WordPress (usar sistema)
define('DISABLE_WP_CRON', true);
// Optimización de autoload
define('WP_ALLOW_REPAIR', true);
// Deshabilitar edición de archivos
define('DISALLOW_FILE_EDIT', true);
Configurar cron del sistema
# Crontab para WooCommerce
*/5 * * * * cd /home/usuario/web/tienda.com/public_html && wp cron event run --due-now --quiet
# Limpiar sesiones expiradas (diario)
0 3 * * * cd /home/usuario/web/tienda.com/public_html && wp wc tool clear_expired_sessions --quiet
Plugins esenciales vs bloatware
Plugins que SÍ instalar:
| Plugin | Función |
|---|---|
| Redis Object Cache | Object caching |
| Imagify/ShortPixel | Optimizar imágenes |
| Query Monitor | Debug en desarrollo |
Plugins que evitar:
| Plugin | Problema |
|---|---|
| Jetpack | Muy pesado para e-commerce |
| Plugins de “SEO todo en uno” con funciones innecesarias | Consultas extra |
| Sliders/carruseles pesados | JavaScript bloqueante |
| Plugins de redes sociales | Peticiones externas |
Optimizar imágenes de productos
// En functions.php o plugin
// Limitar tamaños de imagen generados
add_filter('intermediate_image_sizes_advanced', function($sizes) {
unset($sizes['medium_large']);
unset($sizes['1536x1536']);
unset($sizes['2048x2048']);
return $sizes;
});
// Usar WebP
add_filter('upload_mimes', function($mimes) {
$mimes['webp'] = 'image/webp';
return $mimes;
});
Tienda optimizada por expertos
El VPS HestiaCP Administrado incluye optimización específica para WooCommerce: Redis, FastCGI, PHP tuning y monitorización de rendimiento.
Gestión de stock y pedidos
El rendimiento afecta directamente a la gestión de stock y pedidos.
Configuración de stock
En WooCommerce → Ajustes → Productos → Inventario:
- Gestionar stock: Sí
- Retener stock (minutos): 60 (no muy alto)
- Umbral de bajo stock: 5
- Umbral sin stock: 0
- Ocultar productos sin stock: Según negocio
Optimizar consultas de stock
WooCommerce hace muchas consultas de stock. Con miles de productos:
// Reducir consultas de stock en listados
add_filter('woocommerce_product_query_meta_query', function($meta_query) {
// Solo mostrar productos con stock en categorías
$meta_query[] = array(
'key' => '_stock_status',
'value' => 'instock',
);
return $meta_query;
});
Limpiar pedidos antiguos
Los pedidos acumulados ralentizan la base de datos:
# Mover pedidos antiguos a archivo (con plugin)
wp wc tool archive_orders --older-than="365 days"
# O eliminar pedidos cancelados/fallidos muy antiguos
wp post delete $(wp post list --post_type=shop_order --post_status=wc-cancelled --date_query='{"before":"1 year ago"}' --format=ids)
Escalar para Black Friday
Los picos de tráfico son el momento de la verdad.
Preparación semanas antes
- Limpia base de datos - Elimina transients, revisiones, logs
- Optimiza imágenes - Comprime todo con Imagify/ShortPixel
- Reduce plugins - Desactiva todo lo no esencial
- Aumenta recursos - Escala RAM/CPU temporalmente
- Configura CDN - Cloudflare en modo “I’m Under Attack” si necesario
Checklist día anterior
- Backup completo verificado
- Caché purgado y reconstruido
- Redis reiniciado con memoria limpia
- PHP-FPM con max_children aumentado
- Monitorización activa
- Alertas de disco/RAM configuradas
Escalar PHP-FPM para picos
; Configuración temporal para Black Friday
pm = static
pm.max_children = 50
pm.max_requests = 1000
Cloudflare en modo e-commerce
- Cache Level: Standard
- Browser Cache TTL: 4 horas
- Always Online: Activado
- Rocket Loader: Desactivado (puede romper checkout)
Page Rules específicas:
tutienda.com/checkout/* - Cache Level: Bypass
tutienda.com/cart/* - Cache Level: Bypass
tutienda.com/my-account/* - Cache Level: Bypass
tutienda.com/wp-admin/* - Cache Level: Bypass
Monitorización de tienda
No puedes optimizar lo que no mides.
Métricas clave para WooCommerce
| Métrica | Objetivo | Crítico |
|---|---|---|
| TTFB home | < 300ms | > 1s |
| TTFB producto | < 500ms | > 1.5s |
| TTFB checkout | < 800ms | > 2s |
| Tasa conversión | > 2% | < 1% |
| Carritos abandonados | < 70% | > 85% |
| Errores de pago | < 1% | > 5% |
Herramientas de monitorización
# Monitorizar carga en tiempo real
htop
# Conexiones MySQL activas
mysqladmin -u root -p processlist
# Logs de errores PHP
tail -f /var/log/php8.3-fpm.log
# Logs de WooCommerce
tail -f /home/usuario/web/tienda.com/public_html/wp-content/uploads/wc-logs/*.log
Plugin Query Monitor
Para desarrollo, instala Query Monitor. Muestra:
- Consultas SQL lentas
- Hooks que consumen tiempo
- Errores PHP
- Uso de memoria
Importante: Desactívalo en producción.
Alertas automáticas
Configura alertas con Uptime Robot o similar:
- Página de inicio (cada 5 min)
- Página de producto (cada 5 min)
- Checkout (cada 10 min)
Preguntas frecuentes
¿Cuántos productos puede manejar WooCommerce?
Con la configuración correcta, decenas de miles. He visto tiendas con 50,000+ productos funcionando bien. El límite suele ser la RAM y la base de datos, no WooCommerce en sí.
¿WP Rocket o W3 Total Cache para WooCommerce?
WP Rocket es más fácil y tiene mejor integración con WooCommerce. W3TC es gratuito pero requiere configuración cuidadosa. Para tiendas serias, WP Rocket vale la inversión.
¿Por qué mi checkout es lento?
El checkout no se cachea, así que depende de PHP y MySQL puros. Causas comunes: demasiados plugins, pasarela de pago lenta, sin Redis, PHP-FPM mal configurado.
¿Debo usar Cloudflare con WooCommerce?
Sí, pero configurado correctamente. Usa Page Rules para excluir cart/checkout/my-account. No uses Rocket Loader ni Auto Minify de Cloudflare (pueden romper el checkout).
¿Redis es necesario para WooCommerce?
Altamente recomendado. Sin Redis, cada visita al carrito genera decenas de queries a MySQL. Con Redis, esas queries se sirven desde memoria. La diferencia puede ser de 500ms vs 100ms.
¿Cómo manejo stock en tiempo real?
WooCommerce gestiona stock automáticamente. Para stock en tiempo real con sistemas externos (ERP), usa plugins de sincronización o la API REST de WooCommerce con webhooks.
¿Por qué algunos clientes ven carrito vacío?
Probablemente caché mal configurado. Verifica que cart/checkout están excluidos del caché a nivel de Nginx y plugin. También verifica cookies de sesión.
Conclusión
WooCommerce en HestiaCP puede ser una máquina de ventas si configuras cada capa correctamente:
- PHP 8.3 con memoria suficiente y OPcache optimizado
- Redis para cachear consultas de base de datos
- Nginx cache inteligente que respeta carrito y checkout
- MariaDB tuneado con índices y buffer pool adecuados
- SSL perfecto para pasarelas de pago
- Monitorización continua para detectar problemas
El resultado: tiempos de carga inferiores a 1 segundo, conversiones más altas, y un servidor que aguanta picos de tráfico.
Si prefieres tener todo esto configurado y optimizado por expertos, el VPS HestiaCP Administrado de Avantys incluye configuración específica para e-commerce, Redis, cache inteligente y soporte técnico especializado en WooCommerce.
Guías relacionadas
- Cómo instalar HestiaCP en Ubuntu
- Instalar WordPress en HestiaCP
- Configurar SSL en HestiaCP
- Configurar Email en HestiaCP
- Seguridad en HestiaCP
- ¿Qué es HestiaCP?
VPS HestiaCP Administrado
Tu servidor HestiaCP con soporte técnico profesional. Nos encargamos de la administración para que tú te dediques a tus clientes.
VPS HestiaCP Administrado
La potencia de un VPS con el panel HestiaCP, montado y gestionado por nosotros.