SEO y Metadatos

El HTML que escribís es lo primero que leen los buscadores y las redes sociales. Aprendé a estructurar tu página para que Google la entienda mejor y para controlar exactamente cómo se ve cuando alguien comparte tu link.

Cómo Google interpreta tu HTML

Cuando Google indexa una página, no la "ve" como un humano — la lee como código estructurado. No interpreta colores ni diseño visual: interpreta etiquetas, jerarquías y relaciones semánticas. Esto significa que el SEO empieza mucho antes que cualquier estrategia de contenido o de palabras clave: empieza en cómo está armado tu HTML.

Dos páginas con el mismo texto visible pueden tener resultados de posicionamiento muy distintos si una usa <div> genéricos para todo y la otra usa una estructura semántica clara con encabezados ordenados, etiquetas <article>, metadatos completos y datos estructurados. El contenido es el mismo; lo que cambia es qué tan fácil le resulta al buscador entenderlo.

SEO on-page vs off-page

Lo que cubrimos en este tutorial es SEO on-page: todo lo que controlás directamente en el HTML de tu página. Existe también el SEO off-page (links de otros sitios hacia el tuyo, reputación del dominio, etc.), que es un tema completamente distinto y no depende del HTML.

title y meta description — lo primero que ve el usuario

Antes de que alguien entre a tu sitio, ya lo está evaluando a través de dos elementos: el <title> (el texto azul y clickeable en los resultados de búsqueda) y la meta description (el texto gris debajo). Son, literalmente, tu primera impresión.

<head>
    <title>Cómo aprender HTML desde cero — Guía 2026 | Mi Blog</title>
    <meta name="description"
          content="Guía completa para aprender HTML desde cero: estructura,
                   etiquetas semánticas, formularios y accesibilidad.
                   Con ejemplos prácticos para principiantes.">
</head>

El <title> tiene un límite práctico de aproximadamente 50 a 60 caracteres. Google no corta el texto en sí — lo que pasa es que en los resultados de búsqueda solo se muestran aproximadamente 600 píxeles de ancho, y un título más largo se trunca con puntos suspensivos, lo que puede cortar la idea a la mitad.

La meta description tiene un límite similar de 150 a 160 caracteres. A diferencia del title, no afecta directamente el posicionamiento — pero sí afecta la tasa de clics (cuántas personas hacen clic en tu resultado en vez de en otro), porque es el texto que convence al usuario de que tu página tiene lo que busca.

ElementoLargo recomendadoAfecta el rankingAfecta el CTR
<title>50-60 caracteresSí, directamenteSí
meta description150-160 caracteresNo directamenteSí, mucho
Cada página necesita su propio title y description

Un error común es usar el mismo <title> en todas las páginas del sitio (o copiar el nombre de la empresa sin más). Cada página debería tener un título único que describa específicamente su contenido — Google penaliza la duplicación de metadatos entre páginas distintas.

Probá el Ejemplo 1: title y description optimizados

Jerarquía de contenido y SEO

Ya vimos en el tutorial de semántica que los encabezados deben seguir un orden lógico (h1 → h2 → h3) por motivos de accesibilidad. Para SEO, esa misma jerarquía cumple otro rol fundamental: le indica a Google cuál es el tema central de la página y cómo se organiza el contenido alrededor de ese tema.

El <h1> debería contener — de forma natural, sin forzarlo — las palabras clave principales que describen de qué trata la página. Cada <h2> dentro de esa página representa un subtema relacionado, y ese patrón es exactamente lo que un algoritmo de búsqueda usa para entender la profundidad y relevancia del contenido.

<article>
    <!-- El h1 contiene el tema principal con palabras clave naturales -->
    <h1>Cómo aprender HTML desde cero: guía completa para principiantes</h1>

    <p>Introducción del artículo...</p>

    <h2>¿Qué es HTML y para qué sirve?</h2>
    <p>...</p>

    <h2>Estructura básica de un documento HTML</h2>
    <p>...</p>
        <h3>La etiqueta DOCTYPE</h3>
        <p>...</p>
        <h3>Head y body</h3>
        <p>...</p>

    <h2>Etiquetas semánticas más importantes</h2>
    <p>...</p>
