Elementos META

De acuerdo con la especificación de HTML 4, los elementos META se utilizan para especificar información sobre el propio documento (de ahí su nombre). La sintaxis del elemento META es la siguiente:

<meta name="nombre-propiedad" content="valor-propiedad" scheme="esquema-datos" lang="idioma" dir="dirección-del-texto">

o bien:

<meta http-equiv="nombre-encabezado-http" content="valor-encabezado">

Los elementos META forman parte del contenido del elemento HEAD del documento.

Por ejemplo:

<meta name="Author" content="Pedro Villar Martos" lang="es">
Esta declaración dice que el autor del documento es Pedro Villar Martos, e indica que el valor del atributo content está en español.
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Esta declaración dice que el tipo de contenido del documento es text/html, y la codificación de caracteres utilizada es la ISO-8859-1.

Elementos META especificados con http-equiv

Introducción al protocolo HTTP

HTTP es el protocolo de la Web. Es decir, es el protocolo de red (algo así como las normas) según las cuales se transmiten los recursos de la World Wide Web entre las aplicaciones que acceden a la Web. Estos recursos pueden ser documentos HTML, imágenes, ficheros de música, etc.

La comunicación tiene lugar a través del envío de mensajes. El cliente (normalmente un navegador) envía un mensaje de petición al servidor, y éste devuelve un mensaje de respuesta, que normalmente contiene el recurso requerido por el cliente. La estructura de estos mensajes es la siguiente:

  • Una línea inicial, que es diferente según el mensaje sea de petición o de respuesta.
  • Cero o más líneas de encabezado.
  • Una línea en blanco
  • Opcionalmente, un cuerpo de mensaje (p.ej., un fichero, los datos de un formulario, etc.).

En el caso de un mensaje de petición, la línea inicial tiene la siguente estructura: método identificador-del-recurso versión-de-HTTP. Por ejemplo:

GET /index.html HTTP/1.1

Esto significa "Soy compatible con la versión 1.1; dame el fichero index.html del directorio raíz".

En el caso de un mensaje de respuesta, la línea inicial (Status Line) tiene la siguiente estructura: version-de-HTTP código-de-estado-de-respuesta frase-explicativa. Por ejemplo:

HTTP/1.1 200 OK

El código 200 significa que la petición se ha servido con éxito. Otros códigos típicos son el 404 (el recurso pedido no existe), o el 500 (error inesperado en el servidor). La lista completa de códigos se puede encontrar en la especificación del protocolo.

Líneas de encabezado

Las líneas de encabezado dan información sobre el mensaje o sobre el objeto contenido en el cuerpo del mensaje. Cada encabezado, que ocupa una línea, tiene la estructura Nombre-del-encabezado: valor. HTTP 1.0 define 16 encabezados, y HTTP 1.1 define 46. Los dos encabezados principales en los mensajes de respuesta son Server:, que identifica el programa utilizado como servidor, y Last-Modified:, que da la fecha de la última modificación del recurso servido (hora GMT), y que es útil para las cachés (para ahorrar consumo de ancho de banda). Por ejemplo:

Server: Apache/1.3.12 (Unix)
Last-Modified: Sat, 16 Jun 2001 23:15:08 GMT

Encabezados de respuesta definidos por HTTP

Los encabezados que pueden ofrecer alguna utilidad desde el punto de vista del administrador de la página web son los siguientes:

