Skip to main content
Validação HTML

Valor inválido para o atributo “href” no elemento “a”: Carácter ilegal no fragmento: “#” não é permitido.

Sobre este problema HTML

Num URL, o carácter # tem um papel especial: atua como o delimitador que separa o URL principal do identificador de fragmento. O fragmento geralmente aponta para uma secção específica ou elemento dentro do documento de destino, frequentemente correspondendo ao atributo id de um elemento. Porque # serve este propósito reservado, não pode aparecer mais do que uma vez na sua forma bruta dentro de um URL. Quando o validador encontra algo como ##pricing ou section#one#two, marca os caracteres # extra como ilegais.

Esta questão geralmente surge de um destes cenários comuns:

  • Erros de escrita — digitar acidentalmente ## em vez de #.
  • Bugs de concatenação de strings — construir URLs programaticamente onde um # é incluído tanto no URL base quanto anexado ao valor do fragmento.
  • Erros de copiar-colar — duplicar o # ao copiar URLs das barras de endereço do navegador ou outras fontes.
  • # literal pretendido no fragmento — se realmente precisar de um símbolo # dentro do texto do fragmento, deve ser codificado por percentagem como %23.

Isto é importante porque os navegadores podem lidar com URLs mal formados de forma inconsistente. Alguns navegadores removem silenciosamente o # extra, enquanto outros podem falhar ao navegar para o fragmento pretendido. URLs mal formados também causam problemas para tecnologias assistivas, rastreadores web e qualquer ferramenta que analise links. Manter os seus URLs bem formados garante comportamento previsível em todos os agentes de utilizador e cumpre com o URL Standard e a especificação HTML.

Exemplos

Incorreto: # duplicado no URL

O duplo ## torna o identificador de fragmento inválido:

<a href="https://example.com/faqs##pricing">Pricing</a>

Correto: delimitador # único

Remova o # extra para que pricing seja o fragmento:

<a href="https://example.com/faqs#pricing">Pricing</a>

Incorreto: # extra dentro do fragmento

Aqui, a porção do fragmento overview#details contém um # bruto, que não é permitido:

<a href="/docs#overview#details">Details</a>

Correto: codificar o # literal por percentagem

Se realmente precisar de um # como parte do texto do fragmento, codifique-o como %23:

<a href="/docs#overview%23details">Details</a>

Na maioria dos casos, porém, este padrão sugere que a estrutura do URL deve ser repensada. Uma abordagem mais limpa é fazer link diretamente para o fragmento pretendido:

<a href="/docs#details">Details</a>

Incorreto: erro de concatenação programática

Um bug comum em templates ou JavaScript é anexar # quando a variável já o inclui:

<!-- Se definido como fragment = "#pricing", isto produz um duplo ## -->

<a href="https://example.com/faqs#pricing">Pricing</a>

Correto: garantir que apenas um # está presente

Certifique-se de que ou o URL base ou a variável de fragmento inclui o #, mas não ambos:

<a href="https://example.com/faqs#pricing">Pricing</a>

Links apenas de fragmento

Links apenas de fragmento (links para secções dentro da mesma página) seguem a mesma regra — apenas um #:

<!-- Incorreto -->

<a href="##contact">Contact Us</a>

<!-- Correto -->

<a href="#contact">Contact Us</a>

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.