</article>
Nunca uses encabezados solo por el tamaño visual

Si necesitás un texto grande pero no es realmente un encabezado de sección (por ejemplo, una frase destacada dentro de un párrafo), no uses <h2> o <h3> solo para conseguir ese tamaño — usá CSS sobre un <p> o un <span>. Mezclar jerarquía semántica con estilo visual confunde tanto a Google como a los lectores de pantalla.

Enlaces — texto ancla y atributos rel

Cómo escribís y conectás tus enlaces afecta tanto el SEO como la seguridad de tu sitio. Google usa el texto del enlace (el "texto ancla") para entender de qué trata la página enlazada, incluso antes de visitarla.

Texto ancla descriptivo

<!-- ❌ Mal — "hacé clic acá" no le dice nada a Google sobre el destino -->
<p>Para aprender más sobre CSS, <a href="/css-basico">hacé clic acá</a>.</p>

<!-- ✅ Bien — el texto del enlace describe el contenido de destino -->
<p>Para aprender más, mirá nuestra
   <a href="/css-basico">guía de CSS para principiantes</a>.</p>

El atributo rel en enlaces externos

Cuando enlazás a un sitio que no controlás, los atributos rel le dan contexto adicional a Google sobre la naturaleza de ese enlace — y en el caso de noopener, también resuelven un problema de seguridad.

<!-- Enlace externo estándar, abierto en nueva pestaña -->
<a href="https://otrosite.com" target="_blank" rel="noopener noreferrer">
    Sitio externo
</a>

<!-- Enlace patrocinado o pago — Google requiere marcarlo así -->
<a href="https://anunciante.com" rel="sponsored">
    Producto recomendado
</a>

<!-- Contenido generado por usuarios (comentarios, foros) -->
<a href="https://sitio-de-usuario.com" rel="ugc">
    Link compartido por un usuario
</a>

<!-- No querés transferir "autoridad SEO" a ese enlace -->
<a href="https://sitio-no-confiable.com" rel="nofollow">
    Enlace sin seguimiento
</a>
Valor de relSignificado
noopenerEvita que la página enlazada acceda a window.opener — previene un riesgo de seguridad real en enlaces con target="_blank"
noreferrerAdemás de lo anterior, no envía información de referencia (de qué página vino el usuario)
nofollowLe pide a Google que no transfiera "autoridad" de tu página a la enlazada
sponsoredMarca el enlace como contenido pago o patrocinado (requerido por las políticas de Google)
ugcUser Generated Content — marca enlaces que vienen de comentarios o contenido de usuarios, no del sitio mismo
target="_blank" sin noopener es un riesgo de seguridad

Cuando abrís un enlace en nueva pestaña sin rel="noopener", la página de destino puede acceder parcialmente a tu ventana original a través de window.opener y, en algunos casos, redirigirla a un sitio malicioso (un ataque conocido como "tabnabbing"). Los navegadores modernos aplican noopener automáticamente, pero siempre es mejor escribirlo explícitamente.

Probá el Ejemplo 2: Enlaces con rel correcto

Open Graph — cómo se ve tu link al compartirlo

Cuando compartís un link en WhatsApp, Facebook, LinkedIn o Slack, esas plataformas generan automáticamente una vista previa con imagen, título y descripción. Esa vista previa no la inventa la red social — la lee directamente de metadatos específicos en tu <head> llamados Open Graph (un protocolo creado originalmente por Facebook, pero adoptado como estándar por casi todas las plataformas).

Sin estos metadatos, las redes sociales intentan adivinar qué mostrar usando el <title> normal y la primera imagen que encuentren en la página — con resultados generalmente pobres. Definir Open Graph te da control total sobre esa vista previa.

<head>
    <!-- Título específico para compartir (puede diferir del <title>) -->
    <meta property="og:title" content="Cómo aprender HTML desde cero">

    <!-- Descripción para la vista previa -->
    <meta property="og:description"
          content="Guía completa con ejemplos prácticos para principiantes.">

    <!-- Imagen de la vista previa —tamaño recomendado: 1200x630px -->
    <meta property="og:image" content="https://misitio.com/og-html.jpg">
    <meta property="og:image:width"  content="1200">
    <meta property="og:image:height" content="630">

    <!-- URL canónica de la página que se está compartiendo -->
    <meta property="og:url" content="https://misitio.com/aprender-html">

    <!-- Tipo de contenido -->
    <meta property="og:type" content="article">

    <!-- Nombre del sitio -->
    <meta property="og:site_name" content="Mi Blog de Programación">

    <!-- Idioma del contenido -->
    <meta property="og:locale" content="es_AR">
