Acerca de este problema HTML
El elemento <noscript> se comporta de manera diferente dependiendo de dónde aparece en un documento. Cuando se coloca dentro del <head>, solo puede contener elementos <link>, <style> y <meta> — estrictamente contenido de metadatos. Cuando se coloca dentro del <body>, puede contener cualquier contenido de flujo, incluyendo <p>, <div>, <iframe> y más. Esta distinción se define en el WHATWG HTML Living Standard.
Cuando el validador encuentra un <iframe> dentro de un <noscript> en el <head>, reporta “Etiqueta de inicio incorrecta” porque el analizador está operando bajo el modelo de contenido del <head>, donde <iframe> simplemente no es un elemento válido. El navegador puede intentar recuperación de errores cerrando implícitamente el <head> y abriendo el <body>, pero esto puede llevar a estructuras DOM inesperadas y problemas de diseño.
Este patrón aparece comúnmente al agregar fragmentos de seguimiento o análisis. Por ejemplo, Google Tag Manager proporciona un respaldo <noscript> que contiene un <iframe>, y está destinado a colocarse inmediatamente después de la etiqueta de apertura <body> — no en el <head>. Colocarlo en la ubicación incorrecta rompe la validación y puede hacer que el pixel de seguimiento no funcione correctamente.
Para corregir el error, identifica cualquier bloque <noscript> en tu <head> que contenga elementos que no sean metadatos (como <iframe>, <p>, <div>, <img>, etc.) y muévelos al <body>. Si el bloque <noscript> solo necesita elementos de metadatos como <meta> o <style>, puede permanecer en el <head>.
Ejemplos
Inválido: iframe dentro de noscript en head
El <iframe> no es contenido válido de metadatos, por lo que no puede aparecer dentro de <noscript> en el <head>.
<!DOCTYPE html>
<html lang="en">
<head>
<title>My webpage</title>
<noscript>
<iframe src="https://example.com/tracking"></iframe>
</noscript>
</head>
<body>
<h1>Welcome</h1>
</body>
</html>
Corregido: noscript con iframe movido al body
Mover el bloque <noscript> al <body> resuelve el error, ya que el contenido de flujo está permitido allí.
<!DOCTYPE html>
<html lang="en">
<head>
<title>My webpage</title>
</head>
<body>
<noscript>
<iframe src="https://example.com/tracking"></iframe>
</noscript>
<h1>Welcome</h1>
</body>
</html>
Válido: noscript solo con metadatos en head
Un bloque <noscript> que contiene solo elementos de metadatos es perfectamente válido dentro del <head>.
<!DOCTYPE html>
<html lang="en">
<head>
<title>My webpage</title>
<noscript>
<meta http-equiv="refresh" content="0; url=https://example.com/nojs">
<style>
.js-only { display: none; }
</style>
</noscript>
</head>
<body>
<h1>Welcome</h1>
</body>
</html>
Corregido: dividir un noscript mixto entre head y body
Si necesitas tanto metadatos como contenido de flujo en tu respaldo <noscript>, usa dos bloques <noscript> separados — uno en el <head> para metadatos, y uno en el <body> para contenido visible.
<!DOCTYPE html>
<html lang="en">
<head>
<title>My webpage</title>
<noscript>
<style>
.js-only { display: none; }
</style>
</noscript>
</head>
<body>
<noscript>
<p>Please enable JavaScript to view this website.</p>
<iframe src="https://example.com/tracking"></iframe>
</noscript>
<h1>Welcome</h1>
</body>
</html>
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.
Más información: