← Laboratorio

Por qué tu PrestaShop va lento (y qué parte no es culpa del hosting)

Diagnóstico ordenado de una tienda PrestaShop lenta: imágenes, caché de página y assets que bloquean el pintado. Con lo que no funciona y cómo medirlo.

Publicado: 20/8/2026Revisado: 23/7/202616 min de lectura

Autor y revisor:

Ilustración editorial: Por qué tu PrestaShop va lento (y qué parte no es culpa del hosting)

El segundo y medio que decide la compra

Nadie abandona una tienda mirando el cronómetro. La gente abandona porque, mientras la página se pinta a trozos, deja de tener claro que vaya a funcionar. La lentitud no se percibe como lentitud: se percibe como desconfianza.

Y sin embargo, cuando una tienda PrestaShop va lenta, la conversación siempre empieza en el mismo sitio equivocado: el hosting. Se cambia de plan, se dobla la CPU, y la web sigue tardando lo mismo, porque el problema casi nunca estaba ahí.

Esta guía es el orden en el que conviene mirar. Está escrita para PrestaShop 8 y 9.

Antes de tocar nada: la línea base

Si optimizas sin medir antes, dentro de un mes estarás discutiendo con alguien sobre si la tienda va más rápida o no, y ninguno de los dos tendrá un dato.

Mide con PageSpeed Insights y fíjate en que la herramienta te da dos cosas distintas, aunque las pinte juntas:

Datos de laboratorio. Una simulación en un dispositivo y una red concretos. Cambia al instante cuando tocas algo, y por eso engancha. También es la que más miente sobre lo que vive tu cliente real.

Datos de campo. Lo que Google ha medido en visitantes reales durante los últimos 28 días. Es la que cuenta para el posicionamiento, y es la que tarda un mes en reflejar tu trabajo.

Las tres métricas que importan hoy:

MétricaQué mideUmbral bueno
LCPCuánto tarda en aparecer el elemento principal2,5 s o menos
INPCuánto tarda la página en responder a una interacción200 ms o menos
CLSCuánto se mueve el contenido mientras carga0,1 o menos

Si alguien te habla de FID, está trabajando con documentación vieja: Google lo sustituyó por INP en marzo de 2024.

Anota los tres valores de campo de tu ficha de producto más visitada y de tu categoría más visitada. Esa es tu línea base. Todo lo que viene después se compara contra ella.

Las tres causas reales, por orden de impacto

En las tiendas PrestaShop que llegan pidiendo velocidad, el reparto es casi siempre el mismo:

  1. Imágenes sin optimizar. Suelen ser más de la mitad del peso de la página.
  2. Ausencia de caché de página completa. Es lo que dispara el tiempo hasta el primer byte.
  3. CSS y JavaScript que bloquean el pintado. Es lo que hace que la página esté “ahí” pero en blanco.

El orden importa, porque el esfuerzo de cada una es muy distinto y la primera es la más barata.

Imágenes: la mitad del problema

PrestaShop genera miniaturas en varios tamaños al subir un producto. El problema es lo que genera y en qué formato.

Desde PrestaShop 8.1 puedes elegir el formato en Diseño → Ajustes de imagen. Activa WebP y deja también el formato original marcado: PrestaShop servirá WebP a los navegadores que lo admiten y mantendrá el JPEG como respaldo. AVIF comprime todavía más, pero conviene tratarlo como un extra, no como el formato principal.

Después de cambiar el formato hay que regenerar las miniaturas, y ese proceso en catálogos grandes se cae por tiempo de ejecución. Si la regeneración se interrumpe a mitad, súbele los límites antes de repetirla:

; php.ini o .user.ini
max_execution_time = 600
memory_limit = 512M

Dos detalles que no salen en ningún panel y valen mucho:

La imagen del primer pantallazo no debe ir en carga diferida. El loading="lazy" en la imagen principal de la ficha retrasa exactamente lo que Google mide como LCP. Va en las de abajo, nunca en la de arriba.

Toda imagen necesita width y height en el HTML. Sin ellos el navegador no sabe cuánto sitio reservar, y el texto salta cuando la imagen entra. Eso es CLS, y es la métrica más fácil de arreglar y la que más gente ignora.