</head>
Valor de og:typeCuándo usarlo
websitePágina genérica (home, landing)
articlePosts de blog, noticias
productPágina de un producto en e-commerce
video.otherPágina centrada en un video
profilePerfil de una persona

Twitter Cards

X (antes Twitter) tiene su propio sistema de metadatos, similar a Open Graph pero con su propio prefijo. Si no los definís, X suele usar los valores de Open Graph como respaldo — pero definirlos explícitamente te da más control, especialmente sobre el formato de la tarjeta (con imagen grande o chica).

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Cómo aprender HTML desde cero">
<meta name="twitter:description"
      content="Guía completa con ejemplos prácticos para principiantes.">
<meta name="twitter:image" content="https://misitio.com/og-html.jpg">
<meta name="twitter:site" content="@miblog">
Probá tu Open Graph antes de publicar

Existen herramientas gratuitas para previsualizar exactamente cómo se va a ver tu link: el "Sharing Debugger" de Facebook y el "Card Validator" de X/Twitter. Son útiles porque estas plataformas cachean la vista previa la primera vez que alguien comparte el link — si cambiás la imagen después, necesitás forzar la actualización del caché con estas mismas herramientas.

Probá el Ejemplo 3: Open Graph y Twitter Cards completos

Controlando el rastreo: robots, canonical y sitemap

meta robots — indicarle a Google qué hacer con la página

La etiqueta meta name="robots" le da instrucciones directas a los buscadores sobre cómo tratar esa página específica: si indexarla (mostrarla en resultados de búsqueda) y si seguir los enlaces que contiene.

<!-- Comportamiento por defecto (no hace falta escribirlo) -->
<meta name="robots" content="index, follow">

<!-- No indexar esta página, pero sí seguir sus enlaces -->
<!-- útil para páginas de "gracias por tu compra", paneles internos, etc. -->
<meta name="robots" content="noindex, follow">

<!-- No indexar y no seguir ningún enlace de la página -->
<meta name="robots" content="noindex, nofollow">

<!-- Indexar pero no mostrar una versión en caché -->
<meta name="robots" content="index, follow, noarchive">

rel="canonical" — evitar contenido duplicado

Cuando la misma página es accesible desde varias URLs distintas (con y sin www, con parámetros de tracking, versiones de impresión, etc.), Google puede interpretarlo como contenido duplicado y dividir el valor SEO entre todas esas versiones. La etiqueta canonical le indica explícitamente cuál es la URL "oficial" que debería indexarse.

<!-- En https://misitio.com/producto?ref=newsletter -->
<!-- le decimos a Google que la versión "real" es sin el parámetro -->
<link rel="canonical" href="https://misitio.com/producto">
Cada página debería apuntar a sí misma

Como regla general, toda página debería tener una etiqueta canonical que apunte a su propia URL limpia (sin parámetros innecesarios). Esto previene problemas de contenido duplicado incluso en casos que no anticipaste, como cuando alguien comparte tu link agregándole parámetros de tracking.

sitemap.xml y robots.txt

Estos dos no son etiquetas HTML, sino archivos separados que viven en la raíz de tu dominio, pero son parte fundamental de cómo Google descubre y rastrea tu sitio — vale la pena entenderlos en este contexto.

<!-- En el <head>, referenciás el sitemap (opcional, también podés
     enviarlo directamente en Google Search Console) -->
<link rel="sitemap" type="application/xml" href="/sitemap.xml">

El archivo robots.txt vive en https://tusitio.com/robots.txt y le dice a los rastreadores qué secciones del sitio no deberían visitar:

# Contenido de robots.txt
User-agent: *
Disallow: /admin/
Disallow: /carrito/
Allow: /

Sitemap: https://misitio.com/sitemap.xml

