{"id":836,"date":"2026-03-24T12:57:21","date_gmt":"2026-03-24T12:57:21","guid":{"rendered":"https:\/\/webaccessible.cat\/guia-wcag\/ids-duplicados\/"},"modified":"2026-05-29T16:52:10","modified_gmt":"2026-05-29T16:52:10","slug":"ids-duplicados","status":"publish","type":"guia_wcag","link":"https:\/\/webaccessible.cat\/es\/guia-wcag\/ids-duplicados\/","title":{"rendered":"IDs duplicados"},"content":{"rendered":"<h2>\u00bfQu\u00e9 es un ID duplicado?<\/h2>\n<p>El atributo id del HTML tiene que ser \u00fanico a cada p\u00e1gina: cada elemento puede tener un solo ID y ning\u00fan elemento puede compartir el mismo ID con otro. Cuando dos o m\u00e1s elementos comparten el mismo ID, el c\u00f3digo HTML es inv\u00e1lido y el comportamiento del navegador acontece impredecible.<\/p>\n<p>El criterio WCAG 4.1.1 exige que el contenido implementado usando lenguajes de marcado no tenga elementos con atributos id duplicados. Axe-core lo comprueba como error cr\u00edtico.<\/p>\n<h2>\u00bfPor qu\u00e9 causan problemas de accesibilidad?<\/h2>\n<p>Els IDs duplicats afecten l&#8217;accessibilitat de diverses maneres:<\/p>\n<ul>\n<li><strong>Labels y formularios:<\/strong> si dos campos de formulario comparten el mismo ID, el label se asocia al primero y el segundo queda sin etiqueta accesible.<\/li>\n<li><strong>Atributos ARIA:<\/strong> <code>aria-labelledby<\/code>, <code>aria-describedby<\/code> y <code>aria-controls<\/code> usan IDs para referenciar elementos. Si el ID es duplicado, el lector de pantalla apunta al primer elemento que encuentra, que puede ser incorrecto.<\/li>\n<li><strong>Skip links:<\/strong> si el anclaje del skip link (#contenido-principal) aparece dos veces, el navegador puede llevar el usuario al primer elemento, que podr\u00eda no ser el correcto.<\/li>\n<\/ul>\n<h2>\u00bfPor qu\u00e9 aparecen IDs duplicados?<\/h2>\n<p>En un HTML escrito a mano, los IDs duplicados son infrecuentes. El problema aparece habitualmente con constructores de p\u00e1ginas como Divi, Elementor o Beaver Builder, que generan IDs autom\u00e1ticamente para sus m\u00f3dulos. Si un m\u00f3dulo se copia y pega, el ID se duplica. Si un shortcode se renderiza dos veces, los IDs de su HTML se duplican.<\/p>\n<p>En WordPress, los plugins de formularios, sliders y galer\u00edas su fuentes habituales de IDs duplicados, especialmente si se incluyen m\u00faltiples veces en la misma p\u00e1gina.<\/p>\n<h2>C\u00f3mo detectar IDs duplicados<\/h2>\n<p>La detecci\u00f3n manual de IDs duplicados es pr\u00e1cticamente imposible en webs grandes. Las herramientas autom\u00e1ticas sue\u00f1o imprescindibles.<\/p>\n<p>La herramienta de autoevaluaci\u00f3n de webaccessible.cat detecta autom\u00e1ticamente todos los IDs duplicados de la p\u00e1gina, indicando qu\u00e9 elementos est\u00e1n afectados y cu\u00e1ntas veces aparece cada ID duplicado.<\/p>\n<p>Tambi\u00e9n puedes usar la consola del navegador:<\/p>\n<p><code>\/\/ Executar a la consola del navegador<br \/>\nconst ids = [...document.querySelectorAll('[id]')].map(el =&gt; el.id);<br \/>\nconst duplicats = ids.filter((id, i) =&gt; ids.indexOf(id) !== i);<br \/>\nconsole.log('IDs duplicats:', [...new Set(duplicats)]);<\/code><\/p>\n<h2>C\u00f3mo corregir IDs duplicados<\/h2>\n<p>La correcci\u00f3n depende de la causa:<\/p>\n<ul>\n<li>Si el problema es un m\u00f3dulo de Divi copiado, hay que cambiar el ID del duplicado manualmente desde el constructor de p\u00e1ginas.<\/li>\n<li>Si el problema es un plugin que genera IDs fijas, hay que contactar con el desarrollador del plugin o buscar una alternativa accesible.<\/li>\n<li>Si el problema es c\u00f3digo HTML personalizado, hay que revisar y hacer \u00fanicos todos los IDs afectados. Una buena pr\u00e1ctica es usar IDs sem\u00e1nticos y \u00fanicos, o mejor usar clases en lugar de IDs para los estilos CSS, reservando los IDs para los anclajes y las referencias ARIA.<\/li>\n<\/ul>\n<h2>IDs duplicados vs IDs en m\u00faltiples p\u00e1ginas<\/h2>\n<p>Importante: los IDs tienen que ser \u00fanicos dentro de una misma p\u00e1gina, pero el mismo ID puede aparecer en p\u00e1ginas diferentes. Si todas las p\u00e1ginas de la web tiene un <code>&lt;main id=\"contingut-principal\"&gt;<\/code>, esto es correcto. El problema es cuando dentro de una misma p\u00e1gina cargada aparecen dos elementos con el mismo ID.<\/p>\n<div class=\"et_pb_section_0 et_pb_section et_pb_section--fixed et_section_regular et_flex_section et-interaction-target-03o12ngdyu\" data-interaction-target=\"03o12ngdyu\"><div class=\"et_pb_row_0 et_pb_row et_flex_row\"><div class=\"et_pb_column_0 et_pb_column et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\"><div class=\"et_pb_text_0 et_pb_text et_pb_bg_layout_light et_pb_module et_flex_module preset--module--divi-text--default\"><div class=\"et_pb_text_inner\"><p>Your content goes here. Edit or remove this text inline or in the module Content settings. You can also style every aspect of this content in the module Design settings and even apply custom CSS to this text in the module Advanced settings.<\/p>\n<\/div><\/div><\/div><div class=\"et_pb_column_1 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\"><div class=\"et_pb_icon_0 et_pb_icon et_pb_module et_flex_module\" data-interaction-trigger=\"4bs8z0k0z5\"><span class=\"et_pb_icon_wrap\"><span class=\"et-pb-icon\">M<\/span><\/span><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Los IDs duplicados son un error t\u00e9cnico silencioso: el web se ve bien visualmente, pero para los lectores de pantalla y el JavaScript puede causar comportamientos inesperados. Habitual en webs con constructores de p\u00e1ginas.<\/p>\n","protected":false},"featured_media":0,"template":"","class_list":["post-836","guia_wcag","type-guia_wcag","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/webaccessible.cat\/es\/wp-json\/wp\/v2\/guia_wcag\/836","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webaccessible.cat\/es\/wp-json\/wp\/v2\/guia_wcag"}],"about":[{"href":"https:\/\/webaccessible.cat\/es\/wp-json\/wp\/v2\/types\/guia_wcag"}],"wp:attachment":[{"href":"https:\/\/webaccessible.cat\/es\/wp-json\/wp\/v2\/media?parent=836"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}