De Tim Berners-Lee en 1991 a HTML5 hoy — entiende el cimiento de todo lo que ves en internet.
HTML significa HyperText Markup Language — Lenguaje de Marcado de Hipertexto. Es el lenguaje estándar que utilizamos para crear y estructurar el contenido de las páginas web.
No es un lenguaje de programación: no tiene variables, ni bucles, ni lógica. Es un lenguaje de marcado que utiliza etiquetas para describir el significado y la estructura del contenido.
El navegador (Chrome, Firefox, Safari) lee el HTML y lo interpreta visualmente, mostrando al usuario el contenido ya formateado, sin que vea el código fuente.
HTML trabaja junto a CSS (estilo visual) y JavaScript (comportamiento interactivo) para construir la experiencia web completa.
Desde un documento científico en el CERN hasta el estándar mundial que sustenta miles de millones de páginas. Esta es la historia de HTML.
En el laboratorio CERN de Ginebra, el científico británico Tim Berners-Lee propuso un sistema de gestión de información. En 1991 publicó el primer documento HTML con apenas 18 etiquetas. Quería que los investigadores compartieran documentos fácilmente a través de una red.
Mosaic, el primer navegador que podía mostrar imágenes dentro del texto, fue lanzado por Marc Andreessen. HTML comenzó a incluir la etiqueta <img>. La web pasó de texto a multimedia.
El IETF publicó HTML 2.0, la primera especificación formal. Se incorporaron formularios (<form>, <input>) permitiendo por primera vez la interacción del usuario con las páginas web.
El W3C (World Wide Web Consortium) fundado por Berners-Lee asumió la estandarización. HTML 4.01 separó la presentación visual del contenido semántico, promoviendo el uso de CSS para los estilos.
El W3C apostó por XHTML, una versión de HTML con las reglas estrictas del XML. Requería cerrar todas las etiquetas, usar minúsculas y citar todos los atributos. La rigidez fue su perdición.
El WHATWG (formado por Apple, Mozilla y Opera) comenzó a trabajar en HTML5 fuera del W3C. En 2014 fue adoptado oficialmente. Trajo <video>, <audio>, <canvas>, APIs de geolocalización, almacenamiento local y etiquetas semánticas.
WHATWG y W3C acordaron mantener una única especificación viva: el "Living Standard". HTML ya no tiene versiones numeradas fijas, se actualiza continuamente. Es el estándar que todos los navegadores modernos implementan hoy.
Cada versión incorporó nuevas etiquetas y capacidades, respondiendo a las necesidades de una web en constante evolución.
18 etiquetas básicas. Solo texto con hipervínculos. Creado por Tim Berners-Lee para compartir documentos científicos.
Primera especificación oficial. Incluyó formularios y permitió la interactividad básica del usuario.
Añadió tablas, applets Java y elementos de presentación visual. El W3C asume la estandarización.
Impulsó la separación entre contenido y presentación. Tres variantes: Strict, Transitional y Frameset.
HTML reformulado como XML. Más estricto pero difícil de adoptar. Eventualmente reemplazado por HTML5.
Semántica, multimedia nativa (video, audio), APIs web potentes, Canvas para gráficos, y el estándar "living" que continúa evolucionando.
Las etiquetas son los bloques de construcción del HTML. Cada etiqueta tiene un propósito semántico — le dice al navegador qué tipo de contenido es, no cómo se ve.
<tag> y cierre </tag><img>, <br>, <meta>, <input><h1> es el más importante (solo uno por página). Los motores de búsqueda los usan para entender la estructura del contenido.<strong> indica importancia (negrita), <em> indica énfasis (cursiva). Nunca uses estas etiquetas solo por el estilo visual.Un párrafo normal de texto.
Texto con importancia aquí.
Texto con énfasis así.
Línea uno.
Línea dos.
<ul> (unordered list) para ítems sin orden específico. <ol> (ordered list) para secuencias numeradas. Cada ítem siempre va en <li>. Las listas se pueden anidar.<a> (anchor) es la esencia del "HyperText". La imagen <img> es autocerrable y siempre requiere el atributo alt para accesibilidad.Ir a Google (abre pestaña nueva)
Contacto (ancla interna)
Escríbenos (abre email)
Todo archivo HTML bien formado sigue una estructura base. Cada parte tiene un propósito específico.
No es una etiqueta HTML. Le indica al navegador que el documento usa HTML5. Siempre va en la primera línea.
Contiene todo el documento. El atributo lang especifica el idioma para navegadores y lectores de pantalla.
Información sobre la página: codificación, título (pestaña del navegador), metadatos, enlaces a CSS. El usuario no lo ve directamente.
charset="UTF-8" le dice al navegador qué sistema usar para interpretar el texto. Sin esto, las tildes (á, é) y la ñ se verían como caracteres extraños (�).
width=device-width adapta el ancho al dispositivo. initial-scale=1.0 evita el zoom automático en móviles.
Aparece en la pestaña del navegador y en los resultados de búsqueda. Importante para SEO.
Todo lo que el usuario ve en el navegador: textos, imágenes, videos, formularios, enlaces, etc.
Describen el propósito de cada sección. Mejoran la accesibilidad y el SEO frente al uso genérico de <div>.
Antes de publicar un sitio en internet necesitas un servidor local en tu computador para probar tu trabajo. Estas tres herramientas hacen exactamente eso.
La opción más popular y recomendada para aprendices. X (cross-platform = multiplataforma), Apache, MariaDB, PHP y Perl. Funciona igual en Windows, macOS y Linux. Instala todo en un solo paquete con un panel de control visual para iniciar y detener servicios.
Windows + Apache + MySQL + PHP. Diseñado exclusivamente para Windows. Ofrece un ícono en la bandeja del sistema para gestionar los servicios y permite cambiar fácilmente entre versiones de PHP. Muy usada en ambientes de desarrollo Windows corporativos.
Linux + Apache + MySQL + PHP. A diferencia de XAMPP y WAMP, LAMP no es un instalador: es la combinación de herramientas que se instalan directamente vía terminal en distribuciones Linux (Ubuntu, Debian). Es el estándar real de producción en servidores web del mundo.
| Característica | XAMPP | WAMP | LAMP |
|---|---|---|---|
| Sistema operativo | Win / Mac / Linux | Solo Windows | Solo Linux |
| Instalación | Instalador gráfico | Instalador gráfico | Terminal (apt/yum) |
| Panel de control | ✅ Sí | ✅ Sí | ❌ Terminal |
| Recomendado para | Principiantes | Usuarios Windows | Producción / Linux |
| Incluye phpMyAdmin | ✅ Sí | ✅ Sí | Instalación manual |
Así debe organizarse un proyecto web desde el primer día. Una buena estructura facilita el trabajo en equipo, el mantenimiento y el crecimiento del sitio.
Cuando el servidor recibe una visita sin especificar archivo (ej. www.misitio.com), automáticamente busca y sirve index.html. Siempre debe existir este archivo en la raíz del proyecto. Es una convención universal de todos los servidores web.
Nunca mezcles HTML, CSS, imágenes y scripts en la misma carpeta. La organización por tipo (css/, js/, img/) hace el proyecto mantenible. Con el tiempo añadirás carpetas como php/, data/ o components/.
Usa siempre minúsculas, sin espacios (usa guión medio -) y sin tildes ni ñ. Los servidores Linux distinguen mayúsculas (Foto.jpg ≠ foto.jpg). Un archivo llamado Mi Foto.JPG puede funcionar en Windows pero romper en producción.
C:\xampp\htdocs\mi-proyecto\
→ Acceder en localhost/mi-proyecto
C:\wamp64\www\mi-proyecto\
→ Acceder en localhost/mi-proyecto
/var/www/html/mi-proyecto/
→ Acceder en localhost/mi-proyecto
Cualquier carpeta del sistema
→ Abrir index.html directamente en el navegador
Un nombre de archivo mal puesto puede hacer que tu página deje de funcionar al publicarla. Estas reglas no son opcionales: son el estándar profesional que todo desarrollador debe dominar desde el primer día.
Windows no diferencia mayúsculas de minúsculas (Foto.jpg = foto.jpg). Pero Linux, que es el 96% de los servidores web del mundo, SÍ diferencia. Un archivo que abre perfectamente en tu computador con Windows puede dar error 404 al publicarlo en producción.
Un espacio en un nombre de archivo se convierte en %20 en la URL. Mi Foto.jpg se vuelve Mi%20Foto.jpg. Además puede causar errores al referenciar el archivo en HTML o CSS. Los espacios en nombres de archivos web están prohibidos por convención.
Los motores de búsqueda como Google leen las URLs. Un archivo llamado servicios-desarrollo-web.html es mucho más descriptivo y posiciona mejor que pagina2.html o PaginaServiciosWeb.html.
Todo nombre de archivo y carpeta debe estar en minúsculas, sin excepción. Esto garantiza compatibilidad entre Windows, macOS y servidores Linux.
MiPagina.htmlFotos/StyleSheet.cssmi-pagina.htmlfotos/stylesheet.cssEl guión medio - es el separador estándar para nombres compuestos en la web. Google lo reconoce como separador de palabras, lo que es bueno para el SEO. El guión bajo _ se usa en algunos contextos como Python, pero en URLs el guión medio es preferido.
mis fotos.htmlsobre mi.htmlcontacto empresa.cssmis-fotos.htmlsobre-mi.htmlcontacto-empresa.cssLos caracteres especiales como á é í ó ú ñ ü ¿ ¡ @ # $ % & ( ) pueden causar errores de codificación en servidores o navegadores que no soporten UTF-8 en las URLs. Escribe siempre usando solo letras del alfabeto inglés básico.
información.htmlniños.jpgdiseño/informacion.htmlninos.jpgdiseno/El nombre debe describir el contenido del archivo en 2–4 palabras. Ni tan genérico (pagina1.html) que no diga nada, ni tan largo (pagina-de-servicios-de-desarrollo-web-de-la-empresa.html) que sea difícil de manejar. El nombre ideal es claro, conciso y único dentro del proyecto.
pagina2.htmlimg1.jpgnuevo.cssservicios.htmllogo-empresa.jpgestilos.cssindex.htmlEsta es una convención que todos los servidores web (Apache, Nginx, IIS) conocen: cuando alguien visita www.misitio.com sin especificar un archivo, el servidor busca automáticamente index.html (o index.php) en esa carpeta. Si no existe, el servidor puede mostrar un error o el listado de archivos.
index.html. Así misitio.com/blog/ cargará blog/index.html automáticamente.
Aquí verás tres niveles de complejidad. Todo proyecto empieza en el nivel básico y crece según sus necesidades.
| Extensión | Tipo de archivo | Para qué se usa | Ejemplo |
|---|---|---|---|
.html | Documento HTML | Páginas web, contenido estructurado | contacto.html |
.css | Hoja de estilos | Diseño visual y layout | estilos.css |
.js | JavaScript | Interactividad y comportamiento | main.js |
.jpg / .jpeg | Imagen | Fotos, imágenes con gradientes | foto-perfil.jpg |
.png | Imagen | Logos, imágenes con transparencia | logo.png |
.svg | Imagen vectorial | Íconos, logos escalables sin pérdida | icono-menu.svg |
.webp | Imagen moderna | Imágenes optimizadas para web (más rápidas) | banner.webp |
.php | Script PHP | Páginas dinámicas con lógica de servidor | procesar-form.php |
.md | Markdown | Documentación, README de proyectos | README.md |
.json | JSON | Datos estructurados, configuraciones | config.json |
.ttf / .woff2 | Tipografía | Fuentes web locales | roboto.woff2 |
.ico | Ícono | Favicon del navegador (pestaña) | favicon.ico |
index.html
sobre-mi.html
galeria-fotos/
logo-empresa.svg
estilos-base.css
banner-principal.webp
script-slider.js
Index.HTML
Sobre Mi.html
Galería Fotos/
Logo-Empresa.SVG
Estilos Base.CSS
Bañer Principal.webp
Script Slider.JS
Sin mayúsculas → Linux ≠ Windows
Sin espacios → rompe URLs
Sin tildes → error en servidor
Extensión minúscula → estándar web
Guión medio → legible y SEO
Sin ñ/ü → encoding seguro
Descriptivo → mantenible
Aplica exactamente lo que acabas de aprender. Este ejercicio usa únicamente las etiquetas explicadas en esta página.
Nivel: Principiante · Solo etiquetas vistas · Tiempo: 20 – 30 minutos
Construir desde cero una página web de presentación personal usando únicamente la estructura base y las etiquetas semánticas explicadas en esta página. El resultado no tendrá estilos (eso viene con CSS), pero debe estar semánticamente correcto y bien estructurado.
presentacion.html en tu escritorio o carpeta de proyectos.
<!DOCTYPE html>, <html lang="es">, <head> con las dos <meta> y el <title>, y el <body>.
<body> crea las tres grandes zonas semánticas: <header>, <main> y <footer>.
charset="UTF-8"viewport correcto<h1> con tu nombre completo<p> con tu rol: "Aprendiz de desarrollo web"<nav> con 3 enlaces <a href="#..."> que apunten a las secciones del <main><h2> y un <p> de presentación<h2> e <img> (usa src con una URL pública y el atributo alt)<h2> y un <p> con un <a href="mailto:..."><p> con © y tu nombre<section> para que los enlaces del <nav> funcionenEn este ejercicio no se deben usar etiquetas que aún no hemos visto: <ul>, <ol>, <li>, <form>, <input>, <table>, ni ningún atributo style="". El objetivo es dominar la estructura semántica antes de agregar complejidad.
El instructor revisará: (1) que la estructura base esté completa y correcta, (2) que los tres niveles semánticos (header, main, footer) estén presentes, (3) que las tres <section> tengan ID y los enlaces del nav las apunten correctamente, (4) que la imagen tenga atributo alt, y (5) que el código esté comentado e indentado.