Expires:
Indica la fecha de caducidad del documento. La fecha es GMT. Es el mecanismo básico que proporciona HTTP 1.0 para controlar el almacenamiento en caché. Después de la fecha indicada, las cachés (y posiblemente los motores de búsqueda) volverán para comprobar en el servidor si el recurso ha sido modificado. Cualquier valor ilegal significa que el cliente debe interpretarlo como "en el pasado", y por tanto es útil para impedir que el documento se almacene en las cachés, forzando a que se compruebe si el documento ha sido modificado cada vez que es requerido. Los buscadores podrían eliminar los documentos expirados de su caché, o programar una nueva visita en la fecha indicada.
Ejemplo:
Expires: Sat, 30 Jun 2001 12:00:00 GMT
Pragma:
Su valor debe ser no-cache. Permite a un cliente refrescar la copia que tiene en su caché cuando sabe que ésta es incorrecta o anticuada. Es decir, un valor no-cache no significa que el recurso no pueda ser almacenado en caché. Para controlar el almacenamiento debe usarse el encabezado Expires: o las directrices de control de caché definidas en HTTP 1.1.
Content-Type:
Permite especificar la codificación de caracteres utilizada al codificar el documento. Por ejemplo:
Content-Type: text/html; charset=ISO-8859-1
Content-Language:
Permite especificar el idioma de los destinatarios del recurso. Por ejemplo: Content-Language: es-ES indica que la audiencia a la que se dirige el recurso son los hablantes españoles del castellano. Los códigos de idioma están definidos por el IANA. Véase la información de la especificación de HTML 4.01 sobre códigos de idioma.
Este encabezado puede ser combinado con el encabezado de petición Accept-Language: (cuyo valor puede estar determinado por ejemplo por las preferencias del usuario) para servir el documento más apropiado. También puede ser utilizado por los motores de búsqueda para categorizar los recursos por idiomas.
Cache-Control
Consiste en una serie de directrices definidas por HTTP 1.1 para determinar cómo deberían ser manejadas las páginas por las cachés. Algunos de estos encabezados de respuesta incluyen:
max-age=segundos
Es similar a Expires:, pero el tiempo de caducidad, especificado en segundos, se cuenta a partir del momento en que se realiza la petición del recurso, por lo que ofrece mayor flexibilidad.
s-maxage=segundos
Como max-age, pero sólo se aplica a cachés proxy.
public
Marca la respuesta como almacenable en caché, incluso cuando lo normal es que no lo fuera. Por ejemplo, se podría definir que las páginas autentificadas fueran almacenables en caché.
no-cache
Fuerza a las cachés (proxy o de navegador) a que siempre envíen una petición al servidor de origen antes de servir una página almacenada en la caché. Esto es útil para asegurarse de que la autentificación es respetada (usado junto con public), o para servir siempre documentos actualizados sin sacrificar las ventajas de las cachés.
must-revalidate
Comunica a las cachés que deben seguir estrictamente todas nuestras reglas sobre la caducidad de los recursos. El protocolo HTTP da a las cachés cierta libertad a este respecto, la cual se puede restringir con esta directriz.
proxy-revalidate
Similar a must-revalidate, pero sólo se aplica a cachés proxy.
Ejemplo:
Cache-Control: max-age=3600, must-revalidate
Se puede encontrar más información en la especificación de HTTP 1.1.

Otros encabezados de respuesta

Existen otros encabezados de respuesta no definidos por HTTP pero que tienen cierta utilidad.

Refresh:
Este encabezado fue introducido por Netscape en la versión 2 de su navegador. Su uso típico es proporcionar una posibilidad de redireccionar un documento que ha cambiado de localización. Este uso está soportado por una amplia proporción de los navegadores existentes. Por ejemplo, <meta http-equiv="Refresh" content="3;URL=http://www.algunsitio.com/nuevo.html">, indica al navegador que cargue la página especificada al cabo de tres segundos. Nunca debería emplearse un tiempo de cero segundos, porque puede estropear la funcionalidad de algunos navegadores.
Si bien existe la posibilidad de especificar este encabezado como encabezado HTTP, lo cierto es que no tiene mucho sentido (existen mejores maneras de redireccionar recursos), a no ser que se utilice para obligar al cliente a recargar el documento cada cierto tiempo, lo cual provoca problemas de accesibilidad que deberían ser evitados (además de pérdida de control del usuario sobre su navegador, véase este mensaje en la lista lynx-dev).
La especificación HTML 4.01 dice que "los autores no deberían utilizar esta técnica para dirigir a los usuarios a páginas diferentes, ya que esto hace la página inaccesible para algunos usuarios". En la práctica, si no es posible especificar redirecciones desde el servidor, debería ofrecerse en el documento un vínculo normal al nuevo documento además del elemento META Refresh.
Coloca un "cookie" en el navegador. La especificación se encuentra en el sitio web de Netscape. La sintaxis es la siguiente:
Set-Cookie: NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure
O en la forma de elemento META:
<meta http-equiv="Set-Cookie" content="cookievalue=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure">
Si se incluye fecha de caducidad (expires) el "cookie" se queda en el disco duro hasta que llega esa fecha, momento en el cual se borra; si no se especifica la fecha, el "cookie" se borra en cuanto se cierra el navegador.
PICS-Label:
PICS significa "Platform Independent Content Rating Scheme", algo así como "Clasificación de Contenidos Independiente de la Plataforma". Su uso primario es clasificar un documento según sus contenidos (violencia, sexo, etc.), pero además tiene otras utilidades como firma de códigos, privacidad, protección de la propiedad intelectual, etc. Un ejemplo (sacado de la especificación de HTML 4.01) puede ser el siguiente:
<META http-equiv="PICS-Label" content=\'(PICS-1.1 "http://www.gcf.org/v2.5" labels on "1994.11.05T08:15-0500" until "1995.12.31T23:59-0000" for "http://w3.org/PICS/Overview.html" ratings (suds 0.5 density 0 color/hue 1))\'>
Se puede asignar una etiqueta PICS a cualquier recurso que tenga URI, y existen dos procedimientos para ello. El primero consiste en encargar a un organismo independiente la monitorización del recurso o sitio web, y las etiquetas se almacenan en el servidor de este organismo. El segundo método consiste en contactar con un servicio de clasificación por medio de unos formularios para obtener el elemento META correspondiente que se colocará en la propia página. Uno de estos servicios gratuitos es el generador de etiquetas PICS de Vancouver-Webpages.
Se puede encontrar más información en el sitio web del W3C y en Vancouver-Webpages.
Content-Script-Type:
Este encabezado está definido por HTML 4.01. Sirve para especificar el lenguaje de scripts por defecto de los scripts que haya en un documento. Los documentos que no especifiquen información relativa al lenguaje de scripts por defecto y que contengan elementos que especifiquen un script de evento intrínseco son incorrectos.
Ejemplo:
Content-Script-Type: text/javascript
Content-Style-Type:
Este encabezado también está definido por HTML 4.01. Sirve para especificar el lenguaje de hojas de estilo por defecto del documento. Los documentos que incluyan elementos que especifiquen el atributo style pero que no definan un lenguaje de hojas de estilo por defecto son incorrectos.
Ejemplo:
Content-Style-Type: text/css

