Sobre este problema HTML
O elemento <meta> é mais comummente usado dentro da secção <head> para definir metadados como codificação de caracteres, definições de viewport ou descrições. Dentro do <head>, atributos como charset, http-equiv e name são perfeitamente válidos. No entanto, a especificação HTML também permite que o <meta> apareça dentro do <body> — mas apenas sob condições específicas.
Quando um elemento <meta> aparece no <body>, deve ter um atributo itemprop (para microdata) ou um atributo property (para RDFa). Deve também ter um atributo content. Adicionalmente, não pode usar atributos http-equiv, charset ou name neste contexto. Estas regras existem porque a única razão válida para colocar uma tag <meta> no <body> é incorporar metadados legíveis por máquinas como parte de uma anotação de dados estruturados — não para definir metadados ao nível do documento.
Porque é que isto é importante
-
Conformidade com normas: O padrão HTML living standard restringe explicitamente quais atributos o
<meta>pode usar dependendo do seu posicionamento. Violar isto produz HTML inválido. -
Comportamento do navegador: Os navegadores podem ignorar ou interpretar incorretamente elementos
<meta>que aparecem no<body>sem os atributos adequados. Por exemplo, uma tag<meta http-equiv="content-type">dentro do<body>não terá efeito na codificação de caracteres, uma vez que isso deve ser determinado antes do corpo ser analisado. -
SEO e dados estruturados: Os motores de busca dependem de microdata e RDFa corretamente estruturados. Um elemento
<meta>no corpo semitempropoupropertynão contribuirá para quaisquer dados estruturados e não serve nenhum propósito útil.
Causas comuns
-
Tags
<meta>mal colocadas: Um elemento<meta>destinado ao<head>(como<meta http-equiv="...">ou<meta name="description">) foi acidentalmente colocado dentro do<body>. Isto pode acontecer devido a uma tag<head>não fechada, um CMS a inserir tags no local errado, ou simplesmente a copiar markup para a secção errada. -
itempropoupropertyem falta: Um elemento<meta>dentro do<body>está a ser usado para dados estruturados mas está a faltar o atributoitempropoupropertynecessário.
Exemplos
Incorreto: <meta> com http-equiv dentro do <body>
Esta tag <meta> pertence ao <head>, não ao <body>:
<body>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<form>
<input type="text" name="q">
</form>
</body>
Corrigido: mover o <meta> para o <head>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>My Page</title>
</head>
<body>
<form>
<input type="text" name="q">
</form>
</body>
Incorreto: <meta> no <body> sem itemprop ou property
<div itemscope itemtype="https://schema.org/Offer">
<span itemprop="price">9.99</span>
<meta content="USD">
</div>
O elemento <meta> está a faltar o atributo itemprop, por isso o validador reporta o erro.
Corrigido: adicionar o atributo itemprop
<div itemscope itemtype="https://schema.org/Offer">
<span itemprop="price">9.99</span>
<meta itemprop="priceCurrency" content="USD">
</div>
Correto: usar property para RDFa
O atributo property também é válido para elementos <meta> no <body> quando se usa RDFa:
<div vocab="https://schema.org/" typeof="Event">
<span property="name">Concert</span>
<meta property="startDate" content="2025-08-15T19:00">
</div>
Incorreto: <meta name="..."> dentro do <body>
O atributo name é apenas válido em elementos <meta> dentro do <head>:
<body>
<meta name="author" content="Jane Doe">
<p>Welcome to my site.</p>
</body>
Corrigido: movê-lo para o <head>
<head>
<title>My Site</title>
<meta name="author" content="Jane Doe">
</head>
<body>
<p>Welcome to my site.</p>
</body>
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.