# Cómo crear un theme personalizado en HubSpot CMS en 2026: guía completa para desarrolladores ## Tabla de Contenidos - [Introducción](#introducción) - [Arquitectura de un theme en HubSpot CMS](#arquitectura-de-un-theme-en-hubspot-cms) - [Configuración del entorno de desarrollo local](#configuración-del-entorno-de-desarrollo-local) - [Estructura de archivos y carpetas del theme](#estructura-de-archivos-y-carpetas-del-theme) - [HubL: el lenguaje de plantillas de HubSpot](#hubl-el-lenguaje-de-plantillas-de-hubspot) - [Creación de módulos personalizados](#creación-de-módulos-personalizados) - [Sistema de diseño: tokens, tipografía y colores](#sistema-de-diseño-tokens-tipografía-y-colores) - [Optimización de rendimiento y Core Web Vitals](#optimización-de-rendimiento-y-core-web-vitals) - [Publicación y versionado del theme](#publicación-y-versionado-del-theme) - [Preguntas Frecuentes](#preguntas-frecuentes) - [Conclusión](#conclusión) - [Referencias](#referencias) --- ## Introducción El desarrollo de themes personalizados para HubSpot CMS es una de las competencias más demandadas en el ecosistema de agencias especializadas en HubSpot en 2026. A diferencia de WordPress, donde el concepto de "tema" lleva décadas de madurez y existe una documentación exhaustiva para cada caso de uso, el sistema de themes de HubSpot CMS tiene sus propias convenciones, su propio lenguaje de plantillas (HubL) y una arquitectura que combina elementos de los CMS tradicionales con las particularidades de una plataforma SaaS. Un theme bien construido en HubSpot CMS no es simplemente un conjunto de plantillas visuales: es un sistema de diseño completo que permite a los equipos de marketing crear y editar páginas de forma autónoma, sin necesidad de intervención técnica para cada cambio. Los módulos personalizados, los tokens de diseño y las configuraciones de tema son las piezas que hacen posible esta autonomía, y su correcta implementación es lo que diferencia un theme profesional de uno que genera dependencia técnica constante. En esta guía, cubriremos todo el proceso de creación de un theme personalizado en HubSpot CMS en 2026: desde la configuración del entorno de desarrollo local hasta la publicación del theme en el Design Manager, pasando por la creación de módulos, la gestión de tokens de diseño y la optimización de rendimiento. Esta guía está dirigida a desarrolladores con conocimientos de HTML, CSS y JavaScript que quieran especializarse en el ecosistema HubSpot. --- ## Arquitectura de un theme en HubSpot CMS ### Qué es un theme en HubSpot CMS En HubSpot CMS, un **theme** es un conjunto de archivos que define la apariencia y el comportamiento de un sitio web. A diferencia de los temas de WordPress, que se instalan como plugins y se activan globalmente, los themes de HubSpot CMS son colecciones de archivos organizados en el Design Manager (el sistema de gestión de archivos de HubSpot) que pueden aplicarse a páginas individuales o a todo el sitio. Un theme de HubSpot CMS está compuesto por los siguientes tipos de archivos: - **Plantillas (templates):** archivos `.html` con sintaxis HubL que definen la estructura de las páginas (páginas de sitio, landing pages, páginas de blog, páginas de error). - **Módulos (modules):** componentes reutilizables que los editores de contenido pueden insertar en las páginas mediante el editor drag-and-drop. Cada módulo tiene un archivo `.html` (plantilla), un archivo `.css` (estilos), un archivo `.js` (comportamiento) y un archivo `meta.json` (configuración del módulo). - **Parciales (partials):** fragmentos de HTML reutilizables que se incluyen en las plantillas (cabecera, pie de página, navegación). - **CSS y JavaScript globales:** archivos de estilos y scripts que se cargan en todas las páginas del sitio. - **Archivos de configuración del theme:** `theme.json` (configuración general del theme) y `fields.json` (tokens de diseño editables desde el editor de HubSpot). ### Diferencias con WordPress La diferencia fundamental entre un theme de HubSpot CMS y un tema de WordPress es el nivel de abstracción que ofrece a los editores de contenido. En WordPress, el editor de bloques (Gutenberg) o los constructores de páginas (Elementor, Bricks) permiten a los editores modificar prácticamente cualquier aspecto del diseño, lo que puede resultar en inconsistencias visuales. En HubSpot CMS, el sistema de módulos y tokens de diseño establece límites claros: los editores pueden cambiar el contenido (texto, imágenes, colores dentro de los rangos definidos por el desarrollador) pero no pueden romper el layout ni modificar la estructura del diseño. Esta restricción es, paradójicamente, una ventaja para los equipos de marketing: garantiza la coherencia de marca en todas las páginas, independientemente de quién las edite. ### El Design Manager y el CLI de HubSpot HubSpot ofrece dos formas de trabajar con los archivos del theme: el **Design Manager** (interfaz web integrada en HubSpot) y el **HubSpot CLI** (herramienta de línea de comandos para desarrollo local). En 2026, el flujo de trabajo recomendado para proyectos profesionales combina ambas herramientas: el CLI para el desarrollo local con sincronización en tiempo real, y el Design Manager para la gestión de versiones y la publicación. --- ## Configuración del entorno de desarrollo local ### Instalación del HubSpot CLI El HubSpot CLI es la herramienta principal para el desarrollo local de themes. Se instala como un paquete npm global: ```bash npm install -g @hubspot/cli ``` Una vez instalado, es necesario autenticarse con la cuenta de HubSpot: ```bash hs init ``` Este comando abre un flujo de autenticación en el navegador y crea un archivo de configuración `.hubspot.config.yml` en el directorio de trabajo con las credenciales de la cuenta. ### Estructura del proyecto local La estructura recomendada para un proyecto de theme en HubSpot CMS en 2026 es la siguiente: ``` mi-theme/ ├── theme.json # Configuración general del theme ├── fields.json # Tokens de diseño (colores, tipografías, espaciados) ├── templates/ │ ├── home.html # Plantilla de página de inicio │ ├── page.html # Plantilla de página estándar │ ├── blog-listing.html # Plantilla de listado de blog │ ├── blog-post.html # Plantilla de artículo de blog │ └── error-page.html # Plantilla de página de error 404 ├── modules/ │ ├── hero/ │ │ ├── meta.json │ │ ├── module.html │ │ ├── module.css │ │ └── module.js │ ├── cta-banner/ │ └── testimonials/ ├── partials/ │ ├── header.html │ ├── footer.html │ └── navigation.html ├── css/ │ ├── main.css │ └── utilities.css └── js/ └── main.js ``` ### Comandos esenciales del CLI Los comandos más utilizados durante el desarrollo de un theme son: ```bash # Subir el theme completo al Design Manager hs upload mi-theme mi-theme # Sincronizar cambios locales en tiempo real (watch mode) hs watch mi-theme mi-theme # Descargar el theme desde el Design Manager al directorio local hs fetch mi-theme mi-theme # Ver el estado de los archivos del theme hs list mi-theme ``` El modo `watch` es especialmente útil durante el desarrollo: cualquier cambio guardado en un archivo local se sincroniza automáticamente con el Design Manager en cuestión de segundos, permitiendo ver los cambios en tiempo real en el editor de HubSpot. --- ## Estructura de archivos y carpetas del theme ### El archivo theme.json El archivo `theme.json` es el punto de entrada del theme. Define el nombre, la descripción, la versión y las configuraciones globales del theme: ```json { "label": "Mi Theme Personalizado", "preview_path": "templates/home.html", "screenshot_path": "images/theme-preview.png", "enable_domain_stylesheets": false, "hide_add_module_button": false, "version": "1.0.0", "author": { "name": "Emovere Agency", "email": "dev@emovere.agency", "url": "https://emovere.agency" } } ``` Los campos más relevantes son `preview_path` (la plantilla que se usa como previsualización del theme en el Design Manager) y `enable_domain_stylesheets` (si se permite que los estilos del dominio de HubSpot se apliquen sobre los estilos del theme). ### El archivo fields.json El archivo `fields.json` es uno de los elementos más poderosos del sistema de themes de HubSpot CMS. Define los **tokens de diseño** del theme: variables de color, tipografía, espaciado y otros valores de diseño que los editores de contenido pueden modificar desde el editor de HubSpot sin tocar el código. Un `fields.json` típico para un theme B2B podría tener esta estructura: ```json [ { "type": "color", "name": "primary_color", "label": "Color primario", "default": { "color": "#3B6FE8", "opacity": 100 } }, { "type": "color", "name": "secondary_color", "label": "Color secundario", "default": { "color": "#1A1A2E", "opacity": 100 } }, { "type": "font", "name": "body_font", "label": "Fuente del cuerpo", "default": { "font": "Inter", "font_set": "GOOGLE", "size": 16, "size_unit": "px", "color": "#333333", "styles": {} } }, { "type": "font", "name": "heading_font", "label": "Fuente de títulos", "default": { "font": "Sora", "font_set": "GOOGLE", "size": 40, "size_unit": "px", "color": "#1A1A2E", "styles": { "font-weight": "700" } } }, { "type": "spacing", "name": "section_padding", "label": "Padding de sección", "default": { "top": { "value": 80, "units": "px" }, "bottom": { "value": 80, "units": "px" } } } ] ``` Estos tokens se referencian en los archivos CSS del theme mediante variables CSS generadas automáticamente por HubSpot: ```css :root { --primary-color: {{ theme.primary_color.color }}; --secondary-color: {{ theme.secondary_color.color }}; --body-font: {{ theme.body_font.font }}; --heading-font: {{ theme.heading_font.font }}; } ``` --- ## HubL: el lenguaje de plantillas de HubSpot ### Qué es HubL HubL (HubSpot Markup Language) es el lenguaje de plantillas de HubSpot CMS, basado en Jinja2 (el mismo motor de plantillas que usa Django). HubL extiende HTML con etiquetas y filtros específicos de HubSpot que permiten acceder a los datos del CRM, renderizar módulos, incluir parciales y aplicar lógica condicional en las plantillas. La sintaxis de HubL utiliza dos tipos de delimitadores: - `{{ }}` para expresiones (variables, filtros) - `{% %}` para declaraciones (condicionales, bucles, inclusiones) ### Variables y filtros esenciales Las variables más utilizadas en las plantillas de HubSpot CMS son: ```html {{ content.html_title }} {{ content.meta_description }} {{ content.canonical_url }} {{ content.featured_image }} {{ content.blog_post_author.display_name }} {{ content.publish_date | datetimeformat("%d de %B de %Y") }} {% for tag in content.tag_list %} {{ tag.name }} {% endfor %} ``` Los filtros de HubL permiten transformar los valores de las variables antes de renderizarlos. Algunos de los más útiles son: ```html {{ content.post_body | truncate(150) }} {{ content.name | upper }} {{ content.publish_date | datetimeformat("%Y-%m-%d") }} {{ content.body | escape }} {{ "/blog" | absolute_url }} ``` ### Inclusión de módulos en plantillas Los módulos se incluyen en las plantillas mediante la etiqueta `{% module %}`: ```html {% module "hero" path="@hubspot/linked_image", label="Hero Image", image={ "src": "https://cdn.example.com/hero.jpg", "alt": "Hero image" } %} {% dnd_area "main_content" label="Contenido principal" %} {% dnd_section %} {% dnd_column %} {% dnd_row %} {% dnd_module path="@hubspot/rich_text" %}{% end_dnd_module %} {% end_dnd_row %} {% end_dnd_column %} {% end_dnd_section %} {% end_dnd_area %} ``` Las **DnD areas** (áreas drag-and-drop) son la forma moderna de definir zonas editables en las plantillas de HubSpot CMS. Permiten a los editores de contenido añadir, reordenar y eliminar módulos dentro de una zona definida por el desarrollador, sin poder modificar la estructura global de la página. ### Parciales y macros Los parciales permiten reutilizar fragmentos de HTML en múltiples plantillas: ```html {% include "partials/header.html" %} {% include "partials/footer.html" %} ``` Las macros de HubL permiten definir funciones reutilizables dentro de las plantillas: ```html {% macro render_card(title, description, link, image) %}
{% if image %} {{ title }} {% endif %}

