PrestaShop y el parámetro resultsPerPage: ¿tienes problemas de rendimiento?

Si tienes una tienda online en PrestaShop, es muy probable que en los últimos meses hayas notado caídas del servidor, lentitud inesperada o picos de consumo de recursos sin una causa aparente. No eres el único. Estamos viendo este problema cada vez más en tiendas de todos los tamaños, y tiene un culpable claro: los rastreadores automáticos de inteligencia artificial y los bots de scraping.
¿Qué está pasando exactamente?
Los motores de IA, los rastreadores de precios y otros bots recorren Internet de forma continua para recopilar información de las tiendas online. No es nada nuevo, pero la intensidad ha crecido enormemente en los últimos tiempos, y algunos de estos bots están aprovechando el parámetro resultsPerPage.
Este parámetro es el que controla cuántos productos muestra una página de categoría o de resultados de búsqueda. El problema es que PrestaShop no pone ningún límite a este valor por defecto. Eso significa que un bot puede hacer una petición como esta:
https://tutienda.com/categoria?resultsPerPage=99999
¿Y qué ocurre? Que PrestaShop obedientemente intenta recuperar de la base de datos los 99.999 productos solicitados. Si tu categoría tiene miles de referencias, la consulta es tan pesada que puede saturar el servidor y dejarte la tienda caída durante minutos… o más.
No es un ataque sofisticado. No hace falta ningún conocimiento especial. Cualquier bot —o persona con malas intenciones— puede hacerlo con una simple URL manipulada. Y lo estamos viendo en tiendas reales, con consecuencias reales.
¿Por qué ocurre esto?
El parámetro resultsPerPage está pensado para que los usuarios puedan elegir entre ver 12, 24 o 36 productos, y en condiciones normales funciona perfectamente. El problema surge cuando un bot lo usa de forma abusiva con valores extremos, algo para lo que ninguna plataforma está preparada por defecto. No es un fallo de diseño, simplemente es un escenario que hasta hace poco nadie contemplaba con esta intensidad.
La solución: limitar el número máximo de productos por página
Desde Amarillo Limón hemos desarrollado un módulo específico para resolver este problema. La idea es sencilla: establecer un máximo razonable de productos por página, de forma que aunque un bot pida 99.999, el servidor nunca devuelva más del límite que tú hayas configurado.
El módulo es compatible con PrestaShop 1.7.x, 8.x y 9.x, y lo hemos publicado de forma completamente gratuita.
¿Cómo funciona técnicamente?
Para quien quiera entrar en detalle: el módulo se engancha al hook hookActionProductSearchProviderRunQueryBefore, que se ejecuta justo antes de que PrestaShop lance la consulta a la base de datos. Si no sabes como funcionan los hooks, puedes consultar este artículo de nuestro blog: Cómo funcionan los hooks en PrestaShop.
En ese momento, comprueba si el número de resultados solicitado supera el límite configurado, y si es así, lo reduce automáticamente. La tienda sigue funcionando con normalidad para el usuario, pero el servidor ya no recibe peticiones abusivas.
public function hookActionProductSearchProviderRunQueryBefore(array $params)
{
$query = $params['query'];
$limit = (int) Configuration::get(self::CONFIG_KEY);
if ($limit <= 0) {
$limit = self::DEFAULT_LIMIT;
}
if ($query->getResultsPerPage() > $limit) {
$query->setResultsPerPage($limit);
}
}
Sencillo, limpio y eficaz.
¿Cómo instalo el módulo?
La instalación es igual que cualquier otro módulo de PrestaShop:
- Descarga el módulo desde el enlace al final de este artículo.
- Entra en el panel de administración de tu tienda y ve a Módulos > Gestión de módulos.
- Haz clic en Subir un módulo y selecciona el archivo descargado.
- Una vez instalado, accede a la configuración del módulo y establece el número máximo de productos por página que consideres razonable (recomendamos entre 60 y 120).
Y listo. A partir de ese momento, ningún bot podrá solicitar más productos de los que hayas autorizado.
¿Quién debería instalar este módulo?
Cualquier tienda PrestaShop con un catálogo amplio debería valorarlo, pero es especialmente recomendable si:
- Tienes categorías con cientos o miles de productos.
- Has notado picos de consumo de CPU o memoria sin causa aparente.
- Tu proveedor de hosting te ha avisado de un uso excesivo de recursos.
- Tu tienda ha sufrido caídas intermitentes que no tienen una explicación clara.
- Apareces en comparadores de precios o tienes competidores activos que podrían usar scrapers.
Descarga gratuita
Puedes descargar el módulo Amarillo Limón Limit Category Results desde este enlace: amarillolimonlimitcategoryresults.zip
Si tienes cualquier duda sobre la instalación o quieres que echemos un vistazo a la configuración de tu tienda, no dudes en contactarnos. En Amarillo Limón llevamos años trabajando con PrestaShop y estaremos encantados de ayudarte.
Javier Pardo Muñoz es Ingeniero Informático, formado en la Universidad de Córdoba. Como analista y desarrollador full stack, lleva más de 15 años desarrollando proyectos web, siempre en busca de la innovación y defendiendo el software libre.
Su especialidad es el desarrollo de plataformas ecommerce, con una afinidad particular por Prestashop.