El sitemap.xml es básicamente un mapa del sitio en formato XML que lista todas las URLs importantes, ayudando a Google a descubrirlas más rápido — especialmente útil en sitios grandes o con páginas que no están bien enlazadas entre sí:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>https://misitio.com/</loc>
        <lastmod>2026-06-01</lastmod>
        <changefreq>weekly</changefreq>
        <priority>1.0</priority>
    </url>
    <url>
        <loc>https://misitio.com/blog/aprender-html</loc>
        <lastmod>2026-05-20</lastmod>
        <changefreq>monthly</changefreq>
        <priority>0.8</priority>
    </url>
</urlset>
Probá el Ejemplo 4: meta robots y canonical

Rich snippets con JSON-LD

Ya vimos en el tutorial de semántica una introducción a JSON-LD. Acá vamos a profundizar en cómo este tipo de datos estructurados puede transformar tu resultado en Google de un simple link azul a un rich snippet: estrellas de reseñas, precio, disponibilidad, preguntas frecuentes desplegables, y más, directamente en los resultados de búsqueda.

Reseñas y calificaciones

<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "Product",
    "name": "Curso de HTML para Principiantes",
    "image": "https://misitio.com/curso-html.jpg",
    "description": "Curso completo de HTML desde cero hasta nivel intermedio.",
    "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": "4.8",
        "reviewCount": "256"
    },
    "offers": {
        "@type": "Offer",
        "priceCurrency": "ARS",
        "price": "15000",
        "availability": "https://schema.org/InStock"
    }
}
</script>

Preguntas frecuentes (FAQ)

Cuando marcás correctamente una sección de preguntas frecuentes, Google puede mostrarlas directamente en los resultados de búsqueda como una lista desplegable, ocupando mucho más espacio visual que un resultado normal.

<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
        {
            "@type": "Question",
            "name": "¿Necesito experiencia previa para aprender HTML?",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "No, HTML es el lenguaje ideal para empezar en programación web. No requiere conocimientos previos."
            }
        },
        {
            "@type": "Question",
            "name": "¿Cuánto tiempo lleva aprender HTML básico?",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "Con dedicación constante, los fundamentos de HTML se pueden aprender en una o dos semanas."
            }
        }
    ]
}
</script>

Breadcrumbs (migas de pan)

Marcar la ruta de navegación de tu página con datos estructurados hace que Google muestre esa ruta directamente en el resultado de búsqueda en lugar de la URL completa, mejorando la claridad y el espacio visual que ocupa tu resultado.

<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Inicio", "item": "https://misitio.com" },
        { "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://misitio.com/blog" },
        { "@type": "ListItem", "position": 3, "name": "Aprender HTML", "item": "https://misitio.com/blog/aprender-html" }
    ]
}
</script>
Validá siempre tus datos estructurados

Google ofrece la herramienta gratuita "Rich Results Test" (search.google.com/test/rich-results) donde pegás tu URL o tu código y te muestra exactamente qué rich snippets detecta y si hay errores en el marcado. Es un paso obligatorio antes de dar por terminado el JSON-LD — un error de sintaxis hace que Google ignore todo el bloque sin avisarte.

Buenas Prácticas

  • title único y descriptivo en cada página: entre 50-60 caracteres, con las palabras clave principales cerca del inicio
  • meta description que invite al clic: 150-160 caracteres que resuman el valor de la página, no solo una lista de palabras clave
  • Un solo h1 por página, con jerarquía lógica después: nunca saltees niveles ni uses encabezados solo por el tamaño visual
  • Texto ancla descriptivo en todos los enlaces: evitá "clic acá" — el texto del link debería tener sentido fuera de contexto
  • rel="noopener noreferrer" en todo target="_blank": es tanto una buena práctica de seguridad como de SEO
  • Open Graph completo en toda página compartible: og:title, og:description, og:image (1200x630px) como mínimo
  • canonical en cada página: apuntando a su propia URL limpia, sin parámetros de tracking
  • noindex en páginas que no deberían aparecer en buscadores: checkout, gracias por tu compra, paneles internos
  • JSON-LD validado: usá siempre el Rich Results Test de Google antes de publicar datos estructurados
  • Sitemap actualizado: especialmente importante en sitios con contenido que cambia frecuentemente, como blogs o e-commerce