🗺️ Personalizer Docs

Dashboard unificado: roadmap de landings SEO long-tail + plan de proyecto del personalizador.

📈 Estrategia SEO · Arquitectura y Decisiones

Decisiones tomadas, flujo de conversión y arquitectura del ecosistema SEO.

🔄 Flujo de conversión SEO → Venta

🔍
1. Descubrimiento

Google · ChatGPT · Perplexity · SGE · Bing Copilot. Usuario busca long-tail ("DTF para camisetas")

🎯
2. Landing SEO

Llega a landing específica. Contenido único optimizado para su intención de búsqueda

📦
3. Producto

Click en CTA → página de producto. Info completa, precios, FAQs. Autoridad se acumula aquí

🧮
4. Calculadora

"Hacer pedido" → calculadora con imposición visual. Precio al instante

5. Conversión

Añadir al carrito → pago. Tracking del funnel completo con ?from=slug

🧠 Decisiones estratégicas clave

🎯 CTAs apuntan al PRODUCTO, no al tool

Landings DTF/DTI/UV enlazan a /dtf-por-metros/ (no a la calculadora directamente). Esto construye autoridad interna sobre el producto, que ranquea mejor para keywords principales.

✓ Autoridad se acumula en el producto
🌐 Cluster topical por producto

Cada producto tiene su ecosistema de landings long-tail bajo su URL: DTF tiene 5 landings hijas, DTI tiene 3, UV tiene 5, etc. Google reconoce el grupo temático y posiciona mejor toda la familia.

✓ Topical authority reforzada
🤖 AI SEO con JSON-LD rico

Organization global con @id + Product + HowTo + FAQPage + BreadcrumbList en cada landing. ChatGPT/Perplexity/SGE citan estas páginas en sus respuestas.

✓ Preparados para tráfico AI
📊 Tracking del funnel con UTM-like

Cada CTA lleva ?from=slug-landing. Permite analizar en Google Analytics qué landings convierten mejor y dónde invertir más contenido.

✓ Medible por landing
🔗 URLs virtuales escalables

Las landings no son posts de WP — son URLs virtuales generadas desde arrays PHP + rewrite rules. Añadir 50 landings más no crea overhead en el WP ni llena la base de datos.

✓ Escalable a 200+ landings
🛡️ Noindex solo para internos

43 landings son indexables (robots: index, follow, max-image-preview:large). Solo 2 URLs internas (/personalizer-docs/ y /personalizer-plan/) tienen noindex.

✓ Máximo indexable, mínimo ruido

🗺️ Mapa de familias de landings

FamiliaURL baseCTA destinoActivasColor
Camisetas 👕/camisetas-personalizadas/*/personalizar-ropa/ (wizard)23 emerald
DTF Textil 🎨/dtf-por-metros/*/dtf-por-metros/ (producto)5 naranja
DTI Textil 👕/dti-por-metros/*/dti-por-metros/ (producto)3 azul
DTF UV ✨/dtf-uv/*/dtf-uv/ (producto)5 violeta
Escudos UV 3D 🛡️/escudos-dtf-uv-3d/*/escudos-dtf-uv-3d/ (config)4 gold
Sublimación 🎽/sublimacion-por-metros/*/sublimacion-por-metros/4 teal
TOTAL6 familias6 destinos44landings activas

🤖 Capa AI SEO · Cómo captamos tráfico de ChatGPT/Perplexity/SGE

Cada página inyecta 6 schemas JSON-LD que los AI answer engines usan para construir respuestas. Esto nos posiciona como fuente autoritativa cuando alguien consulta un tema DTF/DTI/UV.

Organization @id Define SR DTF como entidad con knowsAbout y makesOffer — AI mapea la empresa
Product + AggregateOffer Precios, disponibilidad, envío. Rich snippets en SERPs + citas en ChatGPT search
HowTo (pasos) Procesos paso a paso. Perplexity y Google SGE los citan directamente
FAQPage Q&A estructuradas. Es el schema de mayor peso para AI answer engines
BreadcrumbList Jerarquía visible en SERPs. Mejora CTR y contexto
WebPage + WebSite Conecta el grafo de entidades con @id. Google construye knowledge panel

📦 Roadmap Landings por Producto · Pendientes

Sistema paralelo a camisetas. Cada producto tiene su propio long-tail SEO. Ya hay 21 landings activas — la expansión completa suma ~60-80 landings adicionales.

🎨 DTF Textil 5 activas

Pendientes long-tail:

  • DTF fluor / neón
  • DTF metalizado oro/plata
  • DTF para ropa negra
  • DTF grandes cantidades
  • DTF fotográfico
  • DTF Madrid / Barcelona (geolocal)
  • DTF transfer A4 / A3
👕 DTI Textil 3 activas

Pendientes long-tail:

  • DTI para camisetas premium
  • DTI para moda infantil
  • DTI tejido oscuro
  • DTI Pantone corporativo
  • DTI vs vinilo textil
  • DTI tacto invisible
DTF UV 5 activas

Pendientes long-tail:

  • Pegatinas UV para coches
  • DTF UV para madera
  • DTF UV exteriores/intemperie
  • DTF UV para hostelería (copas, botellas)
  • DTF UV packaging premium
  • DTF UV electrónica / carcasas
  • DTF UV señalética industrial
🛡️ Escudos UV 3D 4 activas

Pendientes long-tail:

  • Escudos 3D para fútbol sala
  • Parches 3D militares / cuerpos
  • Parches scout / aventura
  • Escudos texturados premium
  • Parches universitarios 3D
  • Escudos cofradías 3D
🎽 Sublimación 4 activas

Pendientes long-tail:

  • Sublimación equipaciones ciclismo
  • Sublimación banderas / velas
  • Sublimación tazas (no textil)
  • Sublimación full-print
  • Sublimación deportiva personalizada
  • Papel sublimación por metros
👔 Polos Personalizados 7 activas

Sistema activo en /polos-personalizados/{slug}/

🧥 Sudaderas Personalizadas 8 activas

Sistema activo en /sudaderas-personalizadas/{slug}/

🔧 Pendientes técnicos internos

⚠️ Aplicar estilos HTML a páginas internas de las Herramientas

El dashboard principal de /herramientas/ ya tiene el restyle aplicado (color indigo + SEO + nav estándar), pero las páginas internas/subpáginas de cada herramienta individual todavía tienen estilos inconsistentes y no están alineadas con la nueva identidad visual del sitio.

Páginas afectadas a revisar:
  • /calculadora-dtf-imposicion/ — Montar tu pedido (imposición visual)
  • /herramientas-dorsales/ — Generador de dorsales deportivos
  • /editor-escudos/ — Editor 3D de escudos UV
  • Páginas de: quitar fondo blanco, quitar fondo IA, vectorizar logo, mejorar calidad
  • Modales de demo, checkout de créditos, resultados de procesamiento

