Thin Content Detector — Documentación
Detección automática de contenido pobre, duplicados y boilerplate en tu catálogo PrestaShop con sugerencias de enriquecimiento por IA. Instalación, configuración de umbrales, proveedores IA, escaneo cron y resolución de problemas.
DataFirefly Thin Content Detector escanea automáticamente tus productos, categorías y páginas CMS en todos los idiomas activos de tu tienda. Detecta tres patrones tóxicos para el SEO — contenido demasiado pobre, descripciones duplicadas y páginas dominadas por boilerplate — y genera sugerencias de enriquecimiento por IA listas para pegar. Esta guía cubre la instalación, configuración, uso diario, planificación cron y resolución de problemas.
Visión general
Desde el Helpful Content Update, Google está degradando activamente las páginas con contenido demasiado corto, demasiado similar a otras páginas, o demasiado dominado por elementos repetidos. En un catálogo e-commerce, suelen ser fichas de producto copiadas del proveedor, categorías con dos frases genéricas, o variantes que comparten el 95 % de su descripción. Invisible a simple vista en 500 productos — pero acumulado, es lo que impide que tu sitio posicione.
Los tres tipos de detección
- Thin content — páginas por debajo del umbral de palabras configurable. Tres niveles de gravedad según la distancia al umbral (crítica < 25 %, advertencia 25–75 %, aviso 75–100 %).
- Duplicados — detección en dos pasos: hash SHA1 para duplicados exactos (gravedad 3), después similitud Jaccard ≥ umbral configurable para cuasi-duplicados (gravedad 2).
- Ratio plantilla / contenido — identifica los tokens compartidos con páginas hermanas (misma categoría padre) y calcula el porcentaje de tokens únicos por página. Una página con 200 palabras pero 90 % de boilerplate es tan tóxica como una página de 30 palabras.
Instalación
- Sube el ZIP del módulo a través de Módulos > Gestor de módulos > Subir un módulo.
- Haz clic en Instalar. El módulo crea dos tablas (
ps_dfthincontent_issueyps_dfthincontent_scan) y una pestaña de administración bajo Catálogo. - Accede al módulo a través de Catálogo > Thin Content (DataFirefly).
id_shop). Sin dependencia de Composer.
Configuración
Haz clic en el botón Configuración en la barra del módulo. Hay tres paneles disponibles.
Umbrales de detección
- Palabras mínimas producto — por defecto 150. Cualquier producto cuya descripción larga + corta combinadas contenga menos de 150 palabras será marcado.
- Palabras mínimas categoría — por defecto 100.
- Palabras mínimas página CMS — por defecto 250.
- Umbral de similitud Jaccard — por defecto 85 %. Por encima, dos páginas se consideran cuasi-duplicados.
- Ratio mínimo de plantilla — por defecto 30 %. Por debajo, la página se considera demasiado dominada por boilerplate.
Objetivos de escaneo
- Escanear productos (ON por defecto).
- Escanear categorías (ON por defecto).
- Escanear páginas CMS (ON por defecto).
- Reescaneo automático al guardar (OFF por defecto). Cuando se activa, cada guardado de un producto, categoría o página CMS desencadena un retest dirigido solo de ese objeto. Ves en tiempo real si tu reescritura supera los umbrales.
Configuración IA
Las sugerencias de enriquecimiento utilizan un endpoint compatible con OpenAI (chat completions). Esto incluye una amplia gama de proveedores:
- OpenAI — endpoint
https://api.openai.com/v1/chat/completions, modelo recomendadogpt-4o-mini(≈ 0,001 € por sugerencia). - Mistral AI — endpoint
https://api.mistral.ai/v1/chat/completions, modelomistral-small-latest. - Groq — endpoint
https://api.groq.com/openai/v1/chat/completions, modelollama-3.3-70b-versatile. Muy rápido. - Ollama en local — endpoint
http://localhost:11434/v1/chat/completions, cualquier modelo descargado. Coste cero. - Anthropic mediante un proxy compatible con OpenAI.
Parámetros a rellenar:
- Endpoint — URL completa hacia
/v1/chat/completions. - Modelo — identificador del modelo en el proveedor.
- Clave API — Bearer token. Almacenada cifrada mediante el sistema de configuración de PrestaShop.
- Max tokens — por defecto 600. Suficiente para una sugerencia de enriquecimiento estándar.
Uso — Dashboard
El dashboard es la página de inicio del módulo. Muestra:
- Tres contadores principales — total de problemas abiertos, corregidos, ignorados.
- Desglose por tipo de problema — thin / duplicate / template.
- Desglose por tipo de objeto — producto / categoría / página CMS.
- Umbrales actuales — recordatorio de los valores configurados.
- Últimos 5 escaneos — fecha, duración, número de objetos analizados.
- Botón «Lanzar escaneo completo» — desencadena un escaneo síncrono mediante AJAX. Una modal muestra el progreso y el resumen al final.
Lanzar un escaneo
Haz clic en Lanzar escaneo completo. El escaneo recorre todos los idiomas activos, aplica los tres analizadores a los objetivos activados, persiste los problemas detectados en ps_dfthincontent_issue, y marca como fixed los problemas que ya no se detectan (por ejemplo si has enriquecido una ficha desde el último escaneo).
set_time_limit(0) y memory_limit 512M.
Uso — Lista de problemas
Accesible mediante Ver problemas en la barra. Visualización paginada (50 por página) con filtros avanzados:
- Estado — abierto / corregido / ignorado.
- Tipo de problema — thin / duplicate / template.
- Tipo de objeto — producto / categoría / CMS.
- Idioma — filtro sobre uno de los idiomas activos.
- Búsqueda libre — sobre el nombre del objeto.
Cada fila muestra la gravedad (punto rojo / naranja / azul), el tipo de problema, el tipo de objeto con icono, el nombre, el idioma, el número de palabras, la métrica relevante (% similitud o % unicidad) y tres botones de acción:
- Sugerencia IA — abre una modal con una sugerencia de enriquecimiento HTML generada bajo demanda (ver siguiente sección).
- Marcar corregido — mueve el problema al estado
fixed. Se mantiene en el historial pero ya no contamina los contadores. - Ignorar — mueve el problema al estado
ignored. Útil para páginas intencionadamente cortas (por ejemplo una página CMS «Contacto» legítimamente corta).
Exportación CSV
El botón Exportar CSV descarga todos los problemas del filtro actual. La exportación se transmite en streaming (chunks de 500 filas) para gestionar catálogos grandes sin saturación de memoria. Codificación UTF-8 con BOM para abrir directamente en Excel. Delimitador punto y coma.
Sugerencias IA
Haz clic en el botón IA en cualquier fila. El módulo envía una petición al endpoint configurado con un prompt construido dinámicamente a partir del tipo de problema y del tipo de objeto:
- Thin producto — enriquecer con USP, materiales, uso, procedencia, garantías.
- Thin categoría — enriquecer con USP de gama, consejos de compra, comparación de subcategorías.
- Thin CMS — desarrollo editorial, contexto, ejemplos.
- Duplicado — diferenciar la ficha centrándose en lo que la hace única respecto a sus duplicados.
- Plantilla — eliminar boilerplate, añadir elementos únicos a esta página específica.
El mensaje del sistema impone un retorno en HTML limpio: etiquetas p, ul, li, h3 únicamente. Sin markdown, sin etiquetas raíz. Puedes pegar el resultado directamente en el campo de descripción de TinyMCE sin limpieza.
La sugerencia se almacena en la base de datos. Si reabres la modal más tarde, se muestra al instante sin nueva llamada a la API.
Cron — Escaneos programados
El módulo expone un endpoint cron protegido por token, ideal para escaneos nocturnos:
https://tu-tienda.com/modules/dfthincontent/cron.php?token=TU_TOKEN
El token se genera aleatoriamente durante la instalación y se muestra en el panel de configuración. Mantenlo confidencial — da acceso al desencadenamiento de un escaneo completo.
Ejemplo de crontab (escaneo diario a las 4h)
0 4 * * * curl -s "https://tu-tienda.com/modules/dfthincontent/cron.php?token=TU_TOKEN" > /dev/null 2>&1
Características del escaneo cron
set_time_limit(0)— sin límite de tiempo PHP.memory_limit 512M— definido automáticamente.- Retorno JSON con el número de objetos analizados, el número de problemas detectados y la duración total.
- Validación mediante
hash_equalspara resistir ataques de timing.
DFTHIN_CRON_TOKEN en la tabla ps_configuration.
Arquitectura técnica
Estructura de las tablas
ps_dfthincontent_issue— un registro por problema detectado. Clave única:(id_object, object_type, id_lang, id_shop, issue_type). Campos notables:severity(1-3),word_count,content_hash(SHA1),metric_value(% similitud o unicidad),metric_data(JSON con detalle),ai_suggestion,status,object_name,object_url.ps_dfthincontent_scan— historial de escaneos. Fecha inicio / fin, duración, ítems analizados por tipo, estado.
Hooks utilizados
actionAdminControllerSetMedia— carga CSS / JS y expone la URL AJAX medianteMedia::addJsDef.actionProductUpdate— reescanea el producto modificado si el auto-rescan está activado.actionObjectCategoryUpdateAfter— igual para categorías.actionObjectCmsUpdateAfter— igual para páginas CMS.
Límites de rendimiento
La detección de duplicados es intrínsecamente O(n²) — cada página se compara con todas las demás páginas del mismo tipo / idioma / tienda. Para evitar una explosión en catálogos muy grandes, el módulo aplica dos protecciones:
- Tope de seguridad a 1 500 elementos por grupo (tipo + idioma + tienda). Por encima, la detección de duplicados se desactiva para ese grupo — se registra una advertencia.
- Pre-filtrado por número de palabras — la similitud Jaccard solo se calcula entre elementos cuyo número de palabras está dentro de una ventana del ±50 %. Esto elimina la gran mayoría de comparaciones inútiles.
Resolución de problemas
El escaneo no se inicia
- Abre la consola de red del navegador, haz clic en Lanzar escaneo completo, mira la petición AJAX hacia
action=scanFull. - Si la respuesta es HTML en lugar de JSON, es un fatal PHP del lado del servidor — revisa los logs de PrestaShop (
var/logs/) y PHP. - Si la respuesta es 404, verifica que el controlador
AdminDfThinContentesté correctamente registrado (tablaps_tab). - Si la respuesta es 403, el token CSRF ha expirado — refresca la página e inténtalo de nuevo.
Las sugerencias IA devuelven un error
- Verifica que la clave API es correcta y está activa en tu proveedor.
- Verifica que el servidor puede alcanzar la URL del endpoint (firewall saliente, DNS).
- Si usas Ollama en local, verifica que el servicio esté funcionando (
ollama serve) y que el modelo esté descargado (ollama pull llama3.3). - Consulta los logs de PrestaShop — el módulo registra ahí los errores cURL y los códigos HTTP distintos de 200.
El cron devuelve 401 o 403
El token transmitido no coincide. Recupera el token correcto del panel de configuración y reemplázalo en tu crontab. Sin espacios, sin saltos de línea en el valor.
Se marcan duplicados legítimos
Es el caso típico de variantes muy cercanas (tallas del mismo modelo, colores). Tres opciones:
- Marcar los problemas como ignorados uno por uno.
- Subir el umbral de similitud Jaccard al 95 % o más.
- Desactivar el escaneo de productos y mantener solo categorías + CMS si tu caso de uso no requiere escaneo de productos.
Desinstalación
Desinstala mediante Módulos > Gestor de módulos > Desinstalar. El módulo elimina limpiamente ambas tablas BDD, la pestaña de administración y todas las claves de configuración. Sin rastros residuales.
Recursos
- Página del producto: datafirefly.com/es/producto/dfthincontent/
- Soporte: support@datafirefly.com