<img src="/img/p/1/2/12-home_default.webp"
     width="450" height="450"
     alt="Zapato de piel marrón, vista lateral">

Lo que este cambio no arregla: las imágenes que alguien pegó a mano dentro de la descripción HTML de un producto. Esas no pasan por el sistema de miniaturas de PrestaShop y se sirven tal cual se subieron, a menudo a 3.000 píxeles de ancho.

Caché: por qué PrestaShop es lento por diseño

Aquí está la confusión más cara de todas, y la tiene casi todo el mundo.

En Parámetros avanzados → Rendimiento hay una sección de caché de plantillas y otra de caché. Ninguna de las dos es caché de página completa.

La caché de Smarty guarda las plantillas ya compiladas para no volver a convertir el .tpl en PHP en cada visita. Ahorra compilación. No ahorra ni una sola consulta a la base de datos.

La caché de PrestaShop (ficheros, APCu, Memcached) guarda objetos sueltos. Ayuda, pero la página se sigue montando entera en cada visita.

Y montar una ficha de producto de PrestaShop significa, tirando por lo bajo, un par de centenares de consultas: precios con sus reglas, stock, combinaciones, transportistas, y cada hook de cada módulo instalado pidiendo lo suyo. Eso es lo que se te va en el tiempo hasta el primer byte, y ninguna de las dos cachés lo toca.

Lo que cambia el tiempo de respuesta es servir HTML ya montado. Es decir: la primera visita paga las doscientas consultas, y las siguientes reciben el resultado guardado sin tocar la base de datos.

Ajustes recomendados en producción, mientras tanto:

Modo depuración .................... No
Recompilar plantillas .............. Nunca recompilar
Caché de plantillas ................ Activada
Combinar, comprimir y cachear ...... Activado (con cuidado, ver abajo)

El punto delicado de la caché de página completa no es guardarla: es invalidarla en el momento justo. Una caché que no se limpia sola cuando cambias un precio te deja vendiendo a un importe viejo, y eso es peor que ir lento. Cualquier solución que adoptes tiene que invalidar al menos cuando cambia un producto, una categoría, un contenido CMS o la configuración de la tienda.

Y tiene que guardar variantes por contexto. Un mismo HTML no vale para un visitante anónimo y para uno con sesión iniciada y precios de grupo distintos. Si tu caché no distingue, acabarás enseñándole a un cliente el carrito de otro. Es un fallo raro, grave y difícil de reproducir: pregunta siempre por esto antes de instalar nada.

El CSS y el JS que bloquean el pintado

PrestaShop trae una opción llamada CCC (combinar, comprimir y cachear) en la misma pantalla de rendimiento. Junta los ficheros CSS y JS en uno solo para hacer menos peticiones.

Funciona, y a veces rompe cosas. El orden en que se combinan los ficheros no siempre respeta las dependencias entre módulos, así que actívalo, recorre la tienda entera —ficha, categoría, carrito, checkout, cuenta de cliente— y mira la consola del navegador. Si aparece un error de JavaScript que antes no estaba, ya sabes por qué.

Pero antes de combinar, conviene quitar. La pregunta útil no es “¿cómo cargo estos cuarenta ficheros más rápido?”, sino “¿por qué se cargan los cuarenta en todas las páginas?”.

Muchos módulos registran sus assets en el hook header sin comprobar en qué controlador están. Resultado: el JavaScript del comparador de productos viaja en el checkout, donde no hay nada que comparar. Un módulo bien hecho hace esto:

public function hookActionFrontControllerSetMedia()
{
    // Solo donde hace falta: cargar en todas las páginas es la causa
    // habitual de que una tienda arrastre cientos de KB inútiles.
    if ($this->context->controller->php_self !== 'product') {
        return;
    }

    $this->context->controller->registerJavascript(
        'modules-mimodulo',
        'modules/' . $this->name . '/views/js/front.js',
        ['position' => 'bottom', 'priority' => 150]
    );
}

Revisar esto módulo a módulo es trabajo manual y aburrido, y suele ser lo que más peso quita.

Lo que no funciona

Subir de plan de hosting sin diagnosticar. Si el tiempo se va en doscientas consultas por página, un procesador más rápido las hace igual de innecesarias, solo que un poco antes. Es la compra más habitual y la que menos devuelve.