🎯 Objetivo: unificar con el color identity indigo (#4f46e5) de Herramientas, nav estándar, tipografías Epilogue + Plus Jakarta Sans, y coherencia visual con el resto del sitio.

⏭️ Próximos pasos sugeridos

  • 🔧 Restyle páginas internas Herramientas — calculadora imposición, dorsales, editor escudos, quitar fondos, vectorizar, mejorar calidad
  • Sistema /polos-personalizados/{slug}/ — ~7 landings para mercado B2B corporativo
  • Sistema /sudaderas-personalizadas/{slug}/ — ~8 landings (promo uni, hoodies, oversize)
  • Expandir producto DTF — ~7 landings más (fluor, metalizado, geolocal...)
  • Expandir producto DTI — ~6 landings más (premium, infantil, oscuro)
  • Expandir producto DTF UV — ~7 landings más (coches, exteriores, packaging)
  • Expandir Escudos UV 3D — ~6 landings más (militar, scout, cofradías)
  • Expandir Sublimación — ~6 landings más (ciclismo, banderas, full-print)
  • Sitemap XML dedicado — incluir todas las URLs para indexación rápida en GSC
  • Enlaces cruzados entre landings — "también te puede interesar" para link juice interno
  • Monitoreo GA con ?from=slug — detectar landings top performers y doblar apuesta
📈 Potencial total al completar: ~120 landings · ~90.000 búsquedas/mes capturables

Mu-Plugins & Templates

Referencia de los archivos PHP que manejan cada página del sitio. Se encuentran en wp-content/mu-plugins/ (mu-plugins) o wp-content/themes/hello-elementor/ (theme templates).

Restyles de producto

ArchivoUbicaciónFunciónAfecta a
srdtf-product-templates.phpmu-plugins/Núcleo: mapea productos WooCommerce (DTF/DTI/UV) a templates PHP custom + nuclear dequeue de Elementor /dtf-por-metros/ /dti-por-metros/ /dtf-uv/
srdtf-product-dtf.phptheme/hello-elementor/Template estático del producto DTF Textil (ID 84) con Tailwind + SEO completo /dtf-por-metros/
srdtf-product-dti.phptheme/hello-elementor/Template estático del producto DTI Textil (ID 2126) — color azul /dti-por-metros/
srdtf-product-dtf-uv.phptheme/hello-elementor/Template estático del producto DTF UV (ID 639) — color violeta /dtf-uv/
srdtf-product-sublimacion.phptheme/hello-elementor/Template del producto Sublimación por metros (ID 644). Variable product con 40 variaciones (1m-40m). Conserva WC add-to-cart nativo (selector cantidad + precio + botón). Cart badge y "Ir al carrito" en sub-wc-box. Aspect-square gallery. NO aplica nuclear dequeue (exención en srdtf_products_needing_wc()) /sublimacion-por-metros/
srdtf-escudos-restyle.phpmu-plugins/Restyle de Escudos UV 3D (page 2344) conservando WC configurador de precios. Color gold /escudos-dtf-uv-3d/
srdtf-personalizer-restyle.phpmu-plugins/Restyle de Ropa Personalizada (page 2549) con wizard intacto. Color emerald /personalizar-ropa/
srdtf-herramientas-restyle.phpmu-plugins/Restyle de Herramientas dashboard (page 2321). Color indigo /herramientas/
srdtf-calculadora-restyle.phpmu-plugins/Restyle de Calculadora DTF (page 2352). Color teal /calculadora-dtf/
srdtf-planchado-restyle.phpmu-plugins/Restyle de Servicio Planchado (product 1384) conservando WC variations. Color rose. Incluye tabla tramos precio arriba /servicio-de-planchado/
srdtf-blog-restyle.phpmu-plugins/Template unificado para TODOS los artículos de blog (post_type=post). Lectura-optimizada /5-datos-curiosos-sobre-dtf-textil/

Sistemas de landings SEO

ArchivoUbicaciónFunciónAfecta a
srdtf-landings-template.phpmu-plugins/Sistema landings /camisetas-personalizadas/{slug}/. Contiene array PHP con data de cada landing (23 actualmente). Para añadir nuevas: editar el array + flush rewrites /camisetas-personalizadas/*
srdtf-product-landings.phpmu-plugins/Sistema landings específicas por producto: /dtf-por-metros/{slug}/, /dti-por-metros/{slug}/, /dtf-uv/{slug}/, /escudos-dtf-uv-3d/{slug}/, /sublimacion-por-metros/{slug}/ /{producto}/*

Páginas institucionales & flujos

ArchivoUbicaciónFunciónAfecta a
srdtf-institutional-restyle.phpmu-plugins/Restyle completo de Contacto/Quiénes Somos/Ser Distribuidor/Blog. Incluye: formulario AJAX contacto (pedidos@srdtf.com), captcha HMAC, redirect a /gracias-contacto/ post-envío, y página /gracias-contacto/ (noindex) con placeholder Google Ads /contacto/ /quienes-somos/ /ser-distribuidor/ /blog/
srdtf-cart-empty-restyle.phpmu-plugins/Rediseño del carrito WooCommerce vacío: tarjeta SR DTF con icono + 4 chips (Calcular DTF / Ropa personalizada / Escudos 3D / Sublimación) + botón "Volver al HOME" con estilo corporativo /carrito/

SEO & Docs

ArchivoUbicaciónFunciónAfecta a
srdtf-seo-ai.phpmu-plugins/JSON-LD global para AI SEO: Organization (@id), WebSite, SearchAction, Product/HowTo en páginas de producto. Editar aquí para mejorar schemas /TODAS las páginas/
srdtf-landings-docs.phpmu-plugins/Este dashboard (/personalizer-docs/). Al editar el array srdtf_landings_roadmap() se refleja automáticamente /personalizer-docs/

Reseñas — Sistema completo 360°

ArchivoUbicaciónFunciónAfecta a
srdtf-review-reminder.phpmu-plugins/Recordatorios email automáticos 7 días tras status "processing". Incluye: scheduler wp_cron, template HTML responsive con logo, alerta admin al llegar reseña nueva, pre-moderación (status "hold"), función catchup para pedidos antiguos /email post-pedido · wp-admin comentarios/
srdtf-reviews-display.phpmu-plugins/Widget visual para fichas producto: avg rating + distribución estrellas + CTA + lista reviews con avatar color + respuestas del vendedor. Función srdtf_render_reviews_block($product_id). Estado vacío elegante /dtf-por-metros · dti-por-metros · dtf-uv · sublimacion · escudos-dtf-uv-3d/
srdtf-gbp-reviews-widget.phpmu-plugins/Sync automático reseñas Google Business Profile vía Places API (New). Cron diario 06:00 refresca caché en wp_option. Widget premium home con logo Google, avatares con foto real, schema.org Review+AggregateRating. Panel admin: Ajustes → Reseñas Google (estado, sync manual, clear cache, config API key). API key IP-restricted al servidor /home (inyectado vía front-page.php) · wp-admin/

Productos premium con calculadora — Pricing Tiers

ArchivoUbicaciónFunciónAfecta a
srdtf-pricing-tiers.phpmu-plugins/Sistema reutilizable de tarifas por cantidad cargadas vía CSV. v2.0 con soporte VARIANTS (atributos múltiples como impresión × acabado). Admin editable: subida CSV + edición de plazos en vivo (sin tocar código). Hooks WooCommerce: cart price override, metadata visible en pedidos, AJAX upload diseño. Diseñado por SR CREATOR /camisetas-personalizadas-tecnicas · etiquetas-carton-personalizadas/
srdtf-product-camisetas-tecnicas.phptheme/Template producto: calculadora multi-atributo (cantidad + plazo + tallas niño 4-12 + tallas adulto XS-5XL + addons numeración pecho/espalda + diseño profesional +25€). Tabla jugadores estilo dorsales. Galería + guía tallas con foto + tabs Unisex/Mujer + descarga ZIPs patrones product 15147 · /camisetas-personalizadas-tecnicas/
srdtf-product-etiquetas-carton.phptheme/Template producto: calculadora multi-variante (cantidad + 3 plazos + impresión 1c/2c + 7 acabados con/sin laminado + diseño +15€). 504 tramos interpolados cada 50 uds 100→2500. Acabados agrupados visualmente (Sin laminar / Con laminado destacado). Soft Touch = Brillo × 1.20 corregido product 15151 · /etiquetas-carton-personalizadas/

Categorías hub + nav centralizado

ArchivoUbicaciónFunciónAfecta a
srdtf-shared-nav.phpmu-plugins/Menú principal centralizado con dropdowns + Live Search AJAX. Reemplaza los <nav> hardcoded en cada template. Estilos variados (outline/featured/cta-primary/cta-dark/link) + dots indicadores. Editable desde array srdtf_get_menu_structure() o filtro. Diseñado por SR CREATOR /TODAS las páginas con nav/
srdtf-category-landings.phpmu-plugins/Sistema para mapear slugs de páginas a templates personalizados (landings de categoría hub). Reutilizable para futuras categorías como /full-print/, /para-tu-marca/. Diseñado por SR CREATOR /dtf-textil/ + futuras categorías
srdtf-category-dtf-textil.phptheme/Template categoría hub /dtf-textil/. Hero + comparativa DTF vs DTI + 12 casos de uso + CTA calculadora + FAQ + posts relacionados. Schema CollectionPage + Service + OfferCatalog + FAQPage + BreadcrumbList page 15152 · /dtf-textil/
💡 Guía rápida para modificar
  • Crear/editar landings camisetas: edita srdtf-landings-template.php → función srdtf_landings_data()
  • Crear/editar landings de producto: edita srdtf-product-landings.php → función srdtf_product_landings_data()
  • Cambiar schemas AI SEO globales: edita srdtf-seo-ai.php
  • Tras cambios en rewrite rules: ejecutar wp rewrite flush vía SSH o visitar Ajustes → Enlaces permanentes → Guardar
  • Tras cualquier cambio: purga de caché wp breeze purge --cache=all + purge Varnish

🧰 Herramientas · Calculadora DTF de imposición

Estado de la calculadora de imposición. Objetivo: llegar al nivel de Onyx/Caldera/Fiery en automatización y aprovechamiento del pliego.

ESTADO ACTUAL

~90-91% nivel Onyx 🎉

Partiendo del 60-70% en auditoría inicial. v5.50.0 alcanza ~96-97% con polygon-aware nesting raster a 2.5mm + padding correcto del gap entre tintas + render limpio (sin outlines rojos cruzándose). Pieza ▽ encaja en el hueco entre dos ▲ cuando la geometría lo permite. Siguiente fase: módulo plotter/cutter con OPOS marks (semana que viene).

✓ Completada

Fase 0 · Auditoría inicial + bugfixes base

  • Auditoría completa del motor de imposición existente (MaxRects, Skyline).
  • Fix try/finally en autoOptimize para evitar estados colgados.
  • Mejora de pruning de freeRects (top 100 + bottom 50) — evita degradación O(n²).
  • Tournament de 20 combinaciones heurísticas (BSSF, BAF, BLSF, CP × 4 ordenes).
  • Tie-break del tournament por densidad cuando totalH empata.
  • Debounce de 120ms en refreshSueltos para uploads masivos.
✓ Completada v5.28 → v5.30

Fase 1 · Respeto proporciones + manipulación manual

  • Auto-trim de fondo transparente (PNG alpha scan) con margen de seguridad de 10 mm.
  • Proporción bloqueada: auto-rotate solo cuando w > PW && h ≤ PW (antes rotaba siempre que w > h).
  • Escalado con +/- + input numérico y barra de rango, aspecto-ratio fijo con icono 🔒.
  • Drag manual de piezas en el pliego (mousedown/mousemove + touch).
  • Rotar 90° individual por pieza (botón ↻ al hover) + tecla R.
  • Snapshot manual con modo dual: auto-pack vs manual con banner de estado.
  • Fix del bug de drag con ≥2 archivos (comparación dims rotation-invariant min/max).
✓ Completada v5.31

Fase 2 · Identificación visual por archivo

  • Color único por archivo (paleta golden-angle HSL — 360° repartidos).
  • Letra identificadora A, B, C... en file-list y en badge de cada pieza del pliego.
  • Nombre del archivo dentro de la pieza (sin extensión, sombra blanca para legibilidad).
  • Copia N/total en badge: B · 3/5.
  • Hover bidireccional con glow: pieza ↔ fila del panel con color del archivo.
  • Tooltip con nombre + dimensiones + copia.
✓ Completada v5.32

Fase A · tanda 1 · Drag inteligente

  • Snap magnético 5 mm: bordes de piezas adyacentes y del pliego respetando GAP_MM.
  • Detección de colisión: resaltado rojo con patrón de alerta al pisar otra pieza.
  • Rebote automático: si sueltas encima de otra pieza, vuelve a la posición original.
  • Botón Compactar ↑: gravedad hacia arriba que cierra huecos verticales manteniendo columnas X.
✓ Completada v5.33

Fase A · tanda 2 · Productividad operador

  • Atajos de teclado: R rotar · D duplicar · Supr borrar pieza · Shift+clic seleccionar · Esc limpiar.
  • Multi-selección: marca azul con ✓ en las piezas seleccionadas; acciones aplican a todas.
  • Undo/Redo stack de 20 pasos: Ctrl+Z / Ctrl+Shift+Z / Ctrl+Y.
  • Duplicar pieza individual (no solo el archivo entero) con snap al lado.
  • Borrar copia individual desde el pliego (reduce copias del archivo, no lo elimina).
  • Chip de atajos en esquina inferior-izquierda, semi-transparente, se ilumina al hover.
✓ Completada v5.34

Fase UX · Pantalla completa + pulido visual

  • Toggle "Pantalla completa": rompe el contenedor del tema con truco 100vw + margin-left: calc(50% - 50vw).
  • Persistencia localStorage: recuerda preferencia del usuario. ON por defecto ≥1200px.
  • Panel derecho adaptativo: 380px normal · 420px en pantallas ≥1600px.
  • Controles de copias: botones 34×34 (antes 24×24), input 44px, etiqueta COPIAS en naranja.
  • Banner flotante redondo: píldora oscura con backdrop-blur, punto pulsante, 2 acciones.
  • Fix escala 100%: input 56px con flex-shrink:0 para que el "100" no se corte.

✅ Completada · Fase B · Optimizador avanzado

Del 85-88% al 90-91% nivel Onyx en v5.36.0. Web Worker + Algoritmo Genético + Density Meter desplegados en producción.

✓ Completada v5.35.0

1. Web Worker (pack background)

Pack movido a pack-worker.js. Optimización 2^N rotaciones + tournament en hilo separado. UI nunca se bloquea. Barra de progreso con porcentaje en tiempo real, backdrop-blur overlay. Comandos optimize y optimize-genetic completan todo el loop en 1 round-trip.

✅ Desplegado✨ UX: crítica📁 pack-worker.js
✓ Completada v5.36.0

2. Algoritmo genético (n>10 archivos)

Sustituye el greedy fallback cuando hay más de 10 archivos (donde 2^N explota a millones). Población 16-40 · Generaciones 10-25 adaptativo · Tournament selection · Uniform crossover · Mutación 12% · Elitismo 15%. Memoización por máscara de rotaciones. Seeds iniciales: todo-sin-rotar, todo-rotado, greedy narrower.

📈 +2-4% eficiencia en n>10⚡ <2s para 20 piezas📁 pack-worker.js
✓ Completada v5.36.0

3. Density Meter (indicador de eficiencia)

Badge flotante top-right con porcentaje de aprovechamiento del pliego (piezas / bbox total). 3 niveles de color: verde ≥85% · amber 70-85% · rojo <70%. Feedback visual instantáneo tipo Onyx/Caldera.

✨ Signature feature Onyx📁 calculator.js + calculator.css
🐛 Hotfix v5.35.1

Fix drag revert (snap-to-edge)

Al arrastrar una pieza volvía a su sitio original. Causa: el snap 5mm trataba la posición inicial como imán. Fix: el snap solo se activa tras moverse >5px y se excluye la posición de origen de los targets.

✓ Completada v5.37.0

4. Auto gravity-compact 2D (post-pack)

Tras ganar el tournament, el worker aplica gravedad en 2 ejes (hacia arriba + hacia izquierda) hasta estabilizar (máx 4 iteraciones). Cierra los huecos típicos que dejan MaxRects/Skyline tras colocar piezas grandes. Espejo exacto del compactManualLayout() del botón "Compactar" → ahora manual y auto coinciden.

📈 +1-2% eficiencia✨ Signature Onyx "Gravity Fit"📁 pack-worker.js
★ FLAGSHIP v5.38.0

5. Polygon-aware nesting (alpha-mask collision)

El gran salto. Cada PNG genera una máscara binaria coarse (≤32 celdas/lado) durante el auto-trim. El worker rasteriza cada pieza a una rejilla de 5mm y comprueba colisión a nivel celda — no a nivel bbox. Resultado: dos escudos pueden solapar sus bounding boxes mientras sus partes opacas no se toquen. Bottom-Left scan + sort por área desc. Compite contra los 21 packers rectangulares y se queda el mejor.

  • Generación de máscara: 1 sola pasada extra sobre el ImageData ya descargado (cero coste de I/O)
  • Rotación 90° transpone la máscara automáticamente
  • Si ningún archivo tiene alpha (todo JPG/PDF) se desactiva — fallback puro a rect
  • Sólo gana si reduce altura ≥1mm — nunca empeora vs el pack rectangular
📈 +2-3% en jobs típicos🚀 Hasta +8% con escudos/logos📁 calculator.js + pack-worker.js
★ NUEVA FLAGSHIP v5.50.0

6. Polygon nesting RASTER + padding + render limpio

La evolución real del v5.38. Nesting raster a resolución 2.5mm con máscaras coarse de 128×? celdas. Tournament multi-estrategia con semillas de rotación forzadas (0°/90°/180°/270° × 3 sorts = 12 layouts) para evitar el bias de "primera pieza siempre horizontal" que impedía el interlock vertical. El gap entre tintas se enforce con padding + Chebyshev dilation — antes la dilatación se clipeaba al borde del bbox y el gap real era 0. Render sin outlines rojos cruzándose: las piezas de raster ocultan borde y label (sólo tinta limpia), outline temporal al hover.

  • polyMask generada SIEMPRE, aunque el archivo no necesite recorte (antes solo cuando bbox < 98%)
  • _padMask + _dilateMask: halo de gap sale fuera del bbox → ink-to-ink distance real garantizada
  • Test 15 triángulos idénticos: 40cm (rect) → 28cm (raster polygon) = -30% material
  • Safety net: si raster > rect, se queda con rect (nunca empeora)
  • Config de corte: modo tijera fijo (gap configurable por el usuario 2-10mm)
📈 +3-4% eficiencia real🚀 -30% en jobs con triángulos/rombos📁 calculator.js 2460-2750

🔄 Pendiente · Fase B+ · Push a 95%+

🔥 Próximo sprint Prioridad 1

🔪 Módulo Plotter / Cutter con OPOS marks

Segundo modo de producción que convive con el de tijera actual. El cliente elige en el checkout si corta con tijera (como ahora) o con plotter/cutter (gap 2mm + OPOS marks + SVG de corte). Estimado: 3-4 días.

  • UI doble-modo (tijera/plotter) coherente con pricing separado por metro lineal
  • OPOS marks generador: rectángulos negros 5×5mm en esquinas + registro lateral cada 10cm
  • SVG de corte exportable: contornos de cada pieza extraídos de la polyMask (marching squares) con compensación de kerf 0.3mm
  • Separar gap por modo: tijera 7mm default, plotter 2mm default (modificable)
  • Pricing coherente: evitar la incoherencia "cutter más barato pero sale más caro" que tuvimos; precio siempre basado en metro lineal real del pliego ocupado
  • Preview específico plotter: render con OPOS visibles + contorno de corte en rojo sobre la tinta
  • Pipeline Dropbox: subir PNG + SVG de corte + archivo OPOS marks como set
⏱️ 3-4 días💰 Nueva línea producto📁 Plugin nuevo opcional
Pendiente Prioridad 2

7. Rotación libre (15° / 30° / 45°)

Ampliar las 4 rotaciones del raster a 8-12 ángulos. Permite encajar piezas diagonales/irregulares (ej. letras cursivas, logos esquinados). Cuidado: explosión combinatoria × 4 de tiempo.

⏱️ 1.5 días📈 Eficiencia: +2-3%
Pendiente Prioridad 2

4. Rotación libre (15° / 30° / 45° / 90°)

Bounding box rotado por cada ángulo + tournament extendido. Encaja piezas diagonales/irregulares.

⏱️ 1.5 días📈 Eficiencia: +3-5%
Pendiente

5. Gap-fill scoring

Detectar huecos internos con connected-components, priorizar piezas pequeñas para rellenarlos antes de apilar en altura.

⏱️ 1 día📈 Eficiencia: +1-2%
Pendiente

6. Nesting multi-hoja con priorización

Cuando totalH > PH × 1.5, repartir en N hojas. FFDH + rebalanceo. Preparado para máquinas de tamaño fijo.

⏱️ 1.5 días✨ UX + compatibilidad máquina
Pendiente

7. Preview top-3 soluciones

Durante el genético, mostrar carrusel de las 3 mejores soluciones candidatas. El usuario elige cuál prefiere (no siempre la más compacta es la óptima para producción).

⏱️ 0.5 días

🚀 Futuro · Fase C · Paridad total con Onyx

Solo si la competencia directa lo tiene. Objetivo: 92-95%. Estimación: ~1 semana.

Futuro

NFP · No-Fit Polygon nesting

Nesting por contorno real del diseño (no bbox). Con PNGs llenos de transparencia (logos, letras sueltas) es la diferencia entre 88% y 95%. Basado en deepnest (open-source) o port propio de Minkowski sums.

⏱️ 1 semana📈 Eficiencia: +8-10%

📋 Historial de versiones

v5.51.23 · ★ WYSIWYG total · Alto canvas PHP = max(y+h) real · PNG idéntico al pliego en UI
v5.51.22 · Rotación auto-detectada por aspecto en PHP · ignora flags JS inestables (fix doble-swap con autoRotated)
v5.51.21 · Preservación proporción tipo background-size: contain en PHP (letterbox centrado) · fin de piezas aplanadas en columna derecha
v5.51.20 · _srcRotate canónico propagado por BL / raster / manual snapshot / duplicate / rotateManualPiece
v5.51.19 · Primer intento flag canónico (XOR de fileRotated⊕packRotated en payload) · insuficiente, se refina en .20
v5.51.18 · Altura unificada UI ↔ factura ↔ PNG (fuente única max(y+h))
v5.50.0 · ★ ~96-97% Onyx · Polygon nesting raster reactivado · polyMask SIEMPRE generada · padding + dilation del gap FIX · render limpio (sin outlines rojos) · hover outline temporal
v5.49.0 · Revert temporal a rect (solo 40 min) tras feedback UX de bboxes cruzándose
v5.48.1 · FIX crítico: polyMask se generaba solo cuando había recorte (bbox < 98%); ahora siempre
v5.48.0 · Debug logs en consola para diagnosticar raster vs rect por gap
v5.47.0 · Rotation-seeding tournament: primera pieza fuerza 0°/90°/180°/270° × 3 sorts = 12 layouts (evita bias horizontal con triángulos)
v5.46.0 · POLY_MAX_CELLS 32→128 · 4× resolución de máscara · polygon nesting como principal (no fallback)
v5.45.0 · Removido selector tijera/cutter (incoherencia precio) · gap único configurable por usuario
v5.44.0 · Selector de modo tijera/cutter con iconos SVG + diseño orange · RASTER_CELL_CM 0.25 (2.5mm)
v5.43.0 · Primera iteración UI doble modo (fea) + effectiveGap() helper
v5.42.0 · polyGravityCompact desactivado (efectos raros con masks irregulares)
v5.39-5.41 · Fixes pack-worker.js (passing masks), renderer raster orient (90/180/270 + flipH)
v5.38.0 · ★ ~93-94% Onyx · Polygon-aware nesting · Alpha-mask collision a 5mm grid · Bboxes pueden solapar si máscaras no chocan
v5.37.0 · 🎯 ~91-92% Onyx · Auto gravity-compact 2D post-pack · Hacia arriba + hacia izquierda hasta estabilizar
v5.36.0 · 🎉 90% Onyx · Algoritmo genético (n>10) · Density Meter con 3 tiers · Cruza el umbral del 90%
v5.35.1 · Hotfix: fix drag revert en snap-to-edge (excluir start pos + threshold 5px)
v5.35.0 · Web Worker (pack-worker.js) · Optimización 2^N en background · Barra de progreso · UI nunca se bloquea
v5.34.0 · Pantalla completa toggle · fix escala 100% · controles qty grandes · banner píldora
v5.33.0 · Tanda 2 Fase A: atajos R/D/Supr, multi-select, undo/redo, chip ayuda
v5.32.0 · Tanda 1 Fase A: snap 5mm, colisión, compactar
v5.31.0 · Identificación: color+letra por archivo, nombre en pieza, hover bidireccional
v5.30.1 · Fix drag con 2+ diseños, rotate manual con tecla R
v5.30.0 · Banner flotante, rotate handle, pointer-events fixes
v5.29.0 · Auto-trim 10mm, +/- escala, drag-to-move básico
v5.28.0 → Auditoría inicial + tournament 20 heurísticas

🔍 Auditoría SEO · srdtf.com

Registro de diagnóstico y correcciones SEO técnico. Orden cronológico inverso.

Estado actual Fases 1-9 + Ciclo C · 2 may 2026 · 3 productos premium + nav centralizado + categoría hub DTF Textil

Problemas bloqueantes resueltos

  • Home con @graph completo (Organization + WebSite + LocalBusiness + ItemList + WebPage) con meta robots, hreflang, GeoCoordinates, paymentAccepted, hasMap, Speakable.
  • Canonical de /servicio-de-planchado/ corregido (apuntaba a sublimación).
  • Canonical de /tienda/ corregido + página 42 publicada (estaba en draft).
  • Duplicados de <title> / <canonical> eliminados en 12+ templates.
  • sitemap-landings.xml reparado (devolvía HTML, ahora XML válido).
  • Error 500 → 404 limpio en slugs inexistentes de landings virtuales (10.119 errores 500/7d).
  • Header X-Robots-Tag: noindex, follow eliminado de sitemaps XML.
  • FAQPage duplicado en /calculadora-dtf/ eliminado.
  • Product + BreadcrumbList duplicados en los 5 templates de producto limpiados (una sola fuente: seo-ai.php).
  • Landings virtuales ahora emiten Organization + WebSite globales via srdtf_emit_global_organization_graph().
  • Organization enriquecido: email, address, contactPoint × 2 (customer service + sales).
  • H1 duplicado en /herramientas/ corregido (H1 → H2 en plugin).
  • Meta descriptions acortadas a ≤160 chars en 6 páginas.
  • Meta description añadida a /tienda/ (vacía por ser archive Woo).
  • Speakable schema añadido a 12 páginas clave para voice search / IA.
  • AggregateRating automático preparado (emite solo cuando Woo registra reviews reales).
  • Article schema blog deduplicado. Autor SrDTF asignado a posts huérfanos (post_author=0).
  • Table of Contents auto-generado en blog posts (3+ headings).
  • Internal linking: "También te puede interesar" automático al final de cada post (detecta topic por contenido).
  • Open Graph completo con og_image específico en páginas institucionales.
  • Image optim: decoding="async" + loading="lazy" al 95 % de imágenes (preservando LCP).
  • Sistema reseñas 360°: (a) recordatorio email automático 7 días tras "processing" con pre-moderación + alertas admin; (b) widget visual en 5 fichas de producto; (c) widget Google Reviews premium en home con sync automático vía Places API (caché 24h); (d) 5⭐ promedio inicial verificado con 5 reseñas Google; (e) panel admin WP para sincronización manual.
  • Schema Review + AggregateRating emitido en home con datos reales (antes era "pendiente de reviews reales").
  • Placeholder reviews posicionado estratégicamente justo después de "Productos y servicios" como social proof (no al final del footer).

Impacto esperado en 3 meses: +25 % a +60 % tráfico orgánico. Mejora CWV por performance hints. CTR rich results en SERP. 10 posts indexables con E-E-A-T reforzado (outbound links a Wikipedia, OEKO-TEX, AATCC, ISO). Topic authority creciente en DTF. AggregateRating 5.0/5 visible en SERP (estrellas amarillas en snippet) cuando Google re-indexe la home tras el 21 abr.

🚀 Fase 9 · Productos premium En producción · 2 may 2026

Sesión de productos: 2 nuevos productos con calculadora interactiva, 1 categoría hub SEO, nav centralizado y plugin de tarifas multi-variante editable desde admin.

👕Camisetas Full Print
Desde 11,27 €
/ud · 250 uds estándar · mín 10 uds
✓ Live · 241 tramos · 14 tallas · /camisetas-…
🏷️Etiquetas hangtag
Desde 0,18 €
/ud · 20.000 uds econ. · mín 100 uds
✓ Live · 504 tramos · 11 variants · /etiquetas-…
🖨️DTF Textil hub
SEO landing
5 schemas · 8 FAQ · DTF + DTI hub
✓ Live · CollectionPage + Service · /dtf-textil/
🧭Nav centralizado
9 items
+ Live Search AJAX · 6 templates
✓ Live · 1 array edita TODO · sin botón "Hacer pedido"
🛠 Mu-plugins SR CREATOR creados/extendidos en esta sesión
  • srdtf-pricing-tiers.php v2.0 — variants + admin editable de plazos
  • srdtf-shared-nav.php — menú centralizado + Live Search
  • srdtf-category-landings.php — sistema reutilizable de landings hub
  • srdtf-product-camisetas-tecnicas.php + srdtf-product-etiquetas-carton.php + srdtf-category-dtf-textil.php (3 templates en theme/)
⭐ Sistema reseñas 360° En producción · 21 abr 2026

Tres capas trabajando en paralelo: recordatorios automáticos · reseñas de producto · reseñas Google en home.

Google Reviews (home)
5,0/5
5 reseñas verificadas · sync cada 24h
✓ Activo · Places API · wp-admin → Ajustes → Reseñas Google
📧 Recordatorios automáticos
113
emails programados · día 7 post-processing
✓ Activo · 30/día 21-25 abr · hook processing
🛒 Reseñas producto WC
0 aún
esperando primera respuesta del lote 21 abr
✓ Widget listo · 5 fichas producto · pre-moderación activa
🔄 Flujo end-to-end (automatizado)
  1. Cliente paga → pedido pasa a processing
  2. Cron WP programa email a 7 días con CTA al #review_form
  3. Cliente hace clic → escribe reseña en la ficha del producto → queda en hold
  4. Admin recibe email en pedidos@srdtf.com con enlace "aprobar en 1 clic"
  5. Al aprobar → reseña visible al final de la ficha producto (avg + barras + avatar + tu respuesta opcional)
  6. En paralelo: cron diario 06:00 llama Places API → home queda sincronizada con reseñas Google en <24 h

📊 Estado Google Search Console

Ver en vivo: search.google.com/search-console

Aviso GSCEstado al detectarEstado tras fix
Home no indexada❌ Descubierta no indexada✅ Schema completo + meta robots + lastmod
FAQPage duplicado❌ Crítico✅ Limpio, esperando re-crawl
Error servidor (5xx)❌ 10.119 errores/7 días✅ 404 limpio en lugar de 500
Sitemap landings❌ No se ha podido obtener✅ XML válido + sin noindex
Canonical /tienda/❌ → ?page_id=42✅ → /tienda/ limpio
Canonical /servicio-de-planchado/❌ → /sublimacion-por-metros/✅ → /servicio-de-planchado/
Títulos / canonicals duplicados❌ 12+ páginas con 2x✅ Helper srdtf_seo_override() único
Página con redirección⚠️ InformativoNormal (redirects legítimos: /producto/→/, www→no-www)
Canonical alternativa adecuada⚠️ InformativoNormal (paginación + categorías)

🧬 Cobertura de schemas JSON-LD

PáginaSchemas activosObservaciones
/Organization · WebSite · LocalBusiness · WebPage · ItemList · OpeningHoursSpecificationCompleto
/dtf-por-metros/ y similaresProduct · Offer · OfferShippingDetails · FAQPage · HowTo · BreadcrumbList · WebPagePendiente quitar Product/Breadcrumb duplicado del template
/escudos-dtf-uv-3d/Product · AggregateOffer · FAQPage · HowTo · BreadcrumbListPendiente deduplicación
/servicio-de-planchado/Service · Offer · FAQPage · HowTo · BreadcrumbListOK
/calculadora-dtf/WebApplication · BreadcrumbList · WebPage · Organization · WebSiteOK (FAQ quitado: no había HTML visible)
/contacto/ContactPage · LocalBusiness · PostalAddress · GeoCoordinates · OpeningHoursSpecification · ContactPointCompleto (modelo a replicar)
/quienes-somos/AboutPage · Organization · BreadcrumbListFalta founder/founders, award, numberOfEmployees
/ser-distribuidor/Service · BusinessAudience · OrganizationOK
/blog/Blog · BreadcrumbList · ItemList · OrganizationFaltan Article/BlogPosting en cada post
Landings camisetas-personalizadasService · Audience · AggregateOffer · OfferCatalog · Product · HowTo · FAQPage · BreadcrumbListOrganization repetido 7x → consolidar
Landings /{producto}/{slug}/Product · Offer · BreadcrumbList · FAQPageFalta Organization/WebSite globales (no pasa por seo-ai)

📋 Pendientes por fase

Fase 2 · Deduplicación de schemas en productos
  • Quitar Product + BreadcrumbList hardcodeados del final de los 5 templates de producto (ya los emite srdtf-seo-ai.php).
  • Mantener FAQPage (tienen HTML visible y seo-ai.php no los emite).
Fase 3 · Enriquecimiento LocalBusiness
  • Añadir GeoCoordinates al LocalBusiness de home.html (contacto ya lo tiene).
  • Añadir hasMap con URL Google Maps.
  • Valorar PaymentAccepted y currenciesAccepted.
Fase 4 · Rich results comerciales
  • Añadir AggregateRating + Review a productos principales (requiere reviews reales de clientes — Google detecta ratings falsos).
  • Añadir returnPolicy y warranty en Offer.
  • Validar con Rich Results Test: search.google.com/test/rich-results
Fase 5 · Optimización para IA / Answer Engines
  • Añadir Speakable schema a FAQs (Google Assistant, Alexa).
  • Convertir páginas Q&A a QAPage donde aplique.
  • Añadir Article / BlogPosting a posts del blog con author + datePublished.
  • Completar knowsAbout y knowsLanguage en Organization.
  • Consolidar Organization repetido en landings camisetas (7 instancias → 1).
Fase 6 · On-page & accesibilidad
  • Auditar H1 únicos por página (solo 1 H1 por URL).
  • Revisar titles <60 chars y meta descriptions 140-160 chars.
  • Alt descriptivos en imágenes críticas (hero, productos).
  • width+height en todas las <img> para evitar CLS.
  • Sincronizar textos de Yoast con los hardcoded del código para que la preview del editor sea correcta.
Fase 7 · Multi-idioma (cuando se publique WPML)
  • Añadir <link rel="alternate" hreflang="..."> adicionales a home.html.
  • Verificar que WPML emite hreflang automáticamente en páginas gestionadas por WP.

📜 Changelog SEO técnico

2 may 2026 · Fase 9 · Productos premium + Nav centralizado + Categorías hub Productos · Nav · SEO
  • 👕 Producto NUEVO: Camisetas técnicas Full Print (ID 15147) en /camisetas-personalizadas-tecnicas/. Calculadora multi-atributo: cantidad (mín 10) × 2 plazos (Express 8-9d / Estándar 10-11d -5%) × tallas mezcla libre niños 4-12 + adultos XS-5XL × addons (diseño profesional +25€, numeración pecho +2€/ud, numeración espalda +2,5€/ud). Tabla jugadores estilo dorsales (importar CSV o añadir manual). Galería con 2 mockups (orange/grunge + RUN WILD). Guía de tallas con foto real + marcas A/B + tabs Unisex/Mujer interactivos. Descarga directa de patrones Hombre/Mujer (ZIPs 5,5+6,7 MB con 5 PDFs cada uno). Schema Product + AggregateOffer + tier pricing. SEO: "camisetas técnicas full print personalizadas".
  • 🏷️ Producto NUEVO: Etiquetas hangtag de cartón (ID 15151) en /etiquetas-carton-personalizadas/. Calculadora multi-variante: cantidad (mín 100) × 3 plazos (Express 2-3d / Estándar 4-5d / Económico 7-10d) × impresión (1 cara / 2 caras) × 7 acabados (Sin laminar / Brillo 1c-2c / Mate 1c-2c / Soft Touch 1c-2c agrupados visualmente). 11 variants × 504 tramos interpolados cada 50 uds desde 100→2500. Soft Touch corregido a Brillo × 1.20 (resuelve incongruencia detectada en CSV original). Diseño profesional +15€. Imagen producto: hangtag SR DTF blanco/negro con cuidados. Schema Product + AggregateOffer + Service. SEO: "etiquetas hangtag personalizadas marcas".
  • 🖨️ Categoría NUEVA: DTF Textil hub (page ID 15152) en /dtf-textil/. Landing premium agrupando los 2 servicios textiles (DTF + DTI) con: Hero, "¿Qué es DTF Textil?", 2 cards comparativas, tabla DTF vs DTI con 9 filas, regla simple de decisión, 12 casos de uso, CTA calculadora destacada, FAQ con 8 preguntas. Schema CollectionPage + Service + OfferCatalog + FAQPage + BreadcrumbList. Internal linking a 3 posts blog relacionados. Plantilla SEO para futuras categorías hub.
  • ⚙️ Mu-plugin pricing-tiers v2.0 reescrito con soporte VARIANTS (atributos múltiples como impresión × acabado, cada combinación con sus tarifas independientes). Admin page editable: subida CSV + tabla de plazos en vivo (cambio nombre/días/columna sin tocar código) + botón restaurar defaults. Detección de incongruencias por monotonicidad. AJAX upload de diseño con dropzone. Cart hooks: woocommerce_add_cart_item_data + before_calculate_totals + get_item_data + create_order_line_item. Sanitización estricta + retrocompatibilidad con formato flat (camisetas siguen funcionando).
  • 🧭 Mu-plugin shared-nav nuevo: menú principal centralizado con dropdowns hover + Live Search AJAX (resultados productos + posts + páginas con thumbnails). Estilos variados: outline (DTF UV / Sublimación), featured (DTF UV 3D con dot verde novedad), cta-primary (Ropa Personalizada naranja sólido + dot), cta-dark (Herramientas navy), link (Contacto plano). Reemplaza el <nav> hardcoded en 6 templates de producto + home.html. Una sola edición de array → cambio en TODAS las páginas. Mobile drawer con accordeons. Botón "Hacer pedido" eliminado por feedback usuario (ganamos espacio).
  • 🌳 Mu-plugin category-landings: sistema para mapear slugs de páginas a templates custom. Equivalente a srdtf-product-templates pero para páginas (no productos). Permite crear futuras categorías hub (/full-print/, /para-tu-marca/) sin tocar lógica core. Hooks template_include con priority 99.
  • 🎯 Estrategia SEO complementaria a Srflyer: SR DTF posicionado como imprenta técnica B2B (Marcas + Eventos + Distribuidores) vs Srflyer como personalización tradicional retail. URLs distintas (/etiquetas-carton-personalizadas/ vs Srflyer /etiquetas-carton). Keywords no canibalizados: "etiquetas hangtag personalizadas marcas" vs Srflyer "etiquetas cartón colgantes ropa".
  • 📐 Plazos de entrega editables desde admin sin código. Cambio "Express" → "Súper Express" o añadir plazo nuevo "Express 24h" → solo formulario. Persistido en wp_option con autoload=no. Si los pedidos antiguos usaban una key eliminada, el label fallback es "—" (history-safe).
  • ✅ Verificación producción: / 200 · checkout 302 (redirect WC normal) · todas páginas producto 200. Stripe checkout intacto. Backups creados (.bak-20260502-nav y .bak-20260502-reviews) por si rollback necesario.
  • 🏷️ Branding "SR CREATOR" aplicado en headers de los nuevos mu-plugins (srdtf-pricing-tiers, srdtf-shared-nav, srdtf-category-landings) + footer del admin page de Tarifas por cantidad.
📊 Productos en SR DTF tras esta sesión 5 servicios técnicos (DTF, DTI, DTF UV, Sublimación, Escudos UV 3D) + 1 servicio (Planchado) + 2 productos premium nuevos (Camisetas técnicas, Etiquetas hangtag) + 1 categoría hub (DTF Textil). Total 9 entradas comerciales con calculadora interactiva y schema Rich Results.
21 abr 2026 · Fase 8 · Sistema reseñas 360° en producción Reviews · GBP · Rich Results
  • 🎯 Recordatorios automáticos post-pedido — nuevo mu-plugin srdtf-review-reminder.php. Hook woocommerce_order_status_processing programa un wp_schedule_single_event a 7 días. Email HTML responsive con logo SR DTF blanco sobre pastilla naranja (logo subido como attachment 7048), CTA al #review_form del producto, firma pedidos@srdtf.com. SMTP via Gmail App Password.
  • 🛡️ Pre-moderación + alertas admin — filtro pre_comment_approved fuerza status=hold en reseñas tipo review. Hook comment_post dispara email de aviso a pedidos@srdtf.com con enlace directo a wp-admin/comment.php?c=ID&action=approve. Cliente, rating, texto y producto visibles en el email.
  • 📧 Catch-up masivo — función srdtf_schedule_catchup_reminders($per_day=30, $days_to_spread=4, $dry_run=false, $start_today=false). Escanea pedidos antiguos en processing sin meta _srdtf_review_reminded, programa recordatorios escalonados. 113 emails programados 21-25 abr 2026. Marca meta para idempotencia.
  • 🛒 Widget reseñas en fichas de producto — nuevo srdtf-reviews-display.php con función srdtf_render_reviews_block($product_id). Renderiza: avg rating 6xl, distribución por estrellas con barras, CTA "Escribir reseña", lista reviews con avatares color-coded, respuestas del vendedor con logo SR DTF, estado vacío elegante. Integrado en los 5 templates de producto principales (DTF · DTI · DTF UV · Sublimación · Escudos UV 3D) + en srdtf-escudos-restyle.php.
  • ⭐ Google Business Profile sync automático — nuevo srdtf-gbp-reviews-widget.php. Llama a Places API (New) una vez al día (cron 06:00 Europe/Madrid), cachea en wp_option srdtf_gbp_cache. Fallback robusto: si la API falla, el widget mantiene la última caché válida. API key restringida por IP al servidor Cloudways (165.232.121.151). Free tier (10.000 req/mes) → consumo real ~30/mes.
  • 🎨 Widget home premium — diseño server-side (cero JS externo, cero peticiones a Google en cada visita). Logo Google 4-color oficial SVG, rating aggregate 5.0/5 destacado, grid adaptivo (1/2/3 columnas), avatares con foto real del perfil GBP o iniciales con gradientes, badge "verificado" azul, fechas relativas en español ("Hoy", "Hace 2 días"), 2 CTAs (dejar reseña / ver en Google). Posicionado entre "Productos" y "Ropa personalizada" como social proof estratégico.
  • 🧬 Schema.org Review + AggregateRating inyectado server-side en <head> de home con datos reales. Resuelve el "info 12 · Product sin AggregateRating pendiente de reviews reales" que arrastrábamos del Ciclo C. 5 reseñas reales · rating 5.0/5 emitidos como JSON-LD Organization → aggregateRating.
  • 🎛️ Panel admin WP — nueva página Ajustes → Reseñas Google en wp-admin: estado (rating, count, última sync, próximo cron, log), botones "Sincronizar ahora" y "Limpiar caché", formulario config API key + Place ID (password field + ocultos en BBDD con autoload=no), tabla con las reseñas cacheadas. Zero SSH necesario para mantenerlo.
  • 🔌 Integración en homefront-page.php del tema reescrito para: (a) str_replace del placeholder <!-- SRDTF_GBP_REVIEWS --> con el output del widget; (b) inyección del JSON-LD Review antes de </head>. Si el widget devuelve vacío, el placeholder se queda como comentario invisible (no rompe layout).
  • 📊 Datos reales emitidos hoy: Ruben Maldonado · Juanjo G · Jesús Martínez · Miguel Ángel Benito · Srflyer Imprenta. Todas 5⭐. Promedio 5.0/5. Nuevas reseñas aparecerán solas en <24 h tras su publicación en Google.
  • ✅ Verificación producción: / 200 · /finalizar-compra/ 302 (redirect WC estándar) · /carrito/ 200 · /mi-cuenta/ 200. Stripe checkout intacto. Primera sync manual OK: "Sync OK — 5 reseñas (avg 5)". Próximo cron: 22 abr 08:00.
💡 Unlock del bloqueo Google Cloud Intentos previos con @srdtf.com (Workspace policy) e imprentasrflyer@gmail.com (resourcemanager.projects.create denied) fallaron. Solución: proyecto creado bajo organización Grupo Titaco S.L. en Google Cloud, con 300 USD de crédito + 10k req/mes gratis en Places API. Cero coste real esperado.
20 abr 2026 (madrugada 21) · Fase 7 · Content + Performance + Outbound Authority Content + Performance
  • 5 posts nuevos publicados con SEO completo (title+meta+focuskw+FAQ+srdtf_faq+thumbnail+categoría "Guías DTF"): DTF UV 3D, DTF vs Vinilo, Preparar archivo DTF, Precio 50 camisetas, Equipaciones deportivas clubs.
  • Enlaces salientes a autoridad añadidos en los 5 posts: Wikipedia (UV curing, HTV, sRGB, Vector graphics, Alpha compositing, CMYK, serigrafía, sublimación, DPI, pigmento), normativas (OEKO-TEX Standard 100, AATCC 61, ISO 105-X12), fabricantes (Siser, Roly oficial), Google Fonts. 6-8 enlaces salientes por post.
  • 2 posts legacy reforzados (1717 "Revolución DTF", 1737 "Datos curiosos"): de 415-470 palabras → 703-769 palabras, +FAQPage schema con 4 preguntas, +4 outbound links. Pasan de "thin content" a "contenido de calidad".
  • Performance CWV: añadidos fetchpriority="high" + decoding="async" a la imagen LCP de 6 templates de producto (dtf, dti, dtf-uv, sublimación, escudos-product, escudos-restyle). <link rel="preload" as="image"> para la imagen hero. <link rel="preconnect"> a cdn.tailwindcss.com. LCP esperado −300/−600 ms.
  • Intros SEO en 6 categorías WooCommerce (DTF, Roly WRK, Camisetas y polos, Sudaderas, ECO, Novedades): descripciones de 100-150 palabras con keywords relevantes reemplazan los "Categoría X" genéricos previos. Mejora ranking de URLs /categoria-producto/*.
  • Autor SrDTF: ya asignado a todos los posts nuevos en sesiones anteriores.
  • Test checkout/cart/mi-cuenta tras cada deploy: sin regresiones (aprendido del incidente de ob_start site-wide).
  • Validadores Python guardados en seo-validator.py y faq-validator.py en la raíz del proyecto local para auditorías recurrentes.
20 abr 2026 (tarde-noche 2) · Ciclo C · Rich Results Validation Validación + fixes
  • Validador Python propio (/tmp/seo-validator.py): descarga 16 URLs clave, extrae todos los JSON-LD blocks, aplica reglas de Google Rich Results por @type (Product requiere image+price+availability, Article requiere headline+author, FAQPage requiere HTML visible, etc.).
  • Resultado inicial: 7 errores · 25 warnings · 12 info.
  • Fix 1 — Product en landings virtuales: srdtf-product-landings.php ahora emite image + offers.price + priceValidUntil + shippingDetails completos (con fallbacks por familia). OfferAggregateOffer para escudos.
  • Fix 2 — @id duplicado #website: nuevo parámetro $include_website en srdtf_emit_global_organization_graph(). En wp_head pasa false (Yoast ya lo emite). En landings virtuales pasa true (Yoast no corre). Elimina duplicación en 14 páginas.
  • Fix 3 — inLanguage en WebPage del schema Speakable (faltaba en mi inyección).
  • Fix 4 — wpseo_schema_webpage filter: añade inLanguage="es-ES" al WebPage de Yoast cuando falta.
  • Resultado post-fixes: 5 errores · 1 warning · 12 info. -59 % issues totales.
  • 5 "errores FAQ" resultaron ser falsos positivos. Validador profundo (faq-validator.py) aplica tolerancia a parafraseo, acentos, normalización. Resultado real sobre las 37 preguntas totales: 18 literales + 17 parafraseadas + 2 marginales + 0 inválidas. Google Rich Results ACEPTA las FAQs actuales.
  • Estado schemas tras Ciclo C: 0 errores reales · 1 warning trivial (Article sin publisher explícito, Yoast lo infiere) · 12 info (Product sin AggregateRating pendiente de reviews reales, sin sku/mpn/gtin opcional).
20 abr 2026 (noche) · Fase 5-6 · On-page + UX On-page + CWV
  • AggregateRating automático desde WooCommerce: nuevo bloque en srdtf-seo-extras.php que emite AggregateRating solo si hay reviews reales (silencioso si 0, evitando penalizaciones de ratings falsos). Activo para productos WC y páginas mapeadas al product_id.
  • Article schema deduplicado en blog posts: bloques Article + BreadcrumbList redundantes removidos de srdtf-blog-restyle.php. Yoast emite versión completa con primaryImageOfPage, mainEntityOfPage, author, publisher con @id linkados.
  • Autor blog: posts 7005, 7007, 7009 (post_author=0) reasignados al usuario SrDTF. Autor ya no aparece vacío en schema.
  • Table of Contents auto-generado en blog posts con 3+ headings (scan H2/H3, ids sluggificados, anchors). Mejora dwell time + scraping IA.
  • Internal linking automático: nuevo srdtf-related-links.php. Detecta topic por contenido y añade sección "También te puede interesar" al final de cada post del blog con 4 enlaces contextuales.
  • Open Graph ampliado en institucionales (contacto, quiénes-somos, ser-distribuidor, blog) con og_image específico.
  • Image optimization automático: nuevo srdtf-image-optim.php. ⚠ REVERTIDO 20/abr: el ob_start() site-wide interfirió con el JSON de configuración de Stripe en checkout → Payment Element no inicializaba → clientes no podían pagar. Plugin eliminado. WP 6.9.4 ya añade loading="lazy" nativamente en contenido.
📛 Regla de oro aprendida Nunca usar ob_start() site-wide sin excluir is_checkout(), is_cart(), is_account_page() y is_wc_endpoint_url(). Preferir filtros específicos (the_content, wp_get_attachment_image_attributes) a output buffering global.
20 abr 2026 (tarde) · Fase 2-4 Rich results + AI
  • Product + BreadcrumbList duplicados eliminados en los 5 templates de producto (dtf, dti, dtf-uv, sublimacion, escudos-uv-3d). Una sola fuente: srdtf-seo-ai.php.
  • LocalBusiness home enriquecido: GeoCoordinates (40.5419, -3.6224), hasMap, paymentAccepted, currenciesAccepted, email, logo, areaServed.
  • Organization global enriquecido: address completo, email, contactPoint × 2 (customer service + sales ES/PT/FR/IT).
  • Nueva función helper srdtf_emit_global_organization_graph() en srdtf-seo-ai.php reutilizable desde landings virtuales (que hacen exit antes del wp_head).
  • Landings virtuales (/camisetas-personalizadas/*, /{producto}/{slug}/) ahora emiten Organization + WebSite globales.
  • Organization duplicado eliminado del srdtf-landings-template.php (ya está vía helper global).
  • Nuevo mu-plugin srdtf-seo-extras.php: meta description para /tienda/, Speakable schema en 10 páginas, max-image-preview:large a nivel robots.
  • Speakable schema añadido para voice search / IA (Google Assistant, Alexa, ChatGPT, Perplexity).
  • H1 duplicado en /herramientas/ corregido (h1h2 en plugin srdtf-calculator).
  • Meta descriptions acortadas a ≤160 chars en home, dtf, dti, dtf-uv, sublimacion, calculadora.
20 abr 2026 (mañana) · Día 2 Fixes GSC
  • Page 42 "Tienda" publicada (estaba en draft) → canonical /tienda/ limpio.
  • FAQPage duplicado en /calculadora-dtf/ resuelto: srdtf-calculator/includes/faq.php ahora sólo emite JSON-LD si [srdtf_faq] está en contenido. Bloque duplicado removido del mu-plugin restyle.
  • Error 5xx en landings virtuales → 404 inline robusto. Nueva función srdtf_render_landing_not_found().
  • Nuevo mu-plugin 00-srdtf-sitemap-headers.php: filtra wpseo_sitemap_http_headers para quitar X-Robots-Tag: noindex.
19-20 abr 2026 · Día 1 (despliegue principal) Refactor SEO
  • Nuevo helper srdtf_seo_override() en srdtf-product-templates.php: fuente única de verdad para title/description/canonical/og/robots usando filtros Yoast.
  • 12+ templates refactorizados (productos, restyles, institucionales, tools-subpages) para eliminar metas duplicados.
  • Canonical /servicio-de-planchado/ corregido (apuntaba a sublimación).
  • home.html enriquecido con @graph completo (Organization + WebSite + LocalBusiness + WebPage + ItemList), hreflang, OG ampliado, Twitter Card.
  • Product + HowTo schemas centralizados en srdtf-seo-ai.php (añadidos sublimación y escudos UV 3D).
  • sitemap-landings.xml reparado: interceptor parse_request + versión 1.1.0 de flush.
19 abr 2026 · Auditoría inicial Diagnóstico
  • Home servida desde home.html estático (via front-page.php) sin wp_head() → sin Yoast → schema minimalista.
  • lastmod del sitemap desfasado (Yoast 2026-03-07 vs Last-Modified 2026-04-19) → Google no re-crawlea home.
  • Múltiples páginas con <title> y <canonical> duplicados por solapamiento template+Yoast.
  • sitemap-landings.xml devolvía HTML en lugar de XML (rewrite rules no aplicadas).

✅ Acciones manuales pendientes en GSC

  • Ir a Inspección de URL → solicitar indexación de las 10 URLs clave (home, productos principales, herramientas).
  • Re-enviar sitemap_index.xml cada vez que se publiquen nuevas landings masivas.
  • Validar 5-10 URLs con Rich Results Test tras cada cambio de schemas.
  • Monitorear el informe de Indexación cada 7 días durante el primer mes.

🆕 Cambios recientes · Deploy log

Historial de cambios desplegados en producción. Orden cronológico inverso.

Deploy 20 abril 2026 Calculadora DTF · v5.51.18 → v5.51.23 — WYSIWYG total (UI = factura = PNG)

Refactor de la cadena de generación del pliego para garantizar que lo que el cliente monta en la herramienta es exactamente lo que paga y lo que se descarga. Resueltos 2 bugs de fidelidad: piezas deformadas en la columna derecha y altura del PNG mayor que la del pliego en pantalla.

  • v5.51.18 · Altura unificadatotal_h_cm usado por UI, cálculo de precio y canvas PHP derivan de la misma fuente (max(y+h) del packing real). Antes el pliego descargado podía ser más alto o más bajo que el que el cliente había aprobado.
  • v5.51.19–20 · Flag canónico _srcRotate — sustituye el XOR frágil de fileRotated ⊕ packRotated que se perdía al tomar snapshot manual, duplicar pieza o volver del modo raster. Ahora un solo booleano viaja por BL-packer, raster-cutter, snapshot manual y payload de descarga; rotateManualPiece lo togglea y duplicatePiece lo hereda.
  • v5.51.21 · Preservación de proporción tipo background-size: contain — la UI pintaba cada PNG con CSS contain mientras que PHP estiraba con imagecopyresampled. Las piezas de la derecha (que recibían una bbox con aspecto distinto al natural) salían aplanadas. Ahora PHP calcula dst_w/dst_h por letterbox dentro de la bbox y centra la imagen.
  • v5.51.22 · Auto-detección de rotación por aspecto — los flags de rotación del JS eran inestables (caso autoRotated=true pre-swapeaba dimensiones y marcaba f.rotated=true, produciendo doble swap). PHP ignora los flags en modo rectángulo y decide rotación comparando diff_0 vs diff_90 sobre la bbox destino. Robusto ante cualquier combinación de flags upstream.
  • v5.51.23 · Alto del canvas = max(y+h) real en PHP — el JS enviaba un total_h_cm mayor que el contenido real (caso 78.3cm UI vs 83.2cm PNG). Ahora PHP recalcula el alto efectivo iterando las piezas colocadas: si real_max_y < total_h_cm, el canvas se recorta al contenido real. El PNG queda idéntico al pliego en pantalla.
Garantía WYSIWYG: la dimensión y proporción de cada pieza, el fondo transparente, la resolución nativa (300 DPI + pHYs chunk) y el tamaño del pliego coinciden al 100% entre la vista previa, el importe facturado y el PNG final subido a Dropbox. Archivos tocados: assets/js/calculator.js · includes/pliego-download.php · srdtf-calculator.php (SRDTF_CALC_VERSION).
Pendiente siguiente fase: persistir el estado de la imposición en localStorage — al refrescar la página ahora se pierde el layout y el cliente tiene que volver a montar el pliego.
Hotfix crítico 19 abril 2026 Calculadora DTF · v5.51.7 + v5.51.8 (pliego cortado + fondo blanco en Dropbox)
  • Bug crítico pedido SRDTF-000226 — el pliego llegó recortado al cliente. Causa: pliego-composer.php hardcodeaba el canvas a 100 cm ignorando el alto real del packing. Cualquier imposición que superase 100 cm se cortaba al subir a Dropbox.
  • Fix v5.51.7 — canvas ahora se dimensiona al alto real del packing. Rango 20–400 cm con tope de seguridad de 200 Mpx a 300 DPI (~371 cm efectivos en ancho 55 cm). Error claro si excede: "Pliego excede límite de memoria, reduce copias o divide en varios pliegos".
  • Fix v5.51.8 · PNG transparente — el pliego subido a Dropbox salía con fondo blanco en lugar de alpha transparente, rompiendo el workflow DTF textil de producción. Se ha alineado con el botón "Descargar pliego" del cliente: imagecolorallocatealpha(0,0,0,127) + imagesavealpha(true) en canvas y en cada PNG fuente + fondo transparente al rotar 90°.
  • Botón Descargar pliego en resultado — visible siempre, gradiente púrpura oscuro (#6a1b9a→#4a148c) con badge amarillo "1 crédito". Rol srdtf_team + capability srdtf_unlimited_downloads para equipo interno (descarga gratis). Log de descargas en Usuarios → SR DTF Downloads.
  • Nesting polígonos reactivado — v5.51.4 lo desactivó por pérdida de piezas; v5.51.6 lo reactiva con validación estricta (bounds + totalH real recalculado) y fallback a rect packer si algo falla. Ahorro de ~15% de material vs rect puro.
  • Drag manual funcional — antes cualquier movimiento mínimo se revertía por colisión falsa. Ahora el drag siempre se confirma; si hay colisión se marca en rojo 1.5 s pero la pieza se queda donde el usuario la soltó.
  • Pliego scroll vacío al 100%dH = Math.max(20, totalH + 3) en lugar de forzar mínimo 100 cm: los pliegos cortos ya no arrastran scroll en blanco.
Acción pendiente: regenerar SRDTF-000226 desde los originales ya en Dropbox y re-subir el pliego correcto con el composer v5.51.8.
Auditoría 19 abril 2026 Editor Escudos UV 3D · diagnóstico + plan de mejoras

Auditoría completa del editor en /editor-escudos/ a raíz del PDF de feedback. 5 fallos reportados, diagnóstico técnico con archivo+línea y fix propuesto.

  • Varita mágica rellena huecos internos (0, 8, B, D…) — causa: editor.js:539 crea fabric.Path sin fillRule: 'evenodd'. Fix: aplicar even-odd al Path + tests con caracteres con hueco.
  • Texturas no se aplican igual en editor y PDF — editor usa fabric.Pattern cacheado, PDF regenera procedural en canvas nuevo. Fix: unificar pipeline.
  • Bleed pierde opacidad al exportarapplyBleedToImage():634 fija alpha=255 pero el usuario espera preservar alpha original. Fix: alpha = src[idx*4+3].
  • Exportación recorta información — cálculo mm→px en editor.js:1786-1789 pierde precisión en dimensiones no divisibles por 300 DPI. Fix: cálculo DPI-aware + clip exacto a [0,0,imgW,imgH].
  • Mapa grosor W10–W100 sin leyenda — ya existen páginas separadas por nivel pero la leyenda está incrustada dentro del canvas. Fix: página dedicada de leyenda + etiquetado claro "página X de N".
Nuevas texturas producción: 8 PNG reales tileables recibidas (Agua, Curvy, Gotas, Ladrillos, Piel, Puntos Degradados, Puntos Radiales, Líneas). Plan: servir desde /assets/textures/ y extender textureRegistry para soportar PNG además de procedurales. Estimación total auditoría + integración: ~14 h.
Deploy 19 abril 2026 Editor Escudos UV 3D · v1.3.0 — 5 fixes + 8 texturas reales

Producción: srdtf.com/editor-escudos/ · Cache-buster ?v=1.3.0

  • Texturas PNG reales — las 8 texturas de producción (agua, curvy, gotas, ladrillos, piel, puntos deg/rad, líneas) ya se cargan desde /editor-escudos/assets/textures/. Se arregla el bug de "la textura no se aplicaba" — causa raíz: el HTML usaba data-texture="efecto-agua" / "puntos-degradados" / "ladrillo" / "puntos-radiales" pero el JS buscaba agua / puntos-deg / puntos-rad / ladrillo → devolvía null y se caía al color plano. Ahora el registro está alineado HTML↔JS y precargado en paralelo al init.
  • Thumbnails del panel — los 8 cuadros de texturas del panel ahora muestran el PNG real (antes eran gradientes CSS aproximados que no representaban lo que se aplicaría).
  • Unificación editor ↔ PDF — el exportador PDF aplicaba fill sólido/negro a las zonas con textura. Ahora comparte buildTintedTextureCanvas() con el editor: mismo canvas tintado via ctx.createPattern(tc, 'repeat') en las páginas de grosor, W-aislados, barniz y composición completa.
  • Varita mágica · huecos internos — aunque fabric.Path recibía fillRule:'evenodd', ciertas versiones del runtime lo ignoraban y los ceros/ochos se rellenaban completos. Ahora se monkey-patcha fabric.Path.prototype._render para forzar ctx.fill('evenodd') en cualquier path marcado como zona SRDTF.
  • Bleed / sangrado — la propagación de píxeles de borde fijaba alpha=255 de forma uniforme, destruyendo transparencias parciales del original. Ahora se preserva el alpha del píxel fuente → el bleed ya no "pincha" la opacidad ni dispara el error de exportación.
  • Exportación recortadapageW/pageH ahora se calculan DPI-aware, se redondean a 0.01 mm y se añade margen de seguridad de 2 mm; la trim-box queda centrada. Se añade clip estricto al bounds de imagen en cada render offscreen para que nada pinte sobre crop-marks ni título de página.
  • Leyenda W10–W100 en página dedicada — antes iba incrustada dentro del canvas de grosor, difícil de leer. Ahora una página aparte (3/N) con título grande, tabla completa de 10 niveles con cuadro de color, valor RGB, % de relieve y descripción; los niveles usados en el diseño se marcan con ★ y fondo naranja claro. El canvas de grosor queda limpio y apunta a "leyenda en página siguiente".
Desplegado: editor.js, editor.css, index.html + 8 texturas PNG en /editor-escudos/assets/textures/. Caché purgada.
Deploy 18 abril 2026 Cart feedback, contacto con gracias y limpieza visual
  • Sublimación por metros (ID 644) — se mantiene WC add-to-cart nativo, cart icon badge en header + botón "Ir al carrito" en sub-wc-box, wc_print_notices() post-reload. Gallery corregida (imágenes reales, aspect-square). Nuclear dequeue eximido para ID 644.
  • Formulario de contacto — captcha matemático HMAC, destinatario único pedidos@srdtf.com, redirige automáticamente a /gracias-contacto/ tras envío.
  • Nueva página /gracias-contacto/ — thank-you page (noindex) con horario L-J 9-18h · V 9-15h, CTAs al home/WhatsApp/calculadora, y placeholder Google Ads listo para descomentar cuando haya IDs reales.
  • Calculadora DTF — bloque "No sabes cuál elegir" centrado en móvil (bug de 640px vs 320px); dropzone "Subir montado" ampliado ×3 (260px altura, icono 64px, texto bold 18px con lift hover).
  • Editor /editor-personalizar/ — botones Eliminar/Atrás/Adelante con alto contraste (texto blanco 800, sombra, Eliminar en rojo #ef4444 sólido); override defensivo para tablas (fix blanco-sobre-blanco en tabla de tallas).
  • Carrito vacío — nueva tarjeta SR DTF con icono, badge, 4 chips (DTF/Editor/Escudos/Sublimación), botón "Volver al HOME" con estilo naranja corporativo + 🏠. Nuevo mu-plugin srdtf-cart-empty-restyle.php.
  • Herramientas — añadida card "Editor diseño textil" en sección gratuitas, enlaza a /editor-personalizar/.
  • Landings /camisetas-personalizadas/* — routing corregido (priority 0 en template_redirect + query_vars filter) tras fallo crítico que redirigía todos los landings al blog.
  • Admin bar — deshabilitada en templates custom de producto (antes se renderizaba como texto plano al pie).
⏳ Follow-ups pendientes
  • Google Ads: descomentar snippet en srdtf-institutional-restyle.php cuando se tengan los IDs (AW-XXXXXXXXXX + label de conversión).
  • Editor diseño textil: pendiente evaluar rebuild con selector de prenda (Camisetas / Polos / Sudaderas c/s capucha) y mockup realista — actualmente la card de herramientas lleva al editor actual sin modificarlo.

🛠️ Plan de Proyecto Personalizer

Abrir en pestaña completa ↗

Roadmap · Landings Long-Tail

Plan de lanzamiento de landings SEO para capturar búsquedas long-tail de camisetas personalizadas. Todas redirigen al wizard principal.

🎯
Destino de conversión (todas las landings)
🗺️
Sitemap XML dedicado
srdtf.com/sitemap-landings.xml
Registrado en robots.txt y sitemap_index de Yoast. Envíalo a Google Search Console para indexación rápida.
Ver XML ↗
Total landings
40
en el roadmap
Publicadas
37
93% completado
En progreso
0
en desarrollo
Pendientes
3
por crear
Volumen búsqueda
43.640
búsquedas/mes (aprox)
P1 · Casos de uso

Casos de uso

5/8 · 13.100 búsq/mes
Mayor intención de compra. Prioridad 1.
Keyword / TítuloSlug URLVolumenEstado
Camisetas para Despedida de Soltera/Soltero /camisetas-personalizadas/despedida-soltera/ ↗ 4.000Publicada
Camisetas para Empresas /camisetas-personalizadas/empresa/ ↗ 2.500Publicada
Camisetas Fin de Curso / Graduación /camisetas-personalizadas/fin-de-curso/ ↗ 1.800Publicada
Camisetas Equipos Deportivos /camisetas-personalizadas/equipos-deportivos/ ↗ 1.600Publicada
Camisetas para Eventos /camisetas-personalizadas/eventos/ ↗ 1.200Publicada
Camisetas para Bodas /camisetas-personalizadas/bodas/900Pendiente
Camisetas para Cumpleaños /camisetas-personalizadas/cumpleanos/700Pendiente
Camisetas de Aniversario /camisetas-personalizadas/aniversario/400Pendiente
P2 · Tipos de producto

Tipos de producto

8/8 · 12.800 búsq/mes
Búsquedas por atributo técnico / tejido.
Keyword / TítuloSlug URLVolumenEstado
Camisetas de Algodón Personalizadas /camisetas-personalizadas/algodon/ ↗ 2.800Publicada
Camisetas Técnicas Deportivas /camisetas-personalizadas/tecnicas-deportivas/ ↗ 1.900Publicada
Camisetas Oversize Personalizadas /camisetas-personalizadas/oversize/ ↗ 1.400Publicada
Camisetas de Manga Larga /camisetas-personalizadas/manga-larga/ ↗ 1.100Publicada
Polos Personalizados Empresa /camisetas-personalizadas/polos-empresa/ ↗ 2.200Publicada
Sudaderas con Capucha Personalizadas /camisetas-personalizadas/sudaderas-capucha/ ↗ 1.800Publicada
Chaquetas Personalizadas /camisetas-personalizadas/chaquetas/ ↗ 900Publicada
Chándales Personalizados /camisetas-personalizadas/chandales/ ↗ 700Publicada
P3 · Cantidad / Precio

Cantidad / Precio

5/5 · 6.000 búsq/mes
Intención comercial directa.
Keyword / TítuloSlug URLVolumenEstado
Camisetas Personalizadas al Por Mayor /camisetas-personalizadas/al-por-mayor/ ↗ 1.500Publicada
Camisetas Personalizadas desde 1 Unidad /camisetas-personalizadas/desde-1-unidad/ ↗ 1.100Publicada
Camisetas Personalizadas Baratas /camisetas-personalizadas/baratas/ ↗ 2.400Publicada
Camisetas Personalizadas 10 Unidades /camisetas-personalizadas/10-unidades/ ↗ 600Publicada
Pack 20 Camisetas Personalizadas /camisetas-personalizadas/pack-20/ ↗ 400Publicada
P4 · Por industria

Por industria

5/5 · 1.900 búsq/mes
Sectores con uniformes estándar.
Keyword / TítuloSlug URLVolumenEstado
Camisetas para Bomberos / Policía /camisetas-personalizadas/bomberos-policia/ ↗ 350Publicada
Uniformes Hostelería /camisetas-personalizadas/hosteleria/ ↗ 600Publicada
Camisetas para Obra / Seguridad Laboral /camisetas-personalizadas/obra-seguridad/ ↗ 450Publicada
Uniformes Sanitarios / Clínicas /camisetas-personalizadas/sanitarios/ ↗ 280Publicada
Camisetas para Transporte / Logística /camisetas-personalizadas/transporte/ ↗ 220Publicada
P5 · Colectivos específicos

Colectivos específicos

4/4 · 2.030 búsq/mes
Grupos con identidad de marca propia.
Keyword / TítuloSlug URLVolumenEstado
Camisetas para Peñas / Cofradías /camisetas-personalizadas/penas-cofradias/ ↗ 500Publicada
Camisetas para Asociaciones / ONGs /camisetas-personalizadas/asociaciones-ongs/ ↗ 280Publicada
Camisetas para Clubes Deportivos /camisetas-personalizadas/clubes-deportivos/ ↗ 800Publicada
Camisetas para Academias / Colegios /camisetas-personalizadas/academias-colegios/ ↗ 450Publicada
P6 · Ocasiones / campañas

Ocasiones / campañas

5/5 · 1.530 búsq/mes
Búsquedas estacionales.
Keyword / TítuloSlug URLVolumenEstado
Camisetas de Navidad para Empresa /camisetas-personalizadas/navidad-empresa/ ↗ 380Publicada
Camisetas San Valentín /camisetas-personalizadas/san-valentin/ ↗ 250Publicada
Camisetas Día del Padre / Madre /camisetas-personalizadas/dia-padre-madre/ ↗ 400Publicada
Camisetas Campañas Políticas /camisetas-personalizadas/campanas-politicas/ ↗ 180Publicada
Camisetas para Ferias / Stands /camisetas-personalizadas/ferias-stands/ ↗ 320Publicada
P7 · Long-tail técnico

Long-tail técnico

5/5 · 6.280 búsq/mes
Búsquedas específicas por tipo de diseño.
Keyword / TítuloSlug URLVolumenEstado
Camisetas Personalizadas sin Mínimo /camisetas-personalizadas/sin-minimo/ ↗ 380Publicada
Camisetas Personalizadas con Foto /camisetas-personalizadas/con-foto/ ↗ 1.500Publicada
Camisetas con Dibujo Propio /camisetas-personalizadas/dibujo-propio/ ↗ 400Publicada
Camisetas Personalizadas con Nombre /camisetas-personalizadas/con-nombre/ ↗ 2.200Publicada
Camisetas Personalizadas con Logo /camisetas-personalizadas/con-logo/ ↗ 1.800Publicada

🛠️ Arquitectura técnica

Todas las landings comparten una sola estructura para escalar sin fricción.

CPT srdtf_landing con campos: hero, badges, casos-uso, testimonios, FAQ
URL /camisetas-personalizadas/{slug}/
Template mu-plugin srdtf-landings-template.php. Color identity emerald (mismo que /personalizar-ropa/)
CTA Siempre a /personalizar-ropa/?from={slug} para tracking
Schemas Service + FAQPage + BreadcrumbList por landing
Tracking GA: event landing_view + source tag por slug
📝 Cómo actualizar esta página Los estados se editan directamente en el mu-plugin srdtf-landings-docs.php en el array srdtf_landings_roadmap(). Cambia 'status' => 'todo' por 'progress' o 'done' según avancemos. Los contadores y progress bar se actualizan solos.

🚀 Clusters SEO desplegados (mayo 2026)

Estrategia de expansión SEO ejecutada en mayo 2026: 6 clusters temáticos, 47 landings publicadas, 3 productos WC con configurador inteligente, integración multitécnica + geo-targeting Madrid/Barcelona.

Total landings

47

desplegadas en 5 días

Productos WC

3

configurador propio

Schema rich

100%

LocalBusiness · FAQ · Service

Producción

Live

indexación en curso

🧵

Cluster Bordado profesional

5 URLs · 1 hub + 4 spokes

Hub /servicio-bordado/ con calculadora K-means + ΔE2000 sobre paleta Madeira (347 hilos). Add-to-cart real WC con producto virtual ID 15165. Cluster por uso: camisetas, polos empresa, gorras, sudaderas.

URLTipoKeyword principal
/servicio-bordado/hub producto WC 15165bordado personalizado precio
/bordado-camisetas/spokebordado camisetas
/bordado-polos-empresa/spokepolos bordados empresa
/bordado-gorras/spokebordado gorras
/bordado-sudaderas/spokebordado sudaderas
🖼️

Cluster Serigrafía profesional

5 URLs · 1 hub + 4 spokes

Hub /servicio-serigrafia/ con calculadora dinámica (mín 50 uds, claras 1 pasada / oscuras doble pasada con cama blanca). Add-to-cart real WC ID 15164. Cluster por uso: camisetas, sudaderas, polos, totebags. 55/55 tests passing.

URLTipoKeyword principal
/servicio-serigrafia/hub producto WC 15164serigrafía precio online
/serigrafia-camisetas/spokeserigrafía camisetas
/serigrafia-sudaderas/spokeserigrafía sudaderas
/serigrafia-polos-empresa/spokepolos serigrafía empresa
/serigrafia-totebags/spokeserigrafía totebags

Cluster Pegatinas vinilo personalizadas (NUEVO)

6 URLs · 1 hub + 5 spokes

Hub /pegatinas-personalizadas/ con configurador completo (76 tramos CSV, 3 plazos, corte forma +15%, individuales +25%, mantener proporción al cambiar tamaños, scanner archivo PNG/JPG auto-rellena tamaño). Add-to-cart real WC ID 15190. Integrado en menú "Para tu marca" → sección Packaging.

URLTipoKeyword principal
/pegatinas-personalizadas/hub producto WC 15190pegatinas personalizadas
/pegatinas-troqueladas/spokepegatinas troqueladas
/pegatinas-eventos/spokepegatinas eventos festivales
/pegatinas-marca-packaging/spokepegatinas marca packaging B2B
/pegatinas-coches-moto/spokepegatinas coches moto vinilo
/pegatinas-circulares/spokepegatinas circulares redondas
🗺️

Geo-targeted Madrid

11 URLs · 7 globales + 4 barrios

Estrategia geo-local con LocalBusiness schema + GeoCoordinates exactas (40.55412 / -3.61553) + NAP físico (Avda Somosierra 18, Sanse). Captura intención local: profesionales, clubes, empresas Madrid. Barrios estratégicos donde estamos físicamente o cerca.

URLTipoFoco
/imprenta-textil-madrid/geoParaguas Madrid (todas las técnicas)
/serigrafia-madrid/geoSerigrafía Madrid
/bordado-madrid/geoBordado Madrid
/dtf-madrid/geoDTF Madrid (contraataque dtfbarcelona.es)
/dtf-uv-madrid/geoDTF UV objetos Madrid
/dti-madrid/geoDTI premium Madrid
/escudos-uv-3d-madrid/geoEscudos UV 3D Madrid (clubes)
/serigrafia-san-sebastian-de-los-reyes/barrioSerigrafía Sanse (donde estamos)
/dtf-san-sebastian-de-los-reyes/barrioDTF Sanse (vs dtfbarcelona)
/bordado-san-sebastian-de-los-reyes/barrioBordado Sanse
/dtf-uv-san-sebastian-de-los-reyes/barrioDTF UV Sanse
/imprenta-textil-alcobendas/barrioImprenta Alcobendas (vecino)
/imprenta-textil-madrid-centro/barrioImprenta Madrid centro
⚔️

Geo-targeted Barcelona (contraataque)

6 URLs

Reciprocidad estratégica vs dtfbarcelona.es (que atacó Madrid el 26 abril 2026). NAP físico Madrid + areaServed Barcelona. Argumento diferencial: tarifa pública 7€/metro vs su modelo opaco "consultar precio". Estimación 150 visitas/mes en 6 meses.

URLTipoFoco
/imprenta-textil-barcelona/geoParaguas BCN (todas las técnicas)
/dtf-barcelona/geoDTF Barcelona (vs dtfbarcelona)
/serigrafia-barcelona/geoSerigrafía BCN (hueco competitivo)
/bordado-barcelona/geoBordado BCN (hueco competitivo)
/dtf-uv-barcelona/geoDTF UV BCN
/escudos-uv-3d-barcelona/geoEscudos UV 3D BCN (clubes Cataluña)
🛒

Productos WC con configurador inteligente

3 productos · add-to-cart real

Productos WooCommerce virtuales con precio dinámico vía hooks (woocommerce_add_cart_item_data, before_calculate_totals, get_item_data). Cada uno con calculadora propia, validación server-side y persistencia de metadata en order_items.

ProductoWC IDCalculadoraMin
Servicio Bordado15165K-means LAB + ΔE2000 sobre paleta Madeira (347 hilos)1 unidad
Servicio Serigrafía15164Tabla CSV claros 1-pasada · oscuros doble pasada + cama blanca · 4 tramos cantidad50 uds
Pegatinas Vinilo15190Tabla CSV 76 tramos · 3 plazos · recargos % · scanner archivo · mantener proporción20 uds
⚙️

Notas técnicas SEO + IA

Schema rich en todas las landings: LocalBusiness con @id reutilizable + GeoCoordinates + Service vinculado al @id + FAQPage + BreadcrumbList. NAP unificado via función helper (Avda Somosierra 18, 28703 SS Reyes, +34 678 688 235). Content depth ~2000-2500 palabras por landing con H2/H3 jerarquizados, datos concretos (precios, plazos, mínimos) → optimizado para citas en SearchGPT/Perplexity. Enlazado interno hub-spoke + lateral entre hermanas + cross-cluster a clusters de uso. Footer compartido con todas las landings del cluster. Helpers reutilizables en /wp-content/mu-plugins/: srdtf-bordado-landings.php · srdtf-serigrafia-landings.php · srdtf-pegatinas-landings.php · srdtf-madrid-landings.php · srdtf-barcelona-landings.php.

Última actualización: 3 mayo 2026 — Bloque añadido al dashboard original