This doesn’t entirely speak to your question, but <product>
isn’t semantic as far as computers are concerned.
A human can read it and think “Aha, this must be a product, which in the context of this shopping website means something I can buy, and therefore doesn’t mean ‘a quantity obtained by multiplying quantities’ as it might do on mathoverflow.com”. That’s genuinely useful for any human reading the code, so it’s semantic in that sense.
But as far as a computer parsing your page as HTML is concerned (or a human viewing your HTML page in a browser instead of reading the code), it’s just an unknown tag, and thus won’t get any useful default styling (unlike the <p>
tag, which gets nice margins to make things readable on-screen) or behaviour (unlike the <a>
tag, which is clickable if you give it a href
attribute).
Computers only get semantics when people agree what tags mean, via specs like HTML5.