Skip to main content
Validação HTML

Valor inválido “X” para o atributo “async” no elemento “script”.

Sobre este problema HTML

A especificação HTML define atributos booleanos como atributos cuja presença indica um estado true e cuja ausência indica false. De acordo com o padrão WHATWG HTML, um atributo booleano pode ter apenas três representações válidas:

  • O nome do atributo sozinho (ex.: async)
  • O atributo com um valor de string vazio (ex.: async="")
  • O atributo com um valor que corresponde ao seu próprio nome, sem distinção de maiúsculas e minúsculas (ex.: async="async")

Qualquer outro valor — como async="true", async="1", async="yes", ou async="false" — é HTML inválido e irá gerar este erro de validação. Este é um equívoco comum porque os programadores frequentemente assumem que os atributos booleanos funcionam como valores booleanos nas linguagens de programação, onde você atribuiria true ou false.

Porque isto é importante

Embora a maioria dos navegadores seja tolerante e trate qualquer valor de async como o estado true (uma vez que o atributo está presente independentemente do seu valor), usar valores inválidos cria vários problemas:

  • Conformidade com padrões: HTML inválido pode causar problemas com analisadores rigorosos, validadores, ou ferramentas que processam a sua marcação.
  • Intenção enganadora: Escrever async="false" não desativa o comportamento async — o atributo ainda está presente, então o navegador trata-o como ativado. Isto pode levar a bugs confusos onde um script se comporta de forma assíncrona mesmo quando o programador pretendia o contrário.
  • Manutenibilidade: Outros programadores que leiam o código podem interpretar mal async="false" como realmente desativando o carregamento async.

Para desativar o comportamento async, você deve remover o atributo completamente em vez de defini-lo como "false".

Como o async funciona

Para scripts clássicos com um atributo src, o atributo async faz com que o script seja obtido em paralelo com a análise HTML e executado assim que estiver disponível, sem esperar que o documento termine de ser analisado.

Para scripts de módulo (type="module"), o atributo async faz com que o módulo e todas as suas dependências sejam obtidos em paralelo e executados assim que estiverem prontos, em vez de esperar até que o documento tenha sido analisado (que é o comportamento adiado padrão para módulos).

Exemplos

❌ Inválido: valores arbitrários no async

<!-- Incorreto: "true" não é um valor de atributo booleano válido -->

<script async="true" src="app.js"></script>

<!-- Incorreto: "1" não é um valor de atributo booleano válido -->

<script async="1" src="analytics.js"></script>

<!-- Incorreto: "yes" não é um valor de atributo booleano válido -->

<script async="yes" src="tracker.js"></script>

<!-- Incorreto e enganador: isto NÃO desativa o async -->

<script async="false" src="app.js"></script>

✅ Válido: uso correto de atributo booleano

<!-- Preferido: nome do atributo sozinho -->

<script async src="app.js"></script>

<!-- Também válido: valor de string vazio -->

<script async="" src="app.js"></script>

<!-- Também válido: valor que corresponde ao nome do atributo -->

<script async="async" src="app.js"></script>

<!-- Forma correta de desativar o async: remover o atributo -->

<script src="app.js"></script>

✅ Válido: async com scripts de módulo

<script async type="module" src="app.mjs"></script>

<script async type="module">
  import { init } from './utils.mjs';
  init();
</script>

Esta mesma regra aplica-se a todos os atributos booleanos em HTML, incluindo defer, disabled, checked, required, hidden, e outros. Em caso de dúvida, use o nome do atributo sozinho sem valor — é a forma mais limpa e mais amplamente reconhecida.

Encontre problemas como este automaticamente

O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.