{{ title }}

{{ description }}

Leer más →
{% endmacro %} {{ render_card("Título del artículo", "Descripción breve", "/blog/articulo", "/img/cover.jpg") }} ``` --- ## Creación de módulos personalizados ### Anatomía de un módulo Un módulo de HubSpot CMS está compuesto por cuatro archivos que deben residir en una carpeta con el nombre del módulo dentro del directorio `modules/` del theme: **meta.json:** Define los campos editables del módulo (los que aparecen en el panel lateral del editor de HubSpot cuando el editor selecciona el módulo). ```json { "label": "Hero Section", "css_assets": [], "external_js": [], "global": false, "help_text": "Sección hero con título, subtítulo, CTA y imagen de fondo", "host_template_types": ["PAGE", "BLOG_POST", "LANDING_PAGE"], "js_assets": [], "other_assets": [], "smart_type": "NOT_SMART", "tags": ["hero", "banner"], "is_available_for_new_content": true } ``` **fields.json:** Define los campos del módulo que los editores pueden modificar: ```json [ { "id": "headline", "name": "headline", "label": "Titular", "required": true, "type": "text", "default": "Tu titular principal aquí" }, { "id": "subheadline", "name": "subheadline", "label": "Subtítulo", "type": "text", "default": "Descripción breve de tu propuesta de valor" }, { "id": "cta_text", "name": "cta_text", "label": "Texto del CTA", "type": "text", "default": "Contacta con nosotros" }, { "id": "cta_link", "name": "cta_link", "label": "Enlace del CTA", "type": "link", "default": { "url": { "type": "EXTERNAL", "href": "/contacto" }, "open_in_new_tab": false } }, { "id": "background_image", "name": "background_image", "label": "Imagen de fondo", "type": "image", "default": { "src": "", "alt": "Hero background" } }, { "id": "overlay_opacity", "name": "overlay_opacity", "label": "Opacidad del overlay", "type": "number", "min": 0, "max": 100, "default": 60 } ] ``` **module.html:** La plantilla HTML del módulo, que referencia los campos definidos en `fields.json`: ```html

{{ module.headline }}

{% if module.subheadline %}

{{ module.subheadline }}

{% endif %} {% if module.cta_text %} {{ module.cta_text }} {% endif %}
``` **module.css:** Los estilos del módulo: ```css .hero-section { position: relative; min-height: 600px; background-size: cover; background-position: center; display: flex; align-items: center; } .hero-section__overlay { position: absolute; inset: 0; z-index: 1; } .hero-section__content { position: relative; z-index: 2; text-align: center; color: #fff; padding: 80px 24px; } .hero-section__headline { font-size: clamp(2rem, 5vw, 4rem); font-weight: 700; line-height: 1.1; margin-bottom: 1.5rem; } .hero-section__subheadline { font-size: clamp(1rem, 2vw, 1.25rem); opacity: 0.9; max-width: 600px; margin: 0 auto 2rem; line-height: 1.6; } .hero-section__cta { display: inline-block; padding: 16px 40px; background: var(--primary-color, #3B6FE8); color: #fff; text-decoration: none; border-radius: 8px; font-weight: 600; font-size: 1rem; transition: transform 0.2s ease, box-shadow 0.2s ease; } .hero-section__cta:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(59, 111, 232, 0.4); } ``` ### Tipos de campos disponibles en los módulos HubSpot CMS ofrece una amplia variedad de tipos de campos para los módulos: | Tipo de campo | Descripción | Caso de uso | |---|---|---| | `text` | Texto de una sola línea | Titulares, etiquetas | | `richtext` | Editor de texto enriquecido | Cuerpo de texto, descripciones | | `image` | Selector de imagen con alt text | Imágenes de fondo, iconos | | `link` | URL con opciones de apertura | CTAs, botones | | `color` | Selector de color con opacidad | Colores de fondo, textos | | `font` | Selector de fuente con opciones | Tipografía personalizada | | `number` | Campo numérico con min/max | Opacidades, tamaños | | `boolean` | Checkbox verdadero/falso | Mostrar/ocultar elementos | | `choice` | Lista desplegable de opciones | Variantes de estilo | | `logo` | Logo del portal de HubSpot | Cabeceras, pies de página | | `menu` | Menú de navegación de HubSpot | Navegación principal | | `blog` | Selector de blog de HubSpot | Listados de artículos | | `cta` | CTA de HubSpot | Botones de llamada a la acción | | `form` | Formulario de HubSpot | Formularios de contacto | | `videoplayer` | Reproductor de vídeo | Vídeos embebidos | | `group` | Grupo de campos repetibles | Listas de elementos | --- ## Sistema de diseño: tokens, tipografía y colores ### Tokens de diseño en HubSpot CMS Los tokens de diseño son la base de un sistema de diseño coherente en HubSpot CMS. A diferencia de WordPress, donde los tokens de diseño se implementan mediante variables CSS en el archivo `style.css` del tema, en HubSpot CMS los tokens se definen en el archivo `fields.json` del theme y se exponen como campos editables en el editor de HubSpot. La ventaja de este enfoque es que los tokens son editables por los administradores del sitio sin necesidad de acceder al código: desde el editor de HubSpot, en la sección "Diseño del tema", se pueden modificar los colores, tipografías y espaciados definidos en `fields.json` y los cambios se aplican globalmente a todo el sitio. ### Implementación de un sistema de tokens robusto Un sistema de tokens bien diseñado para un theme B2B debería incluir al menos los siguientes niveles: **Tokens de color:** - Color primario (acciones principales, CTAs) - Color secundario (elementos de apoyo) - Color de acento (destacados, badges) - Color de fondo principal - Color de fondo secundario (secciones alternadas) - Color de texto principal - Color de texto secundario - Color de borde **Tokens de tipografía:** - Fuente de titulares (H1-H3) - Fuente de cuerpo de texto - Fuente de UI (botones, etiquetas, navegación) - Escala de tamaños (base, sm, lg, xl, 2xl, 3xl) - Pesos de fuente (regular, medium, semibold, bold) **Tokens de espaciado:** - Espaciado base (4px o 8px) - Padding de sección (vertical) - Padding de contenedor (horizontal) - Gap entre elementos de grid **Tokens de forma:** - Radio de borde (botones, tarjetas, inputs) - Sombras (card shadow, dropdown shadow) ### Integración con Google Fonts HubSpot CMS permite cargar fuentes de Google Fonts directamente desde los campos de tipo `font` en `fields.json`. Cuando el editor selecciona una fuente de Google Fonts en el editor de HubSpot, HubSpot gestiona automáticamente la carga de la fuente (incluyendo el `` en el `` de la página), sin necesidad de añadir código adicional en las plantillas. Para fuentes personalizadas (no disponibles en Google Fonts), es necesario subirlas al Design Manager como archivos de fuente y referenciarlas en el CSS global del theme mediante `@font-face`. --- ## Optimización de rendimiento y Core Web Vitals ### Impacto del theme en los Core Web Vitals En 2026, los Core Web Vitals (LCP, CLS, INP) siguen siendo factores de ranking en Google y métricas críticas para la experiencia del usuario. Un theme mal optimizado puede penalizar significativamente el rendimiento del sitio, incluso en la infraestructura CDN de HubSpot. Las principales causas de bajo rendimiento en themes de HubSpot CMS son: **LCP (Largest Contentful Paint) elevado:** - Imágenes de hero sin atributo `loading="eager"` y sin preload - Fuentes web sin `font-display: swap` - CSS crítico no inlineado (render-blocking) **CLS (Cumulative Layout Shift) elevado:** - Imágenes sin dimensiones explícitas (`width` y `height`) - Fuentes web que causan FOUT (Flash of Unstyled Text) sin reserva de espacio - Anuncios o embeds sin dimensiones reservadas **INP (Interaction to Next Paint) elevado:** - JavaScript pesado en el hilo principal - Event listeners no optimizados - Módulos con animaciones CSS costosas ### Técnicas de optimización para themes HubSpot **Optimización de imágenes:** HubSpot CMS procesa automáticamente las imágenes subidas al File Manager y genera versiones WebP, pero el desarrollador debe asegurarse de usar el atributo `srcset` y `sizes` para servir el tamaño correcto en cada dispositivo: ```html {{ module.hero_image.alt }} ``` **CSS crítico inline:** Para mejorar el LCP, el CSS crítico (los estilos necesarios para renderizar el contenido above-the-fold) debe inlinearse en el `` de la página. En HubSpot CMS, esto se puede hacer añadiendo un bloque ` {{ require_css(get_asset_url("css/main.css")) }} ``` **Carga diferida de JavaScript:** Los scripts de JavaScript del theme deben cargarse de forma diferida para no bloquear el renderizado: ```html {{ require_js(get_asset_url("js/main.js"), "footer") }} ``` El segundo parámetro `"footer"` indica a HubSpot que cargue el script al final del ``, evitando que bloquee el renderizado de la página. --- ## Publicación y versionado del theme ### Flujo de publicación El proceso de publicación de un theme en HubSpot CMS sigue estos pasos: 1. **Desarrollo local:** Usar el CLI en modo `watch` para sincronizar cambios en tiempo real con el Design Manager. 2. **Revisión en staging:** Crear una página de prueba en HubSpot usando las plantillas del theme y verificar el diseño en diferentes dispositivos y navegadores. 3. **Pruebas de rendimiento:** Ejecutar Lighthouse o PageSpeed Insights en la página de prueba para verificar que los Core Web Vitals están dentro de los rangos aceptables. 4. **Publicación:** Una vez validado, el theme está disponible para aplicarse a las páginas del sitio desde el editor de HubSpot. ### Control de versiones con Git Aunque el Design Manager de HubSpot no tiene integración nativa con Git, el flujo de trabajo recomendado es mantener el theme en un repositorio Git y usar el CLI para sincronizar los cambios: ```bash # Flujo de trabajo típico git checkout -b feature/nuevo-modulo-testimonios # ... desarrollo del módulo ... hs upload modules/testimonials modules/testimonials # ... pruebas en HubSpot ... git add modules/testimonials git commit -m "feat: add testimonials module with carousel" git push origin feature/nuevo-modulo-testimonios # ... merge a main tras revisión ... hs upload mi-theme mi-theme # Sincronizar el theme completo ``` ### Gestión de múltiples entornos HubSpot CMS no tiene un sistema nativo de entornos (desarrollo, staging, producción) como el que ofrecen plataformas como WordPress con WP Staging. La forma habitual de gestionar múltiples entornos en HubSpot es usar **portales separados** (sandbox portals) para desarrollo y staging, y el portal de producción para el sitio en vivo. El CLI de HubSpot permite gestionar múltiples portales en el archivo de configuración `.hubspot.config.yml`: ```yaml portals: - name: desarrollo portalId: 12345678 authType: personalaccesskey personalAccessKey: "..." - name: produccion portalId: 87654321 authType: personalaccesskey personalAccessKey: "..." defaultPortal: desarrollo ``` Para sincronizar el theme al portal de producción, se especifica el portal con el flag `--portal`: ```bash hs upload mi-theme mi-theme --portal produccion ``` --- ## Preguntas Frecuentes **¿Cuánto tiempo lleva desarrollar un theme personalizado en HubSpot CMS desde cero?** El tiempo de desarrollo de un theme personalizado en HubSpot CMS varía considerablemente según la complejidad del diseño y la experiencia del desarrollador. Para un theme B2B estándar con 5-8 plantillas, 10-15 módulos personalizados y un sistema de diseño completo, el tiempo estimado oscila entre 80 y 160 horas de desarrollo. Un desarrollador con experiencia previa en HubSpot CMS puede completar un theme de esta complejidad en 3-4 semanas de trabajo. Para proyectos más complejos (múltiples idiomas, integraciones con el CRM, módulos de contenido dinámico), el tiempo puede extenderse a 6-8 semanas. La clave para reducir el tiempo de desarrollo es establecer el sistema de tokens de diseño y los módulos base antes de empezar a construir las plantillas, ya que esto evita la duplicación de código y facilita los cambios de diseño posteriores. **¿Puedo usar frameworks CSS como Tailwind o Bootstrap en un theme de HubSpot CMS?** Sí, es posible usar frameworks CSS en themes de HubSpot CMS, pero con algunas consideraciones. Tailwind CSS puede integrarse mediante un proceso de build local (usando el CLI de Tailwind para generar el CSS compilado) y subiendo el archivo CSS resultante al Design Manager. Sin embargo, este flujo de trabajo añade complejidad al proceso de desarrollo y puede generar conflictos con los estilos globales de HubSpot. Bootstrap puede usarse de forma más directa, añadiendo el CSS de Bootstrap como un asset del theme, pero el tamaño del archivo puede impactar negativamente en el rendimiento. En Emovere, preferimos desarrollar los themes de HubSpot CMS con CSS nativo y variables CSS personalizadas, aprovechando el sistema de tokens de `fields.json` para la personalización. Este enfoque produce themes más ligeros, más mantenibles y con mejor rendimiento que los basados en frameworks CSS de terceros. **¿Cómo se gestionan las actualizaciones del theme sin afectar al contenido existente?** La gestión de actualizaciones del theme es uno de los aspectos más delicados del desarrollo en HubSpot CMS. Cuando se actualiza un módulo existente (por ejemplo, añadiendo un nuevo campo), los valores por defecto del nuevo campo se aplican a todas las instancias del módulo que no tengan ese campo configurado explícitamente. Esto puede causar cambios visuales inesperados en páginas existentes. La práctica recomendada es: (1) añadir siempre valores por defecto sensatos a los nuevos campos, (2) probar los cambios en un portal de staging antes de aplicarlos en producción, y (3) documentar todos los cambios en el CHANGELOG del theme para que el equipo de marketing sepa qué páginas pueden verse afectadas. Para cambios estructurales importantes (como modificar el layout de un módulo existente), es preferible crear un nuevo módulo en lugar de modificar el existente, y migrar gradualmente las páginas al nuevo módulo. **¿Qué diferencia hay entre un módulo global y un módulo estándar en HubSpot CMS?** Un **módulo global** en HubSpot CMS es un módulo cuyo contenido es el mismo en todas las páginas donde se usa: si se edita en una página, el cambio se aplica automáticamente a todas las páginas que usan ese módulo. Los módulos globales son ideales para elementos que deben ser consistentes en todo el sitio, como la cabecera, el pie de página, los banners de aviso legal o los CTAs de newsletter. Un **módulo estándar** (no global) permite que cada instancia del módulo tenga su propio contenido: el mismo módulo de "hero" puede tener un titular diferente en cada página donde se use. La elección entre módulo global y estándar debe hacerse en el momento de diseñar la arquitectura del theme: una vez que un módulo global tiene contenido en producción, convertirlo en estándar (o viceversa) requiere trabajo manual en todas las páginas afectadas. **¿Es posible integrar React o Vue.js en un theme de HubSpot CMS?** Sí, es posible integrar frameworks JavaScript como React o Vue.js en un theme de HubSpot CMS, pero con limitaciones. La forma más común es usar estos frameworks para componentes específicos (como un buscador de productos, un configurador interactivo o un mapa de localizaciones) dentro de un módulo de HubSpot, sin intentar convertir todo el theme en una SPA. El módulo incluye el bundle JavaScript del componente como un asset y monta el componente en un elemento del DOM del módulo. Esta aproximación funciona bien para componentes aislados, pero no es adecuada para themes completos donde toda la navegación y el renderizado de páginas esté gestionado por el framework. Para proyectos que requieren una experiencia de usuario muy dinámica y basada en SPA, la alternativa es usar HubSpot CMS en modo headless, usando la Content Delivery API de HubSpot para servir el contenido a un frontend construido con Next.js o Nuxt.js. --- ## Conclusión Desarrollar un theme personalizado en HubSpot CMS en 2026 es una tarea que requiere dominar tanto las convenciones técnicas de la plataforma (HubL, el Design Manager, el CLI) como los principios de diseño de sistemas (tokens, módulos reutilizables, separación entre estructura y contenido). Un theme bien construido es una inversión a largo plazo: reduce la dependencia técnica del equipo de marketing, garantiza la coherencia de marca y facilita el mantenimiento y la evolución del sitio. Los elementos clave de un theme profesional son: un sistema de tokens de diseño robusto definido en `fields.json`, módulos con campos bien estructurados que ofrezcan la flexibilidad necesaria sin comprometer la coherencia visual, plantillas DnD que permitan a los editores crear páginas sin romper el diseño, y un proceso de desarrollo local con el CLI que garantice la reproducibilidad y el control de versiones. En Emovere somos especialistas en el desarrollo de themes personalizados para HubSpot CMS. Si estás planificando un proyecto de desarrollo o rediseño en HubSpot CMS, contacta con nuestro equipo para una consultoría técnica inicial. --- ## Referencias [1] HubSpot Developer Documentation — Themes. https://developers.hubspot.com/docs/cms/building-blocks/themes — Documentación oficial de HubSpot sobre la arquitectura y configuración de themes en CMS Hub/Content Hub. [2] HubSpot Developer Documentation — HubL Reference. https://developers.hubspot.com/docs/cms/hubl — Referencia completa del lenguaje de plantillas HubL, incluyendo variables, filtros y etiquetas disponibles. [3] HubSpot Developer Documentation — Modules. https://developers.hubspot.com/docs/cms/building-blocks/modules — Guía oficial para la creación y configuración de módulos personalizados en HubSpot CMS. [4] HubSpot CLI Documentation. https://developers.hubspot.com/docs/cms/developer-reference/local-development-cli — Documentación del CLI de HubSpot para el desarrollo local de themes y módulos. [5] Google Web Vitals — Core Web Vitals. https://web.dev/vitals/ — Referencia oficial de Google sobre las métricas Core Web Vitals y su impacto en el ranking de búsqueda.