PS PrestaShop Intermedio

DF Faceted SEO — Búsqueda por facetas y SEO PrestaShop

Indexación inteligente de URLs facetadas, landings SEO y motor de filtros de alto rendimiento para PrestaShop 8 y 9.

Actualizado Versión del módulo 1.0.2

DF Faceted SEO convierte la búsqueda por facetas de PrestaShop en una palanca SEO duradera y acelera las páginas de categoría de 10 a 30 veces gracias a un índice desnormalizado. Esta documentación cubre la instalación, la configuración de las reglas de indexación, la creación de landings SEO y la explotación de las estadísticas de combinaciones populares.

Presentación

El módulo nativo ps_facetedsearch genera mecánicamente una URL para cada combinación de filtros posible. En un catálogo de unos miles de productos con cinco facetas, eso representa millones de URLs que Google explora, diluyendo tu presupuesto de crawl y tu PageRank entre páginas casi idénticas.

DF Faceted SEO resuelve este problema de dos maneras paralelas:

  • Indexación inteligente: reglas de negocio deciden qué combinaciones son indexables, cuáles reciben noindex follow, y dónde apunta el canonical.
  • Landings SEO dedicadas: para combinaciones con fuerte potencial comercial (por ejemplo «zapatos rojos talla 42»), crea landings con URL limpia, H1 personalizado, meta personalizados y contenido editorial por idioma.

Como bonus, el motor de búsqueda del módulo reemplaza el motor nativo por un sistema mucho más rápido basado en un índice desnormalizado y una caché de dos niveles.

Requisitos

  • PrestaShop 8.0 a 9.x
  • PHP 8.1 o superior
  • MySQL 5.7 o MariaDB 10.3 mínimo
  • URLs amigables activadas (Preferencias → SEO y URLs)
  • Permisos estándar para crear tablas MySQL

Instalación

  1. Sube el archivo ZIP vía Módulos → Module Manager → Subir un módulo.
  2. Pulsa Instalar. El módulo crea automáticamente 10 tablas ps_dffacetedseo_* y 5 pestañas bajo Mejorar.
  3. Ve a Mejorar → DF Faceted SEO → Panel.
  4. Pulsa Reconstruir el índice. Este paso es obligatorio la primera vez: sin índice, el motor de búsqueda no tiene datos.
  5. Vacía la caché de PrestaShop: Parámetros avanzados → Rendimiento → Vaciar la caché.

En un catálogo de 50 000 productos, la reconstrucción del índice tarda típicamente entre 2 y 5 minutos. El módulo inserta filas por lotes de 500.

Primeros pasos — Panel

El panel (Mejorar → DF Faceted SEO) muestra seis tarjetas estadísticas:

  • Reglas activas: número de reglas de indexación habilitadas
  • Landings: número de landings SEO creadas
  • Productos en el índice: número de productos indexados (debería estar cerca del total del catálogo)
  • Filas en el índice: número de pares (producto, valor de filtro) — la tabla desnormalizada
  • Entradas en caché: número de consultas en caché
  • Combinaciones populares: número de combinaciones observadas

Debajo de las tarjetas, dos bloques de operaciones:

  • Reconstruir el índice: útil tras un gran cambio de catálogo (importación masiva, cambio de estructura de atributos)
  • Vaciar la caché: útil tras un cambio de regla o de ajuste

Reglas de indexación

Las reglas deciden, para cada combinación de filtros visitada, qué etiqueta robots y qué canonical se envían al navegador y a Google. Una regla tiene un scope (zona de aplicación) y una política (decisión).

Scopes disponibles

  • Global: se aplica a todas las páginas facetadas del catálogo
  • Categoría específica: se aplica solo a páginas de una categoría dada
  • Grupo de atributos: se aplica a combinaciones que contienen un grupo específico (por ejemplo todas las páginas filtradas por Color)
  • Característica: ídem, para una característica de producto
  • Marca: ídem, para una marca
  • Rango de precio: se aplica a páginas filtradas por una franja tarifaria dada

Políticas disponibles

  • Index, follow: página indexable, canonical apuntando a sí misma normalizado
  • Noindex, follow: página no indexada, pero los enlaces se siguen (recomendado para combinaciones raras)
  • Canonical parent: página accesible pero el canonical apunta a la categoría padre (se transfiere el valor SEO)
  • Canonical self normalizado: canonical sobre la página misma con los filtros ordenados y agrupados (elimina duplicados de URL para la misma combinación)

Cadena de prioridad

El módulo evalúa las reglas de la más específica a la más genérica. Concretamente, para una página de la categoría Zapatos filtrada por color:

  1. El módulo busca primero una regla scope category sobre Zapatos
  2. Si existe y matchea, se aplica
  3. Sino busca una regla scope attribute_group sobre Color
  4. Sino remonta a la regla global
  5. Si ninguna regla matchea, se aplica la política por defecto del panel

Campos avanzados de una regla

  • Máximo de filtros indexables: si la combinación contiene más filtros que este límite, la política cae automáticamente a noindex follow. Ejemplo: 2 filtros máximo en zapatos (color + talla indexables, pero no color + talla + material + temporada).
  • Whitelist de valores: IDs de valores permitidos (separados por comas). Una combinación que contenga solo valores de la whitelist es indexable. Ejemplo: whitelist colores rojo, negro, blanco, azul — colores raros como «verde manzana» no se indexarán.
  • Blacklist de valores: lo opuesto. Toda combinación que contenga un valor en la blacklist cae automáticamente a noindex.
  • Mínimo de productos: si la combinación no devuelve al menos este número de productos, pasa a noindex. Evita indexar páginas casi vacías.
  • Prioridad: entero. En caso de conflicto entre dos reglas del mismo scope, gana la prioridad más alta.

Estrategia de inicio recomendada: crea una regla global con política canonical parent y máximo 1 filtro indexable, luego añade progresivamente reglas más específicas para abrir la indexación de combinaciones con fuerte potencial.

Landings SEO

Las landings son páginas dedicadas a combinaciones de filtros estratégicas. Tienen su propia URL limpia, su propio H1, sus propios meta y contenido editorial por idioma.

Crear una landing

  1. Ve a Mejorar → DF Faceted SEO → Landings
  2. Pulsa Añadir
  3. Sección Targeting: elige la categoría y eventualmente la marca
  4. Sección Visualización: orden por defecto, dirección, activación, indexación, prioridad
  5. Sección Combinación de filtros: añade los filtros que componen la combinación (grupo de atributos y valores, característica o marca). Ejemplo: Color = Rojo Y Talla = 42.
  6. Pestañas multilingües: para cada idioma rellena el nombre interno, el slug, el H1, el meta title, la meta description, el contenido intro y outro.
  7. Guarda

Estructura de URL

La URL de una landing sigue el patrón:

https://tu-dominio.com/landing/tu-slug
https://tu-dominio.com/en/landing/tu-slug
https://tu-dominio.com/fr/landing/tu-slug

El prefijo de idioma lo gestiona automáticamente el router de PrestaShop en cuanto las URLs amigables están activas y varios idiomas están habilitados en la tienda.

Si recibes un 404 sobre la URL de una landing, comprueba en este orden: URLs amigables activas, .htaccess regenerado (botón Guardar al final de SEO y URLs), caché vaciada, landing activa en el formulario, hook moduleRoutes correctamente vinculado al módulo en Módulos → Posiciones.

Contenido editorial

Para cada idioma dispones de dos bloques HTML enriquecidos:

  • Intro: se muestra encima de la cuadrícula de productos. Ideal para un párrafo SEO de 150 a 300 palabras con tus palabras clave objetivo.
  • Outro: se muestra debajo de la cuadrícula. Ideal para elementos de reaseguro, guías de compra, FAQs.

JSON-LD automático

Cada landing inyecta automáticamente dos bloques JSON-LD en la página:

  • BreadcrumbList: Inicio → Categoría → Landing
  • Product: un bloque Product por producto mostrado (nombre, precio, imagen, URL, disponibilidad)

Obtienes automáticamente los rich snippets de Google sin configuración adicional.

Estadísticas de combinaciones populares

El módulo registra automáticamente, en la tabla ps_dffacetedseo_combination_log, cada combinación de filtros realmente visitada por tus clientes: firma, número de hits, última vez vista.