Encabezados de respuesta HTTP especificados con META

Existen dos maneras de enviar los encabezados de respuesta HTTP. La primera forma, que es la más segura y la que debería elegirse siempre que sea posible, consiste en enviar los encabezados junto con el resto del mensaje de respuesta, antes del cuerpo del mensaje. Esto se puede conseguir configurando el servidor (por ejemplo, en el caso de Apache, a través del fichero .htaccess) o mediante scripts de servidor (cgi, php, asp, etc.).

La segunda forma, en general menos recomendable, consiste en incluir los encabezados en el propio documento, mediante la utilización del elemento META con el atributo http-equiv especificado.

Así, mientras que los encabezados Content-Script-Type y Content-Style-Type se especifican normalmente con un elemento META, existen otros que pueden no tener el efecto esperado si se declaran de este modo.

En particular, cuando se emplean elementos META http-equiv:

  • Todos los encabezados, incluidos los que tengan alguna relación con el control del almacenamiento en caché (Expires, Pragma, Cache-Control), serán normalmente ignorados por las cachés proxy.
  • El encabezado Cache-Control tendrá efectos indeterminados en los navegadores.
  • La especificación de la codificación de caracteres (Content-Type) puede provocar problemas.
  • No se pueden asociar metadatos a recursos que no sean documentos HTML (imágenes, música, etc.)

Por ello, en general, siempre que sea posible conviene especificar los encabezados junto con el resto de encabezados del mensaje de respuesta HTTP.

Las excepciones son la ya mencionada de Refresh, y los encabezados Content-Script-Type y Content-Style-Type, para los cuales una declaración META tiene prioridad sobre un encabezado de respuesta (cuando normalmente ocurre lo contrario).

Elementos META especificados con name

Aunque no existe ninguna especificación que defina los valores posibles para el atributo name, existe cierto número de ellos que son ampliamente entendidos (description, keywords, robots...) y otros que son entendidos por agentes de usuario en particular. De ellos los que más nos interesan son los primeros.

A continuación vemos una lista de los más utilizados.