Los módulos “optimizadores” que minifican y ya. Minificar CSS ahorra kilobytes; no ahorra consultas. La mejora se nota en la puntuación de laboratorio y no se nota en el tiempo hasta el primer byte, que es lo que sufre tu cliente.

Borrar la caché a mano cada mañana. Si alguien tiene esa costumbre es porque la invalidación automática no funciona. Arregla la invalidación, no cojas el hábito.

Perseguir el 100 en PageSpeed. Los últimos puntos se pagan carísimos y casi siempre a costa de romper algo. Con estar en verde en las tres métricas de campo has terminado.

Optimizar la portada. Es la página que menos tráfico orgánico recibe en casi cualquier tienda. Optimiza la plantilla de ficha de producto y la de categoría, que son el 80% de las visitas de Google.

Cómo demostrar que has mejorado

Vuelve a medir las mismas dos URLs de la línea base, y ten paciencia con los datos de campo: la ventana de Google es de 28 días móviles, así que un cambio bueno tarda un mes en verse completo y las dos primeras semanas parecerá que no ha servido de nada.

Mientras tanto, la métrica honesta de andar por casa es el tiempo hasta el primer byte con la caché caliente. Se mide sin herramientas:

curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\n" https://tutienda.es/categoria/

Lánzalo dos veces seguidas. La primera puede ser lenta —está generando y guardando—; la segunda es la que cuenta. Si la segunda sigue por encima de medio segundo, la caché de página no está funcionando o no está guardando esa URL.

Cuándo sí es el hosting

Después de todo lo anterior, si el TTFB con caché caliente sigue alto, entonces sí toca mirar el servidor. Señales de que el problema es de alojamiento y no de configuración:

  • La segunda petición a una página cacheada tarda más de medio segundo.
  • El panel muestra la CPU al límite con tráfico normal.
  • La base de datos está en un servidor distinto y con latencia entre ambos.
  • Estás en un plan compartido donde el rendimiento cambia según la hora.

Ahí un cambio de plan sí devuelve lo que cuesta. Antes, no.

Si te apañas con esto, no necesitas nada más

Todo lo de esta guía se puede hacer a mano, y si tu catálogo es pequeño y no lo tocas a menudo, hacerlo a mano es perfectamente razonable.

Lo que se complica con el tamaño es lo de siempre: regenerar miniaturas de miles de productos sin que se caiga el proceso, invalidar la caché de página en el momento exacto en que cambia un precio, y tener guardado el antes y el después para poder enseñarlo. Eso es mantenimiento, no ingenio.

Ampliación editorial · revisión 2026

La decisión central de esta guía

¿Por qué va lento mi PrestaShop y por dónde conviene empezar?

Casi siempre por tres cosas en este orden: imágenes sin optimizar, ausencia de caché de página completa y assets que bloquean el pintado. La caché de Smarty y la de objetos que trae PrestaShop no evitan que la página se monte entera en cada visita, y montar una ficha son cientos de consultas entre precios, stock, combinaciones y hooks de módulos.

Decisión

Mide antes de tocar y guarda la línea base. Empieza por las imágenes, que es lo más barato, sigue por la caché de página y deja el servidor para el final. Cambiar de plan de hosting sin diagnosticar es la compra más habitual y la que menos devuelve.

Evidencia

Compara datos de campo de la misma ficha de producto y la misma categoría antes y después, sabiendo que la ventana de Google es de 28 días móviles. Entre medias, el tiempo hasta el primer byte con la caché caliente, medido con curl dos veces seguidas, dice si la caché de página está funcionando de verdad.

Límite

No se dan porcentajes de mejora ni promesas de puntuación: dependen del tema y de los módulos de cada tienda. La caché de página exige invalidación correcta y variantes por contexto; sin las dos cosas puede servir precios viejos o mezclar sesiones, que es peor que ir lento.

Carrito y panel visual que representan una operación ecommerce
Visual editorial relacionada con el sistema analizado en esta guía.

Marco técnico

Arquitectura de ecommerce orientada a compra y operación

