Tutorial WordPress: Ocultar títulos duplicados en builders con CSS (Elementor/Divi)

·

·

Introducción: por qué aparecen títulos duplicados en builders

Cuando usas constructores visuales como Elementor o Divi es habitual encontrarse con el mismo título renderizado dos veces: una vez por el tema (por ejemplo, la etiqueta entry-title generada por single.php) y otra por el módulo del builder que inserta su propio encabezado dentro del contenido. Esto causa problemas de SEO, accesibilidad y diseño. En este tutorial verás opciones limpias y prácticas para ocultar esos títulos duplicados, desde soluciones puramente CSS hasta una alternativa con JavaScript para casos más complejos.

Antes de tocar nada: ¿por qué elegir CSS o JS?

Inspecciona el DOM primero

Abre las herramientas de desarrollador (F12) y localiza las clases de los títulos. Ejemplos frecuentes:

Estrategias CSS: reglas simples y robustas

A continuación hay un conjunto de reglas CSS comunes que ocultan el título del tema cuando el builder ya muestra su propio encabezado. Ajusta selectores a tus clases concretas.

1) Ocultar el título del tema cuando el widget del builder está presente (ambos órdenes)

Esta solución cubre los casos en que el título del tema y el del builder están uno al lado del otro en cualquiera de los dos órdenes.

/ Ocultar entry-title si hay un heading de Elementor junto a él /
.entry-title   .elementor-widget-heading,
.elementor-widget-heading   .entry-title,
.entry-title   .wp-block,
.wp-block   .entry-title {
  display: none !important
}

/ Añade variantes para Divi si tus headings están dentro de .et_pb_module /
.entry-title   .et_pb_module,
.et_pb_module   .entry-title {
  display: none !important
}

2) Ocultar por presencia de clase del builder (más simple y fiable)

Si el builder añade una clase de contenedor a todo el contenido de la página (por ejemplo .elementor o .et_builder), puedes ocultar el título del tema solo en páginas construidas con ese builder:

/ En páginas creadas con Elementor, oculta el título del tema /
.elementor .entry-title {
  display: none !important
}

/ En páginas creadas con Divi (ajusta la clase si difiere) /
.et_builder .entry-title {
  display: none !important
}

3) Ocultar el título del builder cuando prefieres el del tema

Si prefieres mantener el título del tema y ocultar el del builder:

/ Oculta el título generado por el widget de Elementor /
.elementor .elementor-heading-title {
  display: none !important
}

/ Divi: ejemplo para ocultar encabezados dentro de módulos /
.et_builder .et_pb_module h1,
.et_builder .et_pb_module h2 {
  display: none !important
}

4) Solución basada en estado vacío o :only-child

Si tienes elementos vacíos o quieres mostrar el título solo si es único, usa selectores de CSS como :only-child o :empty:

/ Mostrar el título del tema solo si es el único encabezado en su contenedor /
.entry-title {
  display: none
}
.entry-title:only-child {
  display: block
}

/ Ocultar un título builder si está vacío (poco común) /
.elementor .elementor-heading-title:empty {
  display: none !important
}

Dónde colocar el CSS para que tenga efecto

  1. Personalizador de WordPress: Apariencia → Personalizar → CSS Adicional.
  2. Opciones del tema: muchas plantillas o Divi/Enfold/GeneratePress ofrecen una caja para CSS personalizado.
  3. En Elementor: cada página o plantilla permite CSS a nivel de sección o widget (pro). También puedes usar Apariencia → Personalizar para reglas globales.
  4. Un plugin de snippets/CSS o child theme: para mantener el CSS seguro ante actualizaciones.

Limitaciones del enfoque puramente CSS

Solución con JavaScript: comparar textos y ocultar duplicados

Si los dos títulos existen y solo quieres ocultar uno cuando su texto coincide exactamente, usa JS. Ejemplo: ocultar el título del tema .entry-title si su texto coincide con el título de Elementor .elementor-heading-title.

// Busca títulos y oculta el del tema si su texto coincide con el del builder
(function() {
  function hideDuplicateTitles() {
    var themeTitle = document.querySelector(.entry-title)
    var elementorTitle = document.querySelector(.elementor-heading-title)
    if (!themeTitle  !elementorTitle) return

    var tText = themeTitle.textContent.trim()
    var eText = elementorTitle.textContent.trim()

    if (tText  eText  tText === eText) {
      // Decide cuál ocultar: aquí ocultamos la del tema
      themeTitle.style.display = none
    }
  }

  // Ejecutar al cargar y también después de eventos de AJAX (si el builder lo usa)
  document.addEventListener(DOMContentLoaded, hideDuplicateTitles)
  // Observador para cambios dinámicos en el DOM
  var observer = new MutationObserver(function() {
    hideDuplicateTitles()
  })
  observer.observe(document.body, { childList: true, subtree: true })
})()

Incrustar el script mediante functions.php

Un método sencillo para añadir el script es imprimirlo en el pie de página desde functions.php. Ejemplo:

// Añadir al functions.php del child theme
function mi_tema_ocultar_titulos_duplicados() {
  ?>
  
  

Buenas prácticas y consideraciones SEO y accesibilidad

  • Si ocultas un título visualmente con CSS (display:none), asegúrate de que no creas duplicados semánticos en el HTML que confundan a motores de búsqueda. Lo ideal es eliminar uno de los títulos en origen (tema o builder) si es posible.
  • Para accesibilidad, evita duplicar encabezados h1. Mantén una única jerarquía lógica de encabezados.
  • Si ocultas mediante CSS, recuerda que el texto sigue siendo parte del DOM y puede ser indexado. Si quieres que no se indexe, lo correcto es no imprimirlo en el HTML o usar técnicas del lado servidor.

Casos prácticos y ejemplos rápidos

Situaciones comunes y la regla recomendada:

Elementor imprime título y tema también Usa .elementor .entry-title {display:none !important} o una regla JS que compare textos.
Divi añade título duplicado dentro de un módulo Usa selectores que detecten .et_pb_module .entry-title o .et_builder .entry-title {display:none}
Título mostrado por blocks (Gutenberg) y por el tema Selector tipo .entry-title .wp-block {display:none} o manejar desde plantilla.

Resumen de pasos prácticos

  1. Inspecciona el HTML y localiza las clases de ambos títulos.
  2. Intenta primero desactivar uno desde las opciones del tema o del builder.
  3. Si no es posible, aplica CSS específico por builder (ej. .elementor .entry-title {display:none}).
  4. Si necesitas comparar el texto para ocultar solo cuando sean idénticos, añade el pequeño script JavaScript mostrado.
  5. Coloca CSS y scripts en el child theme, en el personalizador o usando un plugin de snippets para no perderlos con actualizaciones.

Conclusión

Ocultar títulos duplicados en Elementor o Divi puede ser una tarea sencilla con CSS en la mayoría de los casos. Cuando el DOM es dinámico o necesitas lógica basada en contenido (texto exactamente igual), una solución ligera en JavaScript es la opción adecuada. Siempre que sea posible, lo más limpio es evitar que el título se renderice dos veces: revisa primero las opciones del tema y del builder antes de aplicar estilos temporales.



Leave a Reply

Your email address will not be published. Required fields are marked *