Explotar las estadísticas

  1. Ve a Mejorar → DF Faceted SEO → Estadísticas
  2. Filtra por categoría, mínimo de hits, límite de visualización
  3. Ordena por hits descendentes
  4. Identifica las combinaciones con más de 50 hits semanales
  5. Pulsa Promover en la columna acción
  6. El formulario de landing se abre prerellenado con la combinación de filtros
  7. Solo te queda rellenar el contenido editorial y guardar

Mantenimiento

Al final de la página Estadísticas hay un botón Purgar datos antiguos con un campo «días a conservar». Recomendado: purgar cada 90 días para evitar un crecimiento ilimitado de la tabla.

Parámetros globales

El panel ofrece 11 parámetros globales agrupados en 3 secciones.

Indexación

  • Política por defecto: política aplicada cuando ninguna regla matchea
  • Máximo de filtros indexables: valor global (puede ser sobrescrito por regla)
  • Mínimo de productos por combinación: umbral global para considerar una página indexable

Rendimiento

  • TTL de la caché (segundos): vida útil de una entrada en caché. Por defecto: 3600 (1 hora). Aumenta a 86400 (24 h) en producción estable.
  • Ocultar filtros vacíos: si está activado, los valores con 0 resultados se ocultan
  • Límite de resultados por página: paginación de productos

URLs

  • Prefijo de URLs de landings: por defecto landing. El patrón de ruta se define en duro en el hook moduleRoutes y usa este prefijo.

Canonical inteligente

En cada página facetada, el módulo calcula el canonical óptimo:

  • Combinación que matchea una landing existente: canonical = URL pretty de la landing
  • Combinación indexable según las reglas: canonical = self normalizado
  • Combinación no indexable según las reglas: canonical = categoría padre
  • Página de categoría sin filtro: canonical = self estándar

Motor de filtros de alto rendimiento

El motor se apoya en la tabla ps_dffacetedseo_index: una fila por par (producto, tipo de filtro, valor). La consulta se transforma en una intersección de conjuntos de identificadores de producto.

Caché de dos niveles

  • Nivel 1: memoria (in-process). Evita repetir la misma consulta dos veces en la misma página.
  • Nivel 2: base de datos (tabla ps_dffacetedseo_cache). Persiste los resultados entre peticiones con TTL.

Invalidación automática

El módulo escucha los hooks actionProductSave, actionProductDelete y actionCategoryUpdate. Cada vez que se guarda un producto, su entrada en el índice se regenera y todas las entradas en caché relacionadas se invalidan.

AJAX y UX

El panel de filtros front está totalmente gestionado en AJAX:

  • Debounce de 250 ms en los cambios de filtros
  • pushState para actualizar la URL sin recargar
  • Actualización en tiempo real de las etiquetas canonical y robots
  • Scroll suave hacia la cuadrícula de productos tras la actualización
  • Chips activos clicables para quitar un filtro individual
  • Slider de precio con campos numéricos y botón Aplicar
  • Swatches de color visibles en atributos de tipo Color

Multitienda y multilingüe

El módulo es nativamente multitienda y multilingüe:

  • Cada landing tiene traducciones por idioma (tabla ps_dffacetedseo_landing_page_lang)
  • Cada landing puede restringirse a una o varias tiendas (tabla ps_dffacetedseo_landing_page_shop)
  • Las reglas de indexación se aplican por defecto a todas las tiendas
  • El índice está particionado por tienda
  • Las traducciones de la interfaz se entregan en francés e inglés (XLIFF en translations/)

Arquitectura técnica

Hooks utilizados

  • displayHeader: canonical y meta robots dinámicos
  • actionFrontControllerSetMedia: CSS y JS frontend
  • moduleRoutes: ruta limpia para las landings
  • displayLeftColumn: inyección del panel de filtros
  • displayBeforeBodyClosingTag: JSON-LD en landings
  • actionProductSearchProviderRunQuery: integración con el motor PS
  • actionProductSave y actionProductDelete: reindexación incremental
  • actionCategoryUpdate: invalidación de la caché de categoría
  • displayBackOfficeHeader: CSS y JS admin

Tablas creadas