Un ecommerce coordina descubrimiento, decisión, pago, inventario, entrega y postventa. La interfaz es solo la capa visible. La calidad depende de que producto, precio, stock, cliente y pedido tengan reglas claras y de que las excepciones puedan resolverse sin perder trazabilidad.

La plataforma se selecciona después de modelar catálogo, clientes, países, impuestos, pagos, transportistas e integraciones. PrestaShop, WooCommerce o Shopify pueden resolver bien escenarios diferentes. Comparar solo precio de licencia ignora módulos, hosting, soporte, comisiones, actualización y coste de salida.

La ficha de producto reduce incertidumbre. Nombre, imágenes, variantes, medidas, disponibilidad, entrega, devolución y soporte aparecen con una jerarquía coherente. Las descripciones duplicadas del fabricante no expresan experiencia ni diferencian. El contenido responde preguntas que llegan a ventas y utiliza datos estructurados solo cuando la información existe en pantalla.

Analítica para revisar compra, checkout y rentabilidad
La segunda imagen separa diagnóstico y aplicación para reducir fatiga de lectura.

El checkout elimina campos que no cambian la entrega o el pago, conserva datos ante error y comunica el coste antes del último paso. Compra como invitado, métodos rápidos y autocompletado pueden ayudar, pero se validan por dispositivo y mercado. Reducir pantallas no compensa una política confusa o un pago que falla.

Stock y pedido requieren reconciliación. La tienda no debe prometer disponibilidad que el sistema maestro no puede sostener. Cuando una integración falla, el equipo necesita alerta, contexto e instrucciones. Los reintentos no pueden duplicar pedidos y los estados visibles para el cliente deben corresponder con el trabajo real.

Lista de control antes de ejecutar

  1. 01
    Catálogo gobernado

    Taxonomía, atributos, variantes, imágenes y propietario están definidos.

  2. 02
    Compra móvil probada

    Búsqueda, ficha, carrito, teclado, pago y errores funcionan en pantalla pequeña.

  3. 03
    Coste transparente

    Impuestos, envío, plazos y devolución aparecen antes de confirmar.

  4. 04
    Stock reconciliable

    Existe un dato maestro y un procedimiento para resolver diferencias.

  5. 05
    SEO de ciclo completo

    Filtros, paginación, variantes, agotados y retirados tienen política explícita.

  6. 06
    Rentabilidad medida

    Compra se conecta con margen, comisión, logística, devolución y soporte.

Qué medir para saber si funciona

Observa búsqueda sin resultados, uso de filtros, selección de variante, añadir al carrito, inicio de checkout, error, pago y compra. Segmenta por dispositivo, método y origen. Un embudo agregado puede ocultar que una sola pasarela o navegador concentra el problema.

La operación añade exactitud de stock, pedidos retenidos, tiempo de preparación, entrega, devolución y contacto. La mejora de conversión solo es sostenible cuando el equipo puede servir el volumen y el margen resultante justifica adquisición y soporte.

Playbook propio de esta guía

Diagnóstico ordenado de una tienda PrestaShop lenta

Esta ampliación desarrolla el problema específico de por qué tu prestashop va lento (y qué parte no es culpa del hosting) y no se reutiliza en otras entradas del Laboratorio.

Medir antes de tocar

La primera medición no se hace para mejorar nada, sino para tener con qué comparar después. PageSpeed Insights devuelve dos bloques que conviene no confundir: los datos de laboratorio son una simulación que reacciona al instante a cualquier cambio, y los datos de campo son lo que Google ha medido en visitantes reales durante los últimos veintiocho días. Los primeros enganchan porque se mueven; los segundos son los que cuentan para el posicionamiento y los que tardan un mes en reflejar el trabajo hecho.

Elige dos URLs y no las cambies: la ficha de producto más visitada y la categoría más visitada. La portada no sirve como referencia porque en casi cualquier tienda es la página que menos tráfico orgánico recibe, y optimizarla da una sensación de avance que no se traduce en visitas. Anota LCP, INP y CLS de campo de esas dos URLs y guarda la fecha. Esa es la línea base contra la que se juzga todo lo que venga después.

Imágenes y caché, por ese orden

