¿Te ha pasado que tu web se ve impecable en el escritorio, pero en la pestaña del navegador aparece un cuadro blanco en lugar de tu icono? Pues muy probablemente tu configuración del favicon está incompleta. Un error que veo constantemente al hacer code review es colocar el favicon link tag in head not body. Los navegadores son bastante estrictos con esta regla y no perdonan.

El síntoma: un icono genérico o ausente

Ya añadiste el link tag, verificaste la ruta del archivo e incluso vaciaste la caché del navegador. Aun así, te aparece el típico icono del globo terráqueo o simplemente nada. Inspeccionas el DOM y te das cuenta de que la etiqueta está cómodamente sentada dentro del elemento <body>. Ahí tienes el problema.

La solución rápida: muévelo arriba

Abre tu archivo HTML, corta el link tag del favicon del body y pégalo en cualquier sitio dentro del elemento <head>. Así de simple. Refresca el navegador y el icono debería aparecer al instante.

<!-- WRONG: Browsers ignore this -->
<body>
  <link rel='icon' href='/favicon.ico'>
  <h1>My Website</h1>
</body>

<!-- CORRECT: Place it here -->
<head>
  <link rel='icon' href='/favicon.ico'>
</head>

Por qué los navegadores ignoran las etiquetas en el body

La especificación de HTML es clara: los elementos <link> pertenecen al <head>. Aunque los navegadores modernos son muy permisivos con HTML malformado, el comportamiento del parser se vuelve impredecible cuando se encuentra con links de recursos en el body.

El parser interrumpe el body

Cuando el parser HTML del navegador se topa con un <link> dentro del body, normalmente fuerza la etiqueta hacia el head. Pero ojo, si tu framework de JavaScript inyecta la etiqueta de forma dinámica después de que la página carga, es posible que el navegador no lance la petición del icono. La pestaña simplemente se queda en blanco.

Flash of Unstyled Content (FOUC)

Si el link del favicon se parsea tarde, el navegador puede renderizar la pestaña antes de que el icono se descargue. Obtienes un parpadeo breve de una pestaña vacía antes de que tu icono aparezca. Queda poco profesional.

Ejemplo real: cómo lo hace GitHub

Echa un vistazo al código fuente de GitHub. Toda la lógica de iconos está estrictamente dentro del <head>. Sirven un fallback en formato ICO, un SVG para navegadores modernos y un Apple Touch Icon. No esparcen estas etiquetas por todo el DOM. Saben que la colocación estricta previene problemas de rendering race conditions. Deberías seguir su ejemplo.

Consejos de prevención para 2026

Los desarrolladores que usan frameworks suelen cometer este error porque trabajan con layouts basados en componentes. Aquí tienes cómo evitar que ocurra:

Mantén tus iconos donde deben estar. El head es para metadata, el body es para el contenido. Si respetas esa frontera, tus pestañas siempre se renderizarán a la perfección.