Sobre este problema HTML
O atributo http-equiv no elemento <meta> foi concebido para simular certos cabeçalhos de resposta HTTP diretamente em HTML. No entanto, a especificação HTML apenas permite um conjunto específico de valores: content-type, default-style, refresh, x-ua-compatible, e content-security-policy. Usar Expires como valor para http-equiv irá desencadear um erro de validação porque fica fora deste conjunto permitido.
Historicamente, alguns navegadores mais antigos e versões HTML eram mais permissivos sobre quais valores podiam aparecer em http-equiv, e os programadores comummente usavam <meta http-equiv="Expires" content="0"> ou padrões similares para tentar prevenir o cache de páginas. No entanto, esta abordagem nunca foi fiável — navegadores e proxies de cache lidam com cabeçalhos HTTP reais muito mais consistentemente do que equivalentes de etiquetas <meta>. O HTML moderno proíbe formalmente este valor.
Além da conformidade com as normas, existem razões práticas para evitar este padrão. Muitos navegadores simplesmente ignoram valores http-equiv não reconhecidos, o que significa que a etiqueta não faz nada útil. O comportamento de cache é melhor controlado ao nível HTTP, onde servidores, CDNs e proxies todos leem e respeitam os cabeçalhos. Confiar numa etiqueta <meta> para cache dá uma falsa sensação de controlo enquanto entulha o seu markup com código inválido.
Para corrigir este problema, remova a etiqueta <meta http-equiv="Expires" ...> do seu HTML e configure o cabeçalho HTTP Expires ou Cache-Control no seu servidor web.
Exemplos
Incorreto: Usar Expires em http-equiv
Isto desencadeia o erro de validação:
<head>
<meta charset="UTF-8">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Expires" content="Tue, 01 Jan 2025 00:00:00 GMT">
<title>My Page</title>
</head>
Correto: Remover a etiqueta <meta> inválida
Simplesmente remova a etiqueta problemática. Use apenas valores http-equiv válidos:
<head>
<meta charset="UTF-8">
<title>My Page</title>
</head>
Correto: Usos válidos de http-equiv
Para referência, aqui estão exemplos de valores http-equiv válidos:
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="30">
<meta http-equiv="content-security-policy" content="default-src 'self'">
<meta http-equiv="default-style" content="main-stylesheet">
<title>My Page</title>
</head>
Correto: Definir expiração de cache através da configuração do servidor
A forma adequada de controlar cache é através de cabeçalhos de resposta HTTP configurados no seu servidor.
Apache (.htaccess ou configuração do servidor):
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 1 day"
</IfModule>
Ou usando Cache-Control com mod_headers:
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Expires "0"
</IfModule>
Nginx:
location ~* \.html$ {
expires 1d;
add_header Cache-Control "public, no-transform";
}
Para prevenir completamente o cache no Nginx:
location ~* \.html$ {
expires -1;
add_header Cache-Control "no-store, no-cache, must-revalidate";
}
Se não tiver acesso à configuração do servidor, muitas linguagens do lado do servidor permitem definir cabeçalhos programaticamente. Por exemplo, em PHP:
<?php
header("Expires: Tue, 01 Jan 2030 00:00:00 GMT");
header("Cache-Control: public, max-age=86400");
?>
Ao lidar com a expiração de cache ao nível do servidor, você obtém comportamento fiável em todos os navegadores, proxies e CDNs — enquanto mantém o seu HTML limpo e em conformidade com as normas.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.