Las imágenes suelen ser más de la mitad del peso de la página y son lo más barato de arreglar. Desde PrestaShop 8.1 el formato se elige en los ajustes de imagen: activar WebP manteniendo el formato original permite servir el archivo ligero a quien lo admite sin perder el respaldo. Después hay que regenerar las miniaturas, proceso que en catálogos grandes se interrumpe por límite de ejecución, así que conviene subir el tiempo y la memoria antes de lanzarlo. Dos detalles valen más que el formato: la imagen del primer pantallazo nunca debe llevar carga diferida, y toda imagen necesita ancho y alto declarados o el texto saltará al cargar.

La caché es donde está la confusión más cara. La caché de plantillas ahorra compilar Smarty y la caché de objetos guarda piezas sueltas, pero ninguna de las dos evita que la ficha se monte entera en cada visita, con sus cientos de consultas de precios, stock, combinaciones, transportistas y hooks de módulos. Lo que cambia el tiempo de respuesta es servir HTML ya montado. El requisito no negociable de esa caché es doble: invalidarse sola cuando cambia un producto, una categoría o la configuración, y guardar variantes por contexto para no enseñarle a un cliente el carrito de otro.

Quitar antes que combinar

La opción de combinar, comprimir y cachear que trae PrestaShop junta los ficheros CSS y JavaScript para hacer menos peticiones. Funciona y a veces rompe cosas, porque el orden de combinación no siempre respeta las dependencias entre módulos. Si se activa, hay que recorrer la tienda entera —ficha, categoría, carrito, checkout, cuenta— con la consola del navegador abierta, y no solo la portada. Un error de JavaScript que antes no estaba es la señal de que algún módulo dependía del orden anterior.

Antes de combinar conviene quitar. La pregunta útil no es cómo cargar cuarenta ficheros más rápido, sino por qué se cargan los cuarenta en todas las páginas. Muchos módulos registran sus assets sin comprobar en qué controlador están, y así el JavaScript del comparador de productos acaba viajando en el checkout. Revisar esto módulo a módulo es trabajo manual y aburrido, y normalmente es lo que más peso quita de toda la lista.

Cuaderno de campo: la lentitud que no se arregla con más servidor

La conversación sobre velocidad casi siempre empieza en el sitio equivocado, y el motivo es comprensible: el hosting es lo único que se puede cambiar con una tarjeta y sin tocar código. Se sube de plan, se dobla el procesador y la tienda tarda prácticamente lo mismo, porque el tiempo no se iba en potencia sino en trabajo innecesario. Una ficha de producto de PrestaShop, con un puñado de módulos instalados, resuelve del orden de un par de centenares de consultas antes de devolver la primera letra del HTML: precios con sus reglas, stock, combinaciones, transportistas y cada hook pidiendo lo suyo. Un procesador más rápido hace esas consultas igual de innecesarias, solo que termina un poco antes. Por eso el orden correcto de diagnóstico coloca el servidor al final y no al principio: no porque el alojamiento nunca sea el problema, sino porque comprobarlo antes de haber quitado el trabajo sobrante lleva a pagar más por hacer lo mismo.

La segunda trampa es más sutil y la sufre quien sí hace el trabajo: confundir la puntuación con la experiencia. PageSpeed devuelve un número grande y de color, y ese número se mueve en cuanto minificas cuatro hojas de estilo. Los datos de campo, que son los que Google usa realmente, no se mueven, porque el visitante seguía esperando lo mismo a que el servidor montara la página. Ahí es donde se abandonan muchos proyectos de optimización: dos semanas después del trabajo, el informe de experiencia de usuario sigue en ámbar y la conclusión que se saca es que esto no sirve para nada. En realidad la ventana de Google es de veintiocho días móviles, así que a las dos semanas solo la mitad de los datos corresponde al sitio mejorado. Conviene decirlo antes de empezar, porque gestionar esa espera forma parte del trabajo tanto como configurar la caché.

La caché de página completa es la pieza que más cambia el resultado y también la única que puede hacer daño de verdad. Guardar HTML ya montado es fácil; el problema es decidir cuándo deja de ser válido. Una caché que no se entera de que has cambiado un precio te deja vendiendo al importe antiguo, y eso no es un problema de rendimiento sino uno comercial y potencialmente legal. Peor todavía es una caché que no distingue contexto: si el HTML guardado para un visitante anónimo se le sirve a un cliente con sesión iniciada, ese cliente puede ver el carrito de otra persona. Es un fallo raro, difícil de reproducir y gravísimo cuando ocurre, y es la primera pregunta que hay que hacerle a cualquier solución de caché antes de instalarla, por delante de cuánto promete acelerar.

