Le manque de sémantique en HTML4
Le Web sémantique
Pour un de ses théoriciens, Tim Berners-Lee, l'idée est de parvenir à un Web intelligent, où les informations ne seraient plus stockées mais comprises par les ordinateurs, pour apporter à l'utilisateur ce qu'il cherche vraiment. Le Web sémantique permettra donc de rendre le contenu sémantique du Web interprétable non seulement par l'homme, mais aussi par la machine.
L'idée est donc en HTML de structurer le contenu en utilisant les balises les plus appropriées en regard de ce que signifie le contenu.
La sémantique en HTML4
Le langage HTML avant sa version 5 possède déjà plusieurs moyens pour fournir de la sémantique à une page web :
balises de titres h1 à h6 ;
balises d'emphase <em> et de contenu important <strong> ;
balises de citation <quote> et <blockquote> ;
etc.
En réalité, toute balise de HTML non générique (<div> ou <span>) véhicule une sémantique associée.
On verra donc par exemple d'un mauvais œil l'utilisation d'un tableau (balises <table>, <th>...) à des fins de mise en forme (alignement de données), qui devrait être le rôle exclusif du CSS.
Les manques et problèmes associés
Depuis sa création, le langage HTML a pour vocation de structurer le contenu d'une page web. Pourtant, et jusqu'à la version HTML4, les balises de structuration documentaire demeurent peu nombreuses voire inexistantes. En effet, la plupart des pages web combinent des balises div utilisées comme conteneurs (et spécifiées par des ids et classes) avec les balises de titre h1 à h6.
Des problèmes surviennent assez naturellement du fait du manque de structuration des pages alors même que leur contenu - de plus en plus riche - a d'autant plus besoin d'être bien agencé. La transclusion ou inclusion d'un sous-document dans un autre est difficile car il est souvent nécessaire de devoir modifier la hiérarchie des titres. En outre, il n'existe pas de section en HTML4 qui est associée au site en général et non seulement au document (la page web) en cours, comme les menus de navigation, le pied de page principal (avec mentions légales, contact...).
D'autre part, le manque de standard a conduit les développeurs à utiliser leurs classes et ids locaux (header, top, bottom, footer, menu, navigation, main, container, content, article, sidebar, topnav, etc.) pour distinguer leurs éléments, ce qui empêchait les navigateurs ou moteurs d'indexation de tirer de toute page web une structuration documentaire précise.