Tabla Rol
dffacetedseo_rule Reglas de indexación por scope
dffacetedseo_landing_page Landings (datos)
dffacetedseo_landing_page_lang Traducciones de landings
dffacetedseo_landing_page_shop Enlaces multitienda
dffacetedseo_landing_filter Filtros asociados a landings
dffacetedseo_combination_log Estadísticas de visita
dffacetedseo_cache Caché de resultados
dffacetedseo_filter_template Plantillas de filtros reutilizables
dffacetedseo_index Índice desnormalizado (clave de rendimiento)
dffacetedseo_setting Parámetros internos

Convención de URL de filtros

?attribute_group__{id_group}=v1,v2&feature__{id_feature}=v3&manufacturer__0=5&price=10-50&s=needle

Se calcula una firma SHA-1 estable para comparar combinaciones (matching landing, clave de caché, log).

Rendimiento esperado

Mediciones realizadas en un catálogo de referencia (50 000 productos, 8 facetas activas):

Motor Tiempo medio
ps_facetedsearch nativo 800 ms a 1,4 s por consulta
DF Faceted SEO sin caché 50 a 120 ms
DF Faceted SEO con caché menos de 10 ms

Ganancia típica: ×10 a ×30

FAQ técnica

¿Hay que desinstalar ps_facetedsearch?

No, el módulo se integra mediante los hooks oficiales. Puedes probarlo en paralelo. Una vez validado, desinstala ps_facetedsearch para evitar la duplicación del panel de filtros.

¿Es compatible con HTTPS y URLs canónicos absolutos?

Sí. El módulo usa Context::getContext()->link->getPageLink() y getModuleLink() que respetan la configuración HTTPS de PrestaShop.

¿Cómo añadir un nuevo idioma del lado módulo?

Copia el archivo translations/fr-FR.xlf a translations/xx-XX.xlf y traduce las entradas trans-unit. Ninguna otra intervención necesaria.

¿Soporta atributos combinados?

Sí. El índice desnormalizado indexa las declinaciones a través de sus atributos. El motor filtra los productos cuya al menos una declinación corresponde a todos los filtros activos.

¿Cómo depurar una regla que no se aplica?

Activa los logs PrestaShop (Parámetros avanzados → Logs) y consulta la sección dffacetedseo.

Resolución de problemas

Fatal error en una llamada a getBySlug

Síntoma: Call to a member function getBySlug() on false. Causa: antiguo helper get() que devolvía false en lugar del objeto servicio. Corregido en v1.0.1. Actualiza el módulo.

404 sobre la URL de una landing

Síntoma: https://tu-sitio/en/landing/tu-slug devuelve 404. Causa típica: el hook moduleRoutes no está registrado o la caché de rutas PrestaShop está obsoleta.

  1. Comprueba que Preferencias → SEO y URLs → Activar URLs amigables está en SÍ
  2. Guarda esta página (regenera el .htaccess)
  3. Vacía la caché de PrestaShop dos veces
  4. Ve a Módulos → Posiciones, verifica que dffacetedseo está vinculado a moduleRoutes
  5. Fallback de test: https://tu-sitio/index.php?fc=module&module=dffacetedseo&controller=landing&slug=tu-slug

El motor de búsqueda no devuelve ningún producto

El índice probablemente está vacío. Ve al panel y pulsa Reconstruir el índice.

Los filtros no se muestran en la columna

Verifica en Módulos → Posiciones que dffacetedseo está vinculado al hook displayLeftColumn.

Rendimiento degradado tras importación masiva de productos

La invalidación incremental funciona bien para modificaciones unitarias. Tras una importación masiva, es más rápido reconstruir el índice entero desde el panel y vaciar la caché.

Actualizaciones

El módulo sigue un versionado MAYOR.MENOR.PARCHE. Las correcciones críticas se entregan como parches; las nuevas funcionalidades suben la minor. Cada actualización entrega un script upgrade/upgrade-X.Y.Z.php que se ejecuta automáticamente.

Soporte

Para cualquier pregunta o reporte de bug, contacta con support@datafirefly.com precisando la versión PrestaShop, PHP, módulo y los logs PHP/PrestaShop.

¿Te ha resultado útil esta página?

¿Sigues atascado? Contacta con soporte