Sobre resolverlo a mano o con un módulo, el criterio vuelve a ser de mantenimiento y no de conocimiento. Nada de lo que hay en esta guía es secreto: los ajustes están documentados y las decisiones se entienden en una tarde. Lo que se paga es que la regeneración de miniaturas de varios miles de productos no se caiga a la mitad, que la invalidación se dispare en el momento exacto en que alguien cambia un precio desde el back office, y que exista guardado el antes y el después para poder enseñárselo a quien pregunte si el dinero sirvió de algo. Si el catálogo es pequeño y se toca poco, hacerlo a mano es razonable y además enseña cómo funciona la tienda por dentro. Si el catálogo es grande y lo mueven varias personas al día, lo que falla no es la configuración inicial sino la disciplina para sostenerla.

Comprobaciones antes de cerrar

  1. 01
    Hay línea base guardada

    Dos URLs fijas con sus datos de campo y la fecha. Sin eso, dentro de un mes la discusión será de impresiones.

  2. 02
    La imagen del primer pantallazo no va diferida

    El atributo de carga diferida en la imagen principal retrasa justo lo que Google mide como LCP.

  3. 03
    Todas las imágenes llevan ancho y alto

    Sin ellos el navegador no reserva sitio y el contenido salta. Es el CLS más fácil de evitar.

  4. 04
    La caché de página se invalida sola

    Si alguien la borra a mano cada mañana, la invalidación automática no funciona. Arregla eso, no cojas el hábito.

  5. 05
    La caché distingue el contexto

    Un mismo HTML no vale para un anónimo y para un cliente con precios de grupo. Preguntarlo antes de instalar nada.

  6. 06
    El TTFB se mide con la caché caliente

    Dos peticiones seguidas: la primera genera, la segunda es la que cuenta. Por encima de medio segundo, algo no se está cacheando.

Repite el diagnóstico después de cada actualización de PrestaShop y cada vez que se instale un módulo nuevo, que es cuando reaparecen los assets globales y las invalidaciones que dejan de funcionar. Si la puntuación de laboratorio mejora y los datos de campo no se mueven en dos meses, el trabajo se ha ido en minificar y no en reducir el tiempo de respuesta.

Pasos del procedimiento

  1. 1. Fija una línea base antes de tocar nada

    Mide con PageSpeed Insights y anota los datos de campo, no solo los de laboratorio. Sin línea base no podrás demostrar que has mejorado algo, y acabarás discutiendo impresiones.

  2. 2. Empieza por las imágenes, que son la mitad del peso

    Activa el formato WebP en los ajustes de imagen, regenera las miniaturas y comprueba que la imagen del primer pantallazo lleva width y height declarados.

  3. 3. Pon caché de página completa, no solo caché de plantillas

    La caché de Smarty ahorra compilación, no consultas. Lo que cambia el tiempo de respuesta es servir HTML ya montado, con invalidación automática al cambiar un producto o una categoría.

  4. 4. Quita del camino el CSS y el JS que bloquean el pintado

    Revisa qué módulos inyectan assets en todas las páginas cuando solo hacen falta en una. Combinar y minificar ayuda; quitar lo que sobra ayuda más.

  5. 5. Vuelve a medir y compara contra la línea base

    Deja pasar al menos 28 días para que los datos de campo reflejen el cambio. El laboratorio se mueve al instante; el informe de experiencia de usuario de Google, no.

  6. 6. Solo entonces mira el servidor

    Si con la caché caliente el tiempo hasta el primer byte sigue por encima de medio segundo, ahí sí tienes un problema de alojamiento y no de configuración.

Control editorial

Metodología y fuentes

El orden de diagnóstico procede de trabajos de optimización sobre tiendas PrestaShop 8 y 9. No se prometen porcentajes de mejora: dependen del catálogo, del tema y de los módulos instalados, y darlos como cifra general sería inventarlos. Los umbrales de Core Web Vitals son los publicados por Google.