DataFirefly All in One SEO — Documentación completa
Módulo SEO premium todo-en-uno para PrestaShop 8 y 9: metas dinámicas, esquemas JSON-LD, sitemap multilingüe, redirecciones, 404, robots.txt inteligente, tracking y analizador de contenido.
Suite SEO premium todo-en-uno para PrestaShop 8 y 9: plantillas meta dinámicas, esquemas JSON-LD completos, sitemap XML multilingüe, redirecciones, monitoring 404, Open Graph y Twitter Cards, GA4 y GTM, robots.txt inteligente con bloqueo de crawlers IA y analizador de contenido — todo en un único módulo.
Requisitos
- PrestaShop: 8.0 a 9.x
- PHP: 8.1 o superior (8.2 y 8.3 recomendados)
- MySQL: 5.7+ o MariaDB 10.3+
- Módulo productcomments (oficial PrestaShop): opcional, requerido solo para AggregateRating en productos
- mod_rewrite activado en Apache (o equivalente Nginx) para las URL reescritas
id_shop. Puede tener configuraciones totalmente diferentes por tienda.Instalación
- Descargue
dfallinoneseo-vX.Y.Z.zipdesde su cuenta de cliente DataFirefly. - Inicie sesión en su back-office PrestaShop.
- Vaya a Módulos → Module Manager.
- Haga clic en Subir un módulo en la parte superior derecha.
- Arrastre y suelte el archivo ZIP o haga clic en Seleccionar un archivo.
- La instalación crea automáticamente las 11 tablas SQL, registra los hooks y añade el menú Mejorar → DataFirefly SEO.
Configuración inicial en 10 minutos
Este recorrido rápido le permite configurar lo esencial antes del primer crawl de Google.
- Ajustes → General: active el módulo, indique el nombre del sitio y la etiqueta «Inicio» para el breadcrumb.
- Meta y plantillas: defina como mínimo una plantilla Producto y una plantilla Categoría (consulte la sección dedicada).
- Schema → Identidad de la organización: complete logo, teléfono, email, dirección y URLs de redes sociales (
sameAs). - Sitemap: active el sitemap y haga clic en Regenerar ahora.
- Tracking: añada su GA4 Measurement ID y/o GTM ID.
- Tracking → Verificaciones: pegue el valor de verificación de Google Search Console.
- Robots.txt: haga clic en Cargar predeterminados (PS + bloqueo IA) para partir de una base sana.
Plantillas meta
El módulo reemplaza la entrada manual de meta_title y meta_description por plantillas dinámicas por tipo de entidad. Al guardar una ficha con metas vacías, la plantilla correspondiente se aplica automáticamente.
Tipos de entidad soportados
- Producto: páginas de producto (todos los tipos, incluyendo virtuales y pack)
- Categoría: páginas de categoría
- Página CMS: páginas de contenido estático
- Marca / Fabricante: páginas de fabricante
- Proveedor: páginas de proveedor
- Inicio: página de inicio de la tienda
- Páginas genéricas:
/contact,/sitemap, etc.
Tokens disponibles
Los tokens se reemplazan con los valores reales al renderizar la página. No todos los tokens están disponibles para todos los tipos de entidad.
{shop_name}— nombre de la tienda{sep}— separador (por defecto|){product_name}— nombre del producto (idioma actual){product_reference}— referencia interna{product_sku}— alias de referencia{product_ean13}— código de barras EAN13{product_brand},{brand}— marca/fabricante{category}— categoría por defecto (producto) o nombre de la categoría (página de categoría){category_parent}— nombre de la categoría padre{category_description}— descripción corta (160 car. máx.){short_description}— descripción corta del producto (160 car. máx.){price}— precio con IVA formateado con moneda{price_tax_excl}— precio sin IVA formateado{title}— título de la página CMS{summary}— extracto del contenido CMS (160 car. máx.)
Bloques condicionales
Para no mostrar un token vacío, use la sintaxis condicional:
{?product_brand}{product_brand} | {/?}{product_name} - {shop_name}
Si product_brand está vacío (producto sin marca), todo el bloque entre {?token} y {/?} se elimina. De lo contrario, su contenido se renderiza y los tokens internos se reemplazan normalmente.
Ejemplos de plantillas recomendadas
Producto:
Title: {?product_brand}{product_brand} {/?}{product_name} - {category} | {shop_name}
Description: Descubra {product_name}{?product_brand} de {product_brand}{/?}. {short_description} Envío rápido en {shop_name}.
Categoría:
Title: {category} - {?category_parent}{category_parent} - {/?}{shop_name}
Description: Todos los productos de la categoría {category} en {shop_name}. {category_description}
Inicio:
Title: {shop_name} - Tienda online
Description: Bienvenido a {shop_name}. Descubra nuestro catálogo, envío rápido, pago seguro.
Sobrescritura por entidad
Para sobrescribir una ficha específica (por ejemplo un producto destacado), haga clic en el icono Sobrescritura meta en el menú Edición masiva o use la URL:
?controller=AdminDfSeoMeta&entity=product&entity_id=42
La página de sobrescritura le permite definir meta_title, meta_description, la directiva robots (por ejemplo noindex,follow) y un canonical personalizado por idioma.
Esquemas JSON-LD
El módulo genera un bloque @graph único que agrupa todos los esquemas de la página actual, validado por Google Rich Results Test.
Esquemas generados automáticamente
- Organization — en todas las páginas, identidad de la empresa
- WebSite — en la home, con
SearchActionpara activar el sitelinks search box - LocalBusiness — si se ha indicado una dirección física
- BreadcrumbList — breadcrumb
- Product — en las fichas de producto, con
offers,priceValidUntil,gtin13/isbn/mpn - AggregateRating — agregado desde el módulo productcomments oficial
- Article — en las páginas CMS
- FAQPage — desde los bloques FAQ de producto o página
Identidad de la organización
Pestaña Schema → Identidad de la organización. Campos a completar:
- Tipo: Organization, Corporation, LocalBusiness, Store, OnlineStore, OnlineBusiness
- Logo: URL absoluta (recomendado 600×60 mínimo, ratio cuadrado o paisaje)
- Teléfono, Email: usados en
contactPoint - Dirección postal: calle, código postal, ciudad, país (ISO-2)
- sameAs: una URL por línea (Facebook, Instagram, LinkedIn, Twitter/X, etc.)
Validez de las ofertas de producto
El campo Validez de las ofertas de producto (días) controla el valor de priceValidUntil en Product.offers. Por defecto: 60 días. Google requiere este campo para mostrar el precio en los resultados enriquecidos.
Esquemas personalizados
Pestaña Schema → Esquemas personalizados. Permite añadir bloques JSON-LD a medida (HowTo, Recipe, Event, JobPosting, VideoObject, Course, etc.) con un alcance preciso:
- global: todas las páginas
- home: solo home
- product: todas las páginas de producto
- product_id: un producto específico (usa el campo ID)
- category, category_id: idem categoría
- cms, cms_id: idem página CMS
Variables disponibles en el JSON personalizado: {shop_name}, {base_url}, {entity_id}, {entity_type}.
@graph. Valídelo con el Rich Results Test antes de publicar. Un JSON inválido se rechaza silenciosamente.Sitemap XML
El módulo genera un sitemap XML conforme a la especificación sitemaps.org, con hreflang en cada URL y soporte de imágenes. Arquitectura: un sitemap index por tienda, luego un sitemap por tipo de entidad × idioma, dividido en chunks.
Configuración
Pestaña Sitemap. Active el sitemap y luego marque el contenido a incluir:
- Productos (por defecto todos los productos activos)
- Categorías
- Páginas CMS
- Marcas / Fabricantes
- Proveedores
- Imágenes (añade
image:imagea cada URL de producto) - Vídeos (si están presentes en las fichas)
Opciones adicionales:
- Excluir ruptura de stock: elimina los productos sin stock
- Gzip: también genera las variantes
.xml.gz(reduce 5 a 10x el tamaño descargado por los crawlers) - URLs por archivo: tamaño de chunk (recomendado 5000-10000, máx 50000 por spec XML)
Regeneración
La regeneración es manual desde el admin para evitar carga imprevista del servidor. Haga clic en Regenerar ahora.
Para automatizar, programe un cron que llame al siguiente script (cada 6 o 12 horas según la frecuencia de actualización de su catálogo):
0 */6 * * * php /var/www/html/index.php fc=module&module=dfallinoneseo&controller=sitemap&action=rebuild
Envío a motores de búsqueda
Haga clic en Pingear motores para notificar a Google y Bing (endpoints legacy pero todavía activos). Para Google Search Console, envíe la URL del sitemap index una vez en GSC → Sitemaps. GSC vuelve a crawlear automáticamente con cada modificación.
URL del sitemap index: https://su-tienda.com/sitemap.xml
Sitemap HTML público
Un sitemap HTML legible por humanos se genera automáticamente en /plan-du-site. Agrega categorías (árbol), páginas CMS, marcas, proveedores y los 200 productos más recientes. Útil para enlazado interno y accesibilidad.
Redirecciones
El módulo gestiona las redirecciones HTTP 301 (permanente), 302 (temporal), 307, 308 y 410 (Gone) con tres tipos de match.
Tipos de match
- Exacto: la URL fuente debe coincidir exactamente (sin query string)
- Prefijo: la URL fuente es un prefijo de la URL solicitada. El sufijo se conserva en el destino si Conservar query string está marcado. Útil para migrar carpetas enteras (
/carpeta-antigua/→/carpeta-nueva/). - Regex: expresión regular PHP (modo
~...~isensible/insensible). Los grupos de captura están disponibles en el destino vía$1,$2, etc.
Creación manual
Pestaña Redirecciones → Nueva redirección. Campos:
- URL fuente: ruta sin el dominio (ej:
/pagina-antigua) - URL destino: ruta o URL absoluta. Deje vacío para código 410.
- Tipo de match, Código HTTP, Conservar query string
Importación / exportación CSV
Formato CSV esperado (con header):
source,destination,type,code
/producto-antiguo,/producto-nuevo,exact,301
/carpeta-antigua/,/carpeta-nueva/,prefix,301
/old-(.*),/new-$1,regex,301
La exportación CSV recoge las redirecciones actualmente filtradas en la lista.
Redirección automática al cambiar slug
Si la opción Ajustes → Monitoring → Redirección 301 auto al cambiar URL está marcada, el módulo crea una 301 automáticamente al modificar el slug de un producto, categoría, página CMS, marca o proveedor. El created_by se marca como auto:urlchange para distinguirlo.
Monitoring 404
Pestaña Monitor 404. Captura todas las URLs en error 404 servidas por PrestaShop, con deduplicación, conteo de hits, detección de bots y hash de direcciones IP (sal COOKIE_KEY de PrestaShop para conformidad RGPD).
Filtros disponibles
- No resueltas: URLs sin redirección cubridora (vista por defecto)
- Resueltas: URLs para las que se creó una redirección a posteriori
- Bots: hits provenientes de user-agents identificados como bots
- Todas
Crear una redirección con un clic
En cada línea, el botón Redirigir abre un formulario inline que pre-rellena la fuente. Indique el destino, elija el código HTTP, valide. La 404 se marca automáticamente como resuelta.
Purga y mantenimiento
El menú Ajustes → Monitoring expone un umbral Número máximo de entradas 404 conservadas (por defecto 5000). Más allá, el botón Purgar 404 antiguos elimina las entradas no resueltas más antiguas.
Robots.txt dinámico
El módulo sirve un archivo /robots.txt generado dinámicamente en cada solicitud, basado en las reglas definidas en Robots.txt.
Preajustes PrestaShop + bloqueo IA
El botón Cargar predeterminados (PS + bloqueo IA) sobrescribe todas las reglas actuales y carga un preajuste sano que:
- Bloquea los directorios sensibles de PrestaShop (
/admin*/,/cache/,/classes/, etc.) - Bloquea las páginas técnicas (
/cart,/order,/my-account, etc.) - Bloquea los principales crawlers IA no respetuosos: GPTBot, ClaudeBot, CCBot, Google-Extended, anthropic-ai
- Apunta al sitemap (
Sitemap: /sitemap.xml)
Reglas personalizadas
Cada regla tiene un user-agent, una directiva (Allow, Disallow, Crawl-delay), un valor y una posición (orden en el archivo). Active/desactive una regla sin eliminarla mediante la pastilla ON/OFF.
Vista previa en directo
El bloque Vista previa del archivo generado en la parte inferior renderiza el robots.txt tal como se servirá, antes de publicar.
Archivo llms.txt nativo
El módulo sirve un archivo /llms.txt conforme a la especificación llmstxt.org. Este archivo lista, en markdown, las secciones principales del sitio para los crawlers IA respetuosos que desean una vista estructurada en lugar de scrapear todo el HTML.
No se requiere configuración — el módulo genera automáticamente el archivo desde su árbol de categorías, páginas CMS y marcas.
Open Graph y Twitter Cards
Pestaña Social. El módulo inyecta las etiquetas og:* y twitter:* en todas las páginas.
Ajustes
- Activar Open Graph y Twitter Cards: master switch
- og:locale automático: calculado desde el idioma del contexto (ej:
es_ES) - Imagen OG por defecto: URL absoluta de una imagen 1200×630 (usada cuando la página no tiene imagen dedicada)
- og:site_name, og:type por defecto
- Twitter @handle y tipo de tarjeta (
summaryosummary_large_image) - fb:app_id: Facebook App ID
Tracking: GA4, GTM, píxeles
GA4 y Enhanced Ecommerce
Campo GA4 Measurement ID: formato G-XXXXXXXXXX. Validación automática del formato.
Marque Enhanced Ecommerce para activar los eventos view_item, view_item_list, add_to_cart, remove_from_cart, begin_checkout, add_payment_info, purchase.
Marque Respetar Consent Mode v2 para anonimizar los hits hasta el consentimiento explícito (compatible con las CMP estándar).
Google Tag Manager
Campo GTM ID: formato GTM-XXXXXXX. El módulo inyecta el snippet GTM en el head y el fallback noscript justo después de la apertura del body.
Píxeles publicitarios
- Facebook Pixel ID: 15 dígitos
- TikTok Pixel ID: alfanumérico
Si Consent Mode v2 está activo, estos píxeles solo se activan tras el consentimiento.
Verificaciones de propiedad
Pegue los valores de las etiquetas de verificación (sin la etiqueta meta completa, solo el contenido del atributo content):
- Google Search Console
- Bing Webmaster Tools
- Yandex Webmaster
- Baidu
Código personalizado head y body-end
Dos campos libres aceptan HTML/JS arbitrario:
- Código inyectado en head: para scripts de terceros, metas complementarias
- Código inyectado justo antes del cierre del body: ideal para widgets de chat, retargeting tardío, scripts asíncronos
Analizador de contenido
Pestaña Analizador. Envíe un producto, una categoría, una página CMS o HTML bruto al analizador para obtener un score SEO global y un desglose detallado de métricas.
Métricas calculadas
- Score SEO global (0-100) — ponderación weighted de los checks
- Legibilidad Flesch — aproximación multilingüe (vowel-group syllable count)
- Número de palabras, número de frases
- Densidad de la palabra clave principal (en %)
- Enlaces internos / externos / nofollow
- Imágenes sin atributo alt
- Estructura de títulos H1 a H6
- Presencia de la palabra clave en slug y primer párrafo
Verificaciones (checks)
El analizador devuelve una lista de checks con estado good / warn / bad:
- Longitud del title (50-60 caracteres)
- Longitud de la meta description (140-160 caracteres)
- Presencia y longitud del slug
- Longitud del cuerpo (mínimo 300 palabras)
- Presencia de al menos una imagen con alt
- Palabra clave en title, en primer párrafo, en slug
- Densidad de palabra clave entre 0,5% y 2,5%
- Al menos un H1 y varios H2/H3
Edición masiva
Pestaña Edición masiva. Grilla paginada (30 entradas/página) con filtros para modificar rápidamente meta_title, meta_description y link_rewrite en productos, categorías o páginas CMS.
Filtros disponibles
- Todas
- Sin title: solo entradas con meta_title vacío
- Sin descripción: solo entradas con meta_description vacío
- Búsqueda por nombre
Aplicar plantillas en masa
El botón Aplicar plantillas aplica automáticamente la plantilla definida para el tipo de entidad actual a las fichas que coinciden con los filtros. Marque Aplicar solo a campos vacíos para evitar sobrescribir metas ya rellenadas.
Metabox SEO en la ficha de producto
En la página de edición de un producto en el back-office, se añade un encart DataFirefly SEO con:
- Un score SEO en directo (7 checks: longitud title, descripción, slug, body, imagen, EAN13, marca)
- Una vista previa SERP Google renderizada fielmente
- La palabra clave principal detectada
Ajustes avanzados
Indexación
Pestaña Ajustes → Indexación:
- hreflang multilingüe: genera las etiquetas
link rel="alternate"en todas las páginas - Estrategia x-default: Idioma por defecto (recomendado), Inglés, o Desactivado
- URL canonical: inyecta
link rel="canonical" - Canonical en paginación: En la página actual (recomendado), Siempre en página 1, o Sin canonical
- noindex automáticos: páginas /search, carrito, mi cuenta, novedades, mejores ventas, promociones, facetas
- Canonical hacia la página padre en facetas: evita el duplicate content de la navegación por facetas
Imágenes
- Generación automática de atributos alt: al guardar una imagen sin alt, aplica la plantilla
- Plantilla alt: por defecto
{product_name} - {shop_name} - Lazyload imágenes nativo: añade
loading="lazy"ydecoding="async"a todas las imágenes, con fallback IntersectionObserver para imágenesdata-src
Mantenimiento
- Vaciar la caché: purga la caché Smarty + caché PrestaShop
- Purgar 404 antiguos: aplica el umbral configurado
- Exportar todos los datos (JSON): descarga un archivo JSON con todas las tablas SEO de la tienda actual (útil para migración entre entornos o backup antes de desinstalar)
Multi-tienda
Todas las funcionalidades están limitadas por id_shop. Al pasar de una tienda a otra mediante el selector de contexto PrestaShop, ve y modifica únicamente los datos de esa tienda.
Casos particulares a conocer:
- Plantillas: una plantilla por par (tipo de entidad, tienda). Defina explícitamente las plantillas para cada tienda.
- Sitemap: un sitemap_index distinto por tienda, accesible en
https://tienda-1.com/sitemap.xml,https://tienda-2.com/sitemap.xml, etc. - Robots.txt: reglas por tienda, servidas en el dominio correspondiente
- Redirecciones: por tienda
- Esquemas personalizados: por tienda
Solución de problemas
El sitemap no se genera
- Verifique que la carpeta
modules/dfallinoneseo/sitemaps/tiene permisos de escritura para PHP - Verifique los permisos:
chmod 755 modules/dfallinoneseo/sitemaps/ - Aumente
max_execution_timeen php.ini si tiene más de 50.000 productos
Los esquemas JSON-LD no aparecen
- Verifique que el módulo está activado (Ajustes → General)
- Verifique que el tipo de esquema correspondiente está activado (Schema → Tipos de esquemas generados)
- Vacíe la caché PrestaShop
- Inspeccione el código fuente HTML: los esquemas se inyectan en un bloque
script type="application/ld+json"
Las redirecciones 301 no funcionan
- Verifique que el módulo está instalado y activado
- Verifique que las redirecciones están marcadas como activas (pastilla ON)
- Para regex, pruebe su expresión en regex101.com en modo PCRE
- El orden de prioridad es: exacto → prefijo → regex (por
hit_countdescendente)
GA4 / GTM no se inyecta
- Verifique el formato del ID (
G-XXXXXXXoGTM-XXXXXXX) - Si Consent Mode v2 está activo, el snippet está en modo «denied» por defecto hasta el consentimiento. Verifique la capa CMP.
- Inspeccione el
headde la página: el snippet GA4/GTM se inyecta justo antes del cierre
El robots.txt no cambia
- Verifique que no exista un archivo
robots.txtestático en la raíz del sitio (tendría prioridad sobre el módulo). Elimínelo. - El módulo sirve robots.txt vía una ruta PrestaShop — verifique que las URL amigables están activadas
Error al crear las tablas SQL en la instalación
- Verifique que el usuario MySQL tiene los permisos
CREATEyALTER - Verifique la codificación: MySQL debe soportar
utf8mb4con collationutf8mb4_unicode_ci - Si el prefijo de tabla personalizado de PrestaShop supera 5 caracteres, algunos nombres de índice pueden superar el límite MySQL de 64 caracteres. Contacte con soporte.
Referencia técnica
Hooks utilizados
El módulo registra 18 hooks:
displayHeader— inyección de etiquetas meta, canonical, hreflang, OG, Twitter, JSON-LD, GA4/GTM, verificacionesdisplayBeforeBodyClosingTag— inyección GTM noscript, FB Pixel noscript, custom body-end codedisplayBackOfficeHeader— CSS/JS del back-officedisplayAdminProductsExtra— metabox SEO en ficha de productoactionDispatcherBefore,actionDispatcherAfter— routing de redirecciones y captura 404actionObjectProductAddAfter,actionObjectProductUpdateAfter— auto-fill meta + auto-301actionObjectCategoryAddAfter,actionObjectCategoryUpdateAfter— idem categoríaactionObjectCmsAddAfter,actionObjectCmsUpdateAfter— idem CMSactionObjectManufacturerUpdateAfter,actionObjectSupplierUpdateAfter— auto-301 al cambiar slugactionAdminControllerSetMedia,actionFrontControllerSetMedia— assets CSS/JSdisplayProductExtraContent— reservado para usos futurosmoduleRoutes— rutas/sitemap.xml,/plan-du-site,/robots.txt,/llms.txt
Tablas SQL añadidas
Todas las tablas usan el prefijo df_seo_, charset utf8mb4, collation utf8mb4_unicode_ci:
df_seo_meta,df_seo_meta_lang— sobrescrituras meta por entidaddf_seo_template,df_seo_template_lang— plantillas por tipodf_seo_redirect— redirecciones 301/302/307/308/410df_seo_404— diario de 404df_seo_score— snapshots de score (analizador)df_seo_keyword— focus keywordsdf_seo_robots_rule— reglas robots.txtdf_seo_schema_custom— esquemas JSON-LD personalizadosdf_seo_log— log diagnóstico interno
Desinstalación
La desinstalación elimina los hooks y las pestañas del back-office, pero conserva las tablas SQL y los datos. Para purgar completamente:
DROP TABLE ps_df_seo_meta, ps_df_seo_meta_lang, ps_df_seo_template, ps_df_seo_template_lang,
ps_df_seo_redirect, ps_df_seo_404, ps_df_seo_score, ps_df_seo_keyword,
ps_df_seo_robots_rule, ps_df_seo_schema_custom, ps_df_seo_log;
DELETE FROM ps_configuration WHERE name LIKE 'DFSEO_%';
Actualizaciones y soporte
- Actualizaciones: 12 meses incluidos desde la compra. Renovación anual opcional a 49 €.
- Soporte: 12 meses por email, respuesta en 48h hábiles.
- Changelog y descarga de las últimas versiones en su cuenta de cliente DataFirefly.