HTML (ou talvez apenas XHTML?) É relativamente restrito quando se trata de atributos não padrão em tags. Se eles não fazem parte das especificações, seu código é considerado não compatível.
No entanto, atributos não padrão podem ser bastante úteis para passar metadados para Javascript. Por exemplo, se um link deve mostrar um pop-up, você pode definir o nome do pop-up em um atributo:
<a href="#null" class="popup" title="See the Popup!"
popup_title="Title for My Popup">click me</a>
Como alternativa, você pode armazenar o título do pop-up em um elemento oculto, como um intervalo:
<style>
.popup .title { display: none; }
</style>
<a href="#null" title="See the Popup!" class="popup">
click me
<span class="title">Title for My Popup</span>
</a>
No entanto, estou indeciso quanto a qual deveria ser o método preferido. O primeiro método é mais conciso e, suponho, não estraga tanto os motores de busca e leitores de tela. Por outro lado, a segunda opção torna o armazenamento de grandes quantidades de dados mais fácil e, portanto, mais versátil. Também é compatível com os padrões.
Estou curioso para saber quais são os pensamentos desta comunidade. Como você lida com uma situação como essa? A simplicidade do primeiro método supera as desvantagens potenciais (se houver)?