Description
Contiene una descripción del documento. Algunos motores de búsqueda incluyen esta información junto con los resultados de la búsqueda, por lo que para que sea realmente útil debería contener la mejor descripción posible del documento. Por ejemplo:
<meta name="description" contents="Este documento trata sobre los elementos META (metatags). Explica la diferencia entre los elementos que especifican el atributo http-equiv y el atributo name, y hace un repaso de los más utilizados." lang="es">
Keywords
Algunos buscadores utilizan este elemento para clasificar los documentos por palabras clave. Existen montones de tutoriales que explican cómo especificar palabras clave para lograr mejores posiciones en los resultados de los buscadores. Muchos de estos métodos constituyen una especie de "fraude", lo cual ha provocado que su uso produzca resultados inútiles desde el punto de vista del usuario. Por ello actualmente se tiende a ignorar completamente este campo (el buscador más popular del momento, Google, no tiene en cuenta las palabras clave).
Ejemplo:
<meta name="keywords" contents="metatags,meta name,meta http-equiv">
No está claro si las palabras deben separarse por comas, espacios, o coma y espacio. Existen diversas teorías al respecto.
Author
El autor del documento. Es la persona con la que querríamos ponernos en contacto por algún asunto relacionado con el documento.
Información sobre el copyright del documento. Por ejemplo:
<meta name="copyright" content="&copy; 2001, Juan R. Pozo" lang="es">
Robots
Controla la acción de los motores indexadores sobre el documento. En general puede tomar uno o más de los siguientes valores: INDEX, NOINDEX, FOLLOW, NOFOLLOW. Además, ALL equivale a INDEX, FOLLOW y NONE equivale a NOINDEX, NOFOLLOW. Por ejemplo:
<meta name="robots" content="NOINDEX, NOFOLLOW">
Los robots no pueden indexar esta página y no pueden recorrerla para buscar nuevos enlaces.
<meta name="robots" content="NOINDEX, FOLLOW">
Los robots no pueden indexar esta página pero sí recorrerla para buscar nuevos enlaces.
<meta name="robots" content="ALL">
Los robots pueden indexar esta página y recorrerla para buscar nuevos enlaces.
Altavista soporta los siguientes valores:
NOINDEX
Ninguna parte de la página puede ser indexada.
NOFOLLOW
El robot no puede recorrer la página para indexar las páginas vinculadas.
NOIMAGEINDEX
Evita que las imágenes sean indexadas, pero el texto puede ser indexado.
NOIMAGECLICK
Evita que se puedan ofrecer vínculos directamente a las imágenes. Sólo se ofrecerán vínculos a la página.
Google soporta el valor NOARCHIVE para evitar que la página sea almacenada en la caché del buscador.
Además de emplear estos metadatos para controlar a los robots a nivel de página, pueden controlarse a nivel de sitio por medio del fichero robots.txt. Se puede encontrar más información en www.robotstxt.org.
Dublin Core
Dublin Core es un estándar de metadatos que define un conjunto de propiedades recomendadas para descripciones bibliográficas electrónicas, y su objetivo es promover la interoperabilidad entre modelos descriptivos dispares. Estas propiedades incluyen entre otras: título, autor, descripción, tema, editor, tipo de recurso, fecha de publicación, idioma, formato, documentos relacionados, derechos de autor, etc. Por ejemplo:

<meta name="DC.Title" content="HTML con Clase - Metadatos">
<meta name="DC.Creator" content="Juan Ramón Pozo">
<meta name="DC.Subject" content="Metadatos">
<meta name="DC.Description" content="Los elementos META de HTML: tipos, funciones, etc.">
<meta name="DC.Publisher" content="ConClase.net">
<meta name="DC.Date" content="2001-06-16">
<meta name="DC.Type" scheme="DCMIType" content="Text">
<meta name="DC.Format.Medium" content="text/html">
<meta name="DC.Relation.isPartOf" content="http://www.conclase.net/">
<meta name="DC.Identifier" content="http://html.conclase.net/articulos/metadatos">
<meta name="DC.Language" content="es">
<meta name="DC.Rights" content="(c) 2001 by Juan R. Pozo. All rights reserved.">

Puede encontrarse toda la información en el sitio web de Dublin Core.

Más información

Hemos intentado que toda la información ofrecida sea lo más fiable posible. En caso de error u omisión os agradeceríamos que os pusierais en contacto con nosotros.

Podéis encontrar más información en los siguientes sitios:

Vancouver-Webpages
Tienen el Diccionario de elementos META más completo.
El tutorial de cachés para autores y administradores de páginas web
Es un documento de lectura indispensable, escrito por Mark Nottingham.
El Marco de Descripción de Recursos (RDF)
El futuro de los metadatos de recursos, desarrollado por el W3C.
Las especificaciones de HTTP 1.0 y HTTP 1.1
Contienen la información más detallada sobre los encabezados HTTP.
La Iniciativa de Metadatos Dublin Core
The Web Robots Pages
El PICS HOWTO de Vancouver-Webpages

© 2001-2003 Juan R. Pozo