# Filtros por Facetas AJAX para PrestaShop — Documentación

> Esta guía cubre la instalación, configuración y explotación del módulo Filtros por Facetas AJAX para PrestaShop 8 y 9. El módulo sustituye la búsqueda por facetas nativa por una navegación…

- Página: <https://www.datafirefly.com/es/documentation/filtros-facetas-ajax-prestashop/>
- Idioma: es
- Actualizado el: 2026-09-22
- Otros idiomas: [fr](https://www.datafirefly.com/documentation/filtres-facettes-ajax-prestashop/index.md), [en](https://www.datafirefly.com/en/documentation/ajax-faceted-filters-prestashop/index.md), [de](https://www.datafirefly.com/de/documentation/ajax-facettenfilter-prestashop/index.md), [it](https://www.datafirefly.com/it/documentation/filtri-faccette-ajax-prestashop/index.md), [pl](https://www.datafirefly.com/pl/documentation/filtres-facettes-ajax-prestashop/index.md), [pt](https://www.datafirefly.com/pt/documentation/filtres-facettes-ajax-prestashop/index.md), [nl](https://www.datafirefly.com/nl/documentation/filtres-facettes-ajax-prestashop/index.md)
- Índice: <https://www.datafirefly.com/es/documentation/llms.txt>

Esta guía cubre la instalación, configuración y explotación del módulo **Filtros por Facetas AJAX** para PrestaShop 8 y 9. El módulo sustituye la búsqueda por facetas nativa por una navegación AJAX más rápida, un slider de precio con histograma y un control preciso de la indexación SEO de las páginas filtradas.

## Instalación

En tu back-office, abre **Módulos > Gestor de módulos**, haz clic en _Subir un módulo_ y suelta el archivo `dffacetedfilter.zip`. Al instalarse, el módulo automáticamente:

- crea sus tablas y su pestaña de administración;
- ejecuta una primera sincronización de facetas desde tu catálogo;
- precalienta el índice de precios (en unos segundos).

El módulo tiene prioridad en el hook `productSearchProvider` para ejecutarse por delante de la búsqueda por facetas nativa de PrestaShop. No se sobrescribe ningún archivo de tu tema.

## Primera configuración

Ve a **Catálogo > Filtros por facetas**. Allí encontrarás la lista de facetas, un panel de resumen y los ajustes generales y SEO.

### Sincronizar las facetas

El botón **Sincronizar desde el catálogo** crea automáticamente las facetas que faltan a partir de tus grupos de atributos, tus características y las facetas integradas (precio, marca, rebajas, disponibilidad, estado). Las facetas existentes nunca se modifican: puedes relanzar la sincronización con total seguridad tras añadir un atributo o una característica.

### Reconstruir el índice de precios

El botón **Reconstruir el índice de precios** recalcula los límites de precio de todos los productos, por lotes, con una barra de progreso. Lánzalo tras la instalación y después de cualquier importación masiva de productos.

## Gestionar las facetas

Cada fila puede reordenarse arrastrando y soltando (el orden define tanto el orden de visualización en el front como el orden normalizado de las URLs), activarse o desactivarse, y editarse.

### Opciones de una faceta

- **Etiqueta**: el nombre mostrado, traducible por idioma.
- **Visualización**: casillas, muestras de color / textura, o enlaces simples. Los grupos de color heredan automáticamente la visualización en muestras.
- **Multiselección**: permite seleccionar varios valores de una misma faceta a la vez, combinados con O.
- **Mostrar contadores**: muestra el número de productos junto a cada valor.
- **Ocultar valores vacíos**: oculta los valores con cero productos en lugar de mostrarlos atenuados.
- **Plegada por defecto**: la faceta se muestra cerrada y el visitante la despliega al hacer clic.
- **Valores antes de «Ver más»**: número de valores visibles antes del botón de expansión (0 = mostrar todos).

Se aplica el **conteo disyuntivo**: cada faceta se cuenta teniendo en cuenta todas las demás selecciones, pero no la suya. Seleccionar «Rojo» nunca pone «Azul» a cero dentro de la misma faceta.

## El slider de precio y su índice

La faceta Precio se muestra como un doble control deslizante. Encima, un histograma de distribución de productos en doce tramos ayuda al visitante a situar los precios. Estos datos provienen de un índice de precios dedicado, separado de las tablas de PrestaShop, para mantener la rapidez incluso en catálogos grandes.

### Mantenimiento del índice

El índice se actualiza en tiempo real mediante hooks cuando cambia un producto, un precio específico o una combinación. Para una reconstrucción completa planificada, usa el endpoint cron mostrado en el back-office:

```
/module/dffacetedfilter/cron?token=TU_TOKEN
```

La llamada procesa el índice por tramos con un límite de tiempo de unos 20 segundos; si quedan productos, la respuesta devuelve la URL de continuación para volver a llamar. Una llamada nocturna diaria es suficiente en la mayoría de los casos.

El ajuste **Filtrar precios con impuestos** determina si el slider razona con precios con o sin impuestos. El índice almacena los precios en la moneda por defecto; la visualización se convierte a la moneda actual.

## La faceta Rebajas

La faceta **En rebajas** filtra los productos actualmente con descuento: productos marcados como «en oferta» o cubiertos por un precio específico activo (una reducción en curso, dentro de su rango de fechas, para la moneda, el país y el grupo actuales). Se crea activada por defecto durante la sincronización.

## Disponibilidad y estado

Se crean dos facetas integradas complementarias, desactivadas, para activar según necesites:

- **Disponibilidad**: un valor «En stock» que respeta tu ajuste de pedido en rotura de stock.
- **Estado**: nuevo, usado, reacondicionado.

## Restringir una faceta a categorías

Por defecto, una faceta aparece en todas las páginas de listado. El formulario de edición ofrece dos campos para cambiarlo: una **regla de categorías** y el árbol de **categorías** al que se aplica.

- **Mostrar solo en las categorías de abajo**: la faceta aparece únicamente en las categorías marcadas y sus subcategorías. Es el ajuste correcto para mostrar «Talla» solo en Calzado, o «Tamaño de pantalla» solo en Tecnología.
- **Mostrar en todas partes salvo en las categorías de abajo**: la faceta aparece en toda la tienda, excepto en las categorías marcadas y sus subcategorías. Es el ajuste correcto para ocultar «Tipo de vino» en Vinos Tintos y Vinos Blancos, donde la faceta no aporta nada, manteniéndola en el resto.

**Desmarcar una categoría nunca oculta una faceta.** Mientras el árbol esté enteramente sin marcar, la regla no se aplica y la faceta sigue siendo global. Para retirar una faceta de unas pocas categorías hay que _marcarlas_ y elegir la regla «salvo».

Una regla puesta en una categoría cubre también sus subcategorías. Marcar «Vinos» en modo «solo» muestra por tanto la faceta en Vinos Tintos y Vinos Blancos: para excluir esas dos, cambia al modo «salvo» y márcalas directamente.

## La SEO de las facetas

Es uno de los puntos fuertes del módulo: decides con precisión qué páginas filtradas pueden indexarse. Las URLs de filtros son legibles y siguen este formato:

```
/categoria?dff=color:rojo,azul-marino/precio:10,50/marca:nike
```

El parámetro se llama `q` en lugar de `dff` en modo Creative Elements completo; el formato en sí es idéntico. Las facetas se separan con una barra, el slug de la faceta y sus valores con dos puntos, y los valores entre sí con una coma. El orden de las facetas y la ordenación de los valores están normalizados para que una misma combinación produzca siempre una única URL canónica.

### Ajustes SEO

- **Indexable (por faceta)**: una faceta no indexable fuerza la página filtrada a `noindex, follow` y añade `rel="nofollow"` en sus enlaces.
- **N.º máx. de valores indexables**: por encima de este número de valores seleccionados, la página pasa a `noindex, follow`. El valor 1 es el más seguro contra la explosión del presupuesto de rastreo.
- **Canónica propia en páginas indexables**: las páginas indexables reciben una etiqueta canónica que apunta a su propia URL de filtro normalizada. La canónica del tema se elimina en el front para evitar duplicados.
- **Todo a noindex**: fuerza `noindex, follow` en todas las páginas filtradas, sean cuales sean los ajustes por faceta.

Una página filtrada también se pone en `noindex, follow` cuando hay un parámetro de ordenación presente, ya que es un duplicado de la página en su orden por defecto.

## Modos AJAX

El ajuste **Modo AJAX** determina cómo se actualiza la página al hacer clic en un filtro:

- **Tema (eventos nativos)** — recomendado: el módulo emite el evento nativo de PrestaShop y deja que el núcleo y el tema refresquen la lista, las facetas y el historial del navegador. Es el modo más compatible con los temas basados en classic.
- **Autogestionado**: para temas no estándar, el módulo obtiene la página por AJAX él mismo y reemplaza los bloques correspondientes. Úsalo solo si el modo Tema no refresca la página correctamente.

## Mantener a los robots lejos de los filtros

Una etiqueta `noindex` impide la indexación, no la carga: el robot tiene que descargar primero la página para leer la etiqueta. Para que deje de cargar las combinaciones de filtros, no debe descubrirlas. Dos ajustes se encargan de ello, en **Catálogo > Filtros por facetas**.

- **Enlaces de filtros rastreables**: _Solo facetas indexables_ conserva un enlace real en las facetas que declaraste indexables y convierte las demás en enlaces gestionados por JavaScript. Tus clientes hacen clic exactamente igual que antes, pero los robots ya no encuentran esas combinaciones en la página.
- **Antiguas URLs de filtros nativas (?q=)**: las URLs que deja la búsqueda por facetas nativa de PrestaShop, del tipo `?q=Marca-...`, pueden recibir una respuesta **410 Gone** antes incluso de que se lance una consulta al catálogo, o una redirección 301 al listado sin filtrar. La 410 es la respuesta menos costosa para el servidor y la que hace que los buscadores abandonen la URL. Este ajuste no se aplica ni en modo Creative Elements completo, donde `q` es el parámetro del módulo, ni en la página de búsqueda.

Para una tienda que ha sufrido una avalancha de robots en sus filtros, la combinación recomendada es: enlaces rastreables en _Solo facetas indexables_ con muy pocas facetas indexables, antiguas URLs en _410 Gone_ y el modo AJAX «Tema».

## Panel de filtros móvil y filtros activos

Por debajo de cierta anchura de pantalla, la barra de filtros se oculta y se abre como panel desde un botón «Filtros». El ajuste **Panel de filtros por debajo de (px)** fija ese umbral: 767 corresponde a los teléfonos, 1024 conviene cuando tu diseño también desplaza la columna de filtros en tableta. El panel se cierra con su botón «Ver los resultados», con un clic fuera o con la tecla Escape.

El ajuste **Etiqueta de los filtros activos** elige qué muestra cada filtro activo: la faceta y el valor («Color: Rojo») o solo el valor («Rojo»). Los lectores de pantalla reciben siempre ambos.

## Compatibilidad con Creative Elements

Creative Elements (WebshopWorks) no lee el bloque de facetas que renderiza un módulo. Sus widgets **Filtros** y **Filtros activos**, y su botón **Filtros** móvil, reconstruyen su propio marcado a partir de la colección de facetas nativa que lleva el resultado de búsqueda. Desde la versión 1.3 el módulo publica esa colección: los tres widgets funcionan y conservan todos sus controles de diseño, muestras de color y slider de precio incluidos.

### Los dos ajustes

En **Catálogo > Filtros por facetas > Compatibilidad con Creative Elements**:

- **Modo de compatibilidad**: _Completo, cuando Creative Elements está instalado_, _Completo, siempre_, _Parcial_ o _Desactivado_. El modo completo usa los widgets de filtros de Creative Elements y URLs en `?q=`; el modo parcial conserva las URLs en `?dff=` y usa los bloques del módulo (ver más abajo).
- **Bloque de filtros renderizado por**: _Automático_ cede la barra lateral a Creative Elements en los listados cuya plantilla controla, y conserva el bloque del módulo en el resto. Elige _Este módulo_ si tu plantilla de listado de Creative Elements no tiene widget Filtros y prefieres la barra lateral de DataFirefly.

### En modo completo, el parámetro de URL pasa a ser q

Creative Elements codifica el parámetro `q` de forma fija, tanto en sus widgets como en el script de su slider de precio. En modo completo el módulo se alinea por tanto con `q` en lugar de `dff`:

```
/categoria?q=color:rojo,azul-marino/precio:10,50/marca:nike
```

El formato en sí no cambia, solo el nombre del parámetro. Las URLs ya generadas con `dff` se redirigen con un **301** a su equivalente en `q`: no se pierde nada de lo indexado ni de lo guardado en favoritos.

Si filtras o bloqueas tráfico por el parámetro `q` en tu CDN o en tu firewall de aplicación, por ejemplo tras un incidente de rastreo provocado por la búsqueda por facetas nativa, revisa esas reglas antes de activar el modo de compatibilidad. De lo contrario bloquearás a tus propios clientes en cuanto filtren. Apunta al comportamiento (ritmo de peticiones, ASN, user agent) en lugar del nombre del parámetro. O elige el modo parcial, que conserva `dff`: tus reglas sobre `q` pueden entonces seguir en su sitio.

### Modo parcial: conservar las URLs en dff

En modo parcial, el módulo no publica sus facetas para los widgets de filtros de Creative Elements, que se quedan vacíos, y las URLs conservan el parámetro `?dff=`. En su lugar colocas los bloques del módulo en tu plantilla de listado con el widget **Módulo** de Creative Elements: selecciona el módulo y escribe uno de estos nombres de hook.

- `displayDffFacets`: la barra de filtros (también es lo que se muestra si el campo hook se deja vacío);
- `displayDffActiveFilters`: los filtros activos y el enlace «Borrar todo»;
- `displayDffFiltersButton`: un botón «Filtros» que abre el panel móvil.

Para mantener el control sobre el diseño del botón, también puedes usar un widget **Botón** de Creative Elements y añadirle la clase CSS `dff-open-filters` en su pestaña Avanzado: abrirá entonces el mismo panel. Los widgets de Creative Elements de lista de productos, paginación, orden y contador siguen funcionando con normalidad. A cambio, el aspecto de los filtros se ajusta con el color de acento del módulo y tu propio CSS, no con la pestaña Estilo de Creative Elements.

Retira de tu plantilla los widgets Filtros y Filtros activos de Creative Elements al pasar al modo parcial: ya no muestran nada.

### Conviene saber

- Mantén el **modo AJAX «Tema»**. Creative Elements se apoya en el evento nativo de PrestaShop y devuelve sus propios bloques renderizados; el modo autogestionado no sabría reemplazarlos.
- A partir de Creative Elements 3.x, los enlaces de facetas dejan de ser enlaces reales y pasan a ser elementos gobernados por JavaScript. Es una buena noticia para tu presupuesto de rastreo: las combinaciones de filtros ya no son descubribles por un robot. A cambio, el filtrado pasa a depender estrictamente de JavaScript dentro de su interfaz.
- Evita el carácter `/` en la etiqueta de tu faceta Precio: el slider de Creative Elements construye su URL en el navegador a partir de esa etiqueta.

## Caché de contadores

Calcular los contadores disyuntivos puede ser costoso en un catálogo grande. El módulo almacena su resultado en caché durante un tiempo corto y configurable (300 segundos por defecto). Esta caché se **invalida automáticamente** en cada cambio del catálogo y en cada edición de una faceta. Hay disponible un botón **Vaciar la caché de contadores** en el back-office.

## Estadísticas de uso

El panel, en la parte superior de la página de administración, resume los últimos 30 días: productos indexados, número de vistas de páginas filtradas, parte del presupuesto de rastreo mantenida fuera del índice (páginas filtradas servidas como noindex) y una clasificación de las facetas más usadas. El tráfico de robots se excluye de estas cifras, que describen por tanto el comportamiento de tus clientes. Puedes desactivar el registro de estadísticas en los ajustes de rendimiento.

## Páginas compatibles

Las facetas se aplican a las páginas de categoría, marca, proveedor, novedades, más vendidos, ofertas y **resultados de búsqueda** (respetando el ranking nativo de PrestaShop). La faceta Marca se oculta automáticamente en una página de marca, y las facetas limitadas por categoría en una página de búsqueda.

## Desactivar la búsqueda por facetas nativa

El módulo tiene prioridad sobre `ps_facetedsearch`, pero recomendamos desactivar este último para evitar un doble trabajo de indexación. Un aviso en el back-office te lo recuerda si sigue activo.

## Resolución de problemas

- **Las facetas no aparecen**: lanza una sincronización, comprueba que al menos una faceta esté activa y que estés en una página de listado compatible.
- **Falta el slider de precio**: reconstruye el índice de precios; la faceta Precio se oculta mientras el índice esté vacío para la categoría mostrada.
- **La página no se refresca por AJAX**: cambia el modo AJAX a «Autogestionado» si tu tema no sigue el estándar de PrestaShop.
- **Tras un clic, las casillas no se marcan y un segundo filtro sustituye al primero**: corregido en 1.4.3. El bloque de facetas no se actualizaba tras el filtrado AJAX. En la consola del navegador, `dffFaceted.listening()` debe devolver `true`.
- **Los filtros aparecen debajo de la lista de productos en móvil**: corregido en 1.4.1 para los temas Bootstrap 5 como Hummingbird. Comprueba también el ajuste del umbral del panel de filtros.
- **El orden de las facetas no se guarda**: corregido en 1.3.1. Antes de esa versión, PrestaShop enviaba el arrastrar y soltar bajo una clave que el módulo no leía; la notificación anunciaba un éxito pero no se escribía nada.
- **Una faceta aparece en una categoría que he desmarcado**: desmarcar no oculta. Marca esa categoría y elige la regla «Mostrar en todas partes salvo en las categorías de abajo».
- **Los widgets de Creative Elements salen vacíos**: en modo completo, comprueba que el modo de compatibilidad esté en una de las opciones «Completo» y que el módulo esté en modo AJAX «Tema». En modo parcial es normal: esos widgets se sustituyen por los bloques del módulo colocados con el widget Módulo.
- **La barra de filtros aparece duplicada**: tu plantilla de Creative Elements contiene un widget Filtros y el módulo renderiza también el suyo. Pon **Bloque de filtros renderizado por** en _Automático_ o _Widget de Creative Elements_.
- **Demasiadas páginas indexadas**: baja el n.º máx. de valores indexables, haz no indexables las facetas de alta cardinalidad (color, talla), o activa «Todo a noindex» mientras retomas el control.

El código fuente se entrega sin cifrar. Dispones de 12 meses de actualizaciones de compatibilidad y soporte en menos de 24 h.

## Novedades de la versión 1.4

### Modo Creative Elements parcial

Las URLs conservan `?dff=`, y los filtros, filtros activos y botón móvil del módulo se colocan en el diseño con el widget Módulo de Creative Elements. Consulta la sección _Compatibilidad con Creative Elements_.

### Control del rastreo

Los enlaces de facetas pueden reservarse a las facetas indexables, y las antiguas URLs `?q=` de la búsqueda nativa pueden recibir una 410 antes de cualquier consulta al catálogo. Consulta la sección _Mantener a los robots lejos de los filtros_.

### Panel móvil y filtros activos

El panel de filtros móvil ya no depende de las clases utilitarias del tema, ausentes en los temas Bootstrap 5 como Hummingbird, y sigue un umbral de anchura configurable. Los filtros activos pueden mostrar solo el valor.

### Actualización AJAX

El módulo actualiza por sí mismo sus facetas y filtros activos tras cada filtrado, sin depender de los selectores del tema. Se corrigen dos defectos que impedían esa actualización: la suscripción a los eventos de PrestaShop se producía demasiado pronto para funcionar (1.4.3), y el cambio automático al modo autogestionado a los 900 ms dejaba los widgets del page builder en el estado anterior (1.4.1).

## Novedades de la versión 1.3.1

Dos correcciones detectadas en producción.

**El orden de las facetas se guarda.** PrestaShop envía el arrastrar y soltar bajo el identificador sin su prefijo `id_`, es decir `facet`, y no bajo el nombre de la tabla. El módulo leía la clave equivocada y no escribía nada, mientras el navegador seguía mostrando una confirmación. El orden se reconstruye ahora por completo a partir de la lista recibida, lo que hace la escritura idempotente, y la llamada devuelve un estado real.

**Regla de categorías «salvo».** La restricción por categorías era solo una lista blanca: se podía limitar una faceta a ciertas categorías, nunca excluirla de ellas. Consulta la sección _Restringir una faceta a categorías_ más arriba.

## Novedades de la versión 1.3

### Compatibilidad con Creative Elements

El módulo publica ahora sus facetas como colección nativa, la estructura que espera el page builder. Sus widgets **Filtros**, **Filtros activos** y **Borrar**, y su botón **Filtros** móvil, funcionan con el módulo y conservan todos sus controles de diseño. Consulta la sección _Compatibilidad con Creative Elements_ más arriba, en particular el cambio de nombre del parámetro de URL.

### Rendimiento bajo el tráfico de robots

La navegación por facetas se hunde bajo el tráfico automatizado porque cada combinación distinta es un fallo de caché. Esta versión elimina el trabajo por petición que no depende de la selección:

- **Mapas de valores agrupados**: los valores posibles de cada faceta dependen del catálogo, no de la selección. Se cargan desde una única entrada de caché en lugar de una consulta y varios accesos a disco por faceta en cada página.
- **Caché de contadores protegida**: por encima de tres facetas o seis valores, una combinación se calcula pero ya no se almacena. Son las que generan los robots, nunca se vuelven a leer y almacenarlas solo inflaba la tabla. Ambos umbrales son configurables.
- **Visibilidad del catálogo**: la subconsulta de control de grupos de clientes, que antes se repetía dentro de cada consulta de conteo, se elimina en las páginas de categoría cuando ninguna categoría activa está restringida para los grupos del visitante.
- **Landing pages sin consulta**: el conjunto de destinos activos se mantiene como un índice compacto, de modo que la respuesta negativa, con diferencia la más frecuente, no cuesta nada.
- **Estadísticas**: ninguna escritura para los robots.

Estas optimizaciones reducen el coste de cada página filtrada, pero no detienen el rastreo en sí. Una etiqueta `noindex` sigue exigiendo que la página se cargue y se renderice antes de que el robot pueda leerla, y `rel="nofollow"` es solo una señal débil de descubrimiento. Mantener a los robots lejos de las URLs de filtros sigue siendo tarea de tu `robots.txt` y de tu filtrado en el borde.

## Novedades de la versión 1.2

### Landing pages SEO

En **Catálogo > Filtros por facetas > Landing pages SEO**, convierte una combinación de filtros concreta (por ejemplo Calzado × Color: rojo × Marca: Nike) en una auténtica página de aterrizaje: meta title, meta description, H1 e introducción editorial, por idioma. Para apuntar a una combinación, copia el valor del parámetro `dff` (o `q` en modo Creative Elements completo) desde una URL filtrada de tu tienda y pégalo en el formulario.

Una landing activa es **siempre indexable**: prevalece sobre los ajustes por faceta, el límite de valores e incluso el interruptor «Todo a noindex». La estrategia «todo en noindex salvo mis páginas seleccionadas» se vuelve posible.

Todas las landings activas se listan en un sitemap XML dedicado, con alternates hreflang, listo para enviar a Search Console:

```
/module/dffacetedfilter/sitemap
```

### Otras novedades

- **Faceta Subcategorías**: propone las subcategorías directas de la categoría mostrada; el listado incluye entonces automáticamente todo el subárbol.
- **Ordenación de valores por faceta**: posición de catálogo, alfabética o número de productos descendente.
- **Muestras de color en cuadrícula o lista**: cada faceta de color puede mostrarse como cuadrícula horizontal de muestras o como lista vertical con etiquetas y contadores.
- **Ocultar facetas de un solo valor**: una faceta cuyo único valor cubre todo el listado no aporta poder de filtrado; este ajuste la retira automáticamente.
- **Color de acento**: elige con el selector el color de las casillas marcadas, interruptores, slider e insignias; el contraste del texto se calcula automáticamente.
- **AJAX resiliente**: si el tema no responde al evento nativo, el módulo cambia automáticamente al modo autogestionado; la posición de scroll se conserva tras cada filtrado y los filtros móviles se abren en un modal a pantalla completa.
- **8 idiomas en el front**: ES, EN, FR, DE, IT, PL, PT, NL incluidos en el módulo.
