Sobre este problema HTML
O atributo xmlns declara o namespace XML para um documento. O valor http://www.w3.org/TR/REC-html40 é um URL que aponta para a especificação antiga da Recomendação HTML 4.0 — nunca foi um identificador de namespace XML adequado. Provavelmente acabou no código através de confusão entre URLs de DTD/especificação e URIs de namespace reais, ou por copiar marcação de templates desatualizados.
Na especificação HTML5 (o WHATWG HTML Living Standard), o atributo xmlns no elemento <html> é opcional. Quando presente, o seu valor deve ser exatamente http://www.w3.org/1999/xhtml — nenhum outro valor é permitido. Isto é verdade independentemente de o documento ser servido como text/html ou application/xhtml+xml.
Por que isto importa
- Falha de validação: O validador W3C rejeitará o documento porque o valor do namespace não é um dos valores permitidos.
- Conformidade com padrões: Usar um namespace incorreto pode fazer com que parsers XML interpretem mal ou rejeitem o documento, especialmente quando servido com um tipo de conteúdo XML.
-
Confusão de legado: O URL
http://www.w3.org/TR/REC-html40é uma referência de especificação, não um namespace. Namespaces e URLs de especificação servem propósitos fundamentalmente diferentes nos padrões web.
Como corrigir
A correção mais simples para um documento HTML5 padrão é remover completamente o atributo xmlns. O parser HTML não o requer, e os browsers processarão o documento corretamente sem ele.
Se o seu documento for servido como XHTML (application/xhtml+xml), ou se você tiver uma razão específica para incluir a declaração de namespace, atualize o valor para o único permitido: http://www.w3.org/1999/xhtml.
Exemplos
❌ Incorreto: URL antigo do HTML 4.0 usado como namespace
<!DOCTYPE html>
<html xmlns="http://www.w3.org/TR/REC-html40" lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
✅ Opção de correção 1: remover o atributo xmlns (recomendado para HTML5)
Para a maioria dos documentos HTML5 servidos como text/html, simplesmente omita o atributo:
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
✅ Opção de correção 2: usar o valor de namespace correto
Se você precisar do atributo xmlns (por exemplo, para serialização XHTML), defina-o para o único valor permitido:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
Outros valores incorretos a observar
Este mesmo erro pode aparecer com outros URLs de namespace inválidos. Todos os seguintes estão errados:
-
http://www.w3.org/TR/REC-html40(URL de especificação HTML 4.0) -
http://www.w3.org/TR/html4/(outro URL de especificação HTML 4) -
http://www.w3.org/1999/html(namespace inexistente)
O único valor válido é http://www.w3.org/1999/xhtml. Em caso de dúvida, remova completamente o atributo xmlns — documentos HTML5 modernos não precisam dele.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.