Let's consult the spec.
What is an <a>
element?
If the a element has an href attribute, then it represents a hyperlink (a hypertext anchor) labeled by its contents.
If the a element has no href attribute, then the element represents a placeholder for where a link might otherwise have been placed, if it had been relevant, consisting of just the element's contents.
What about a <button>
element?
The button element represents a button labeled by its contents.
So what does this mean?
If you're representing an actual link in your navigation (even if it's using the HTML5 History API), I say use an <a>
element. If you're not, using a <button>
might be better.
For navigation, I'd probably use an a
tag.
Semantic HTML is not the only issue here
Another issue is SEO, crawlers like GoogleBot will have a much easier time figuring out they should follow a
links than button
s.