Every time I audit a codebase, I find <div> elements doing jobs that HTML already has elements for. Divs styled as buttons. Spans used as links. Custom dropdown menus built from scratch. Each one requires extra ARIA, extra JavaScript, and extra testing to reach the baseline that the native element provides for free.
The First Rule of ARIA
The W3C's first rule of ARIA use is: don't use ARIA if you can use a native HTML element instead. This is not a style preference — it's because native elements come with built-in accessibility semantics, keyboard behavior, and browser support that ARIA can only approximate.
A <button> is focusable by default. It fires on Enter and Space. It has an implicit role of button. It announces its label to screen readers. A <div role="button" tabindex="0"> can replicate this, but you have to wire up the keyboard events yourself, and you will miss edge cases.
The Elements Worth Knowing
<main> — landmark region for primary content. Screen reader users can jump directly to it.
<nav> — landmark for navigation. Multiple <nav> elements should have aria-label to distinguish them.
<article> — self-contained content that makes sense in isolation. Blog posts, cards, comments.
<section> — thematic grouping within a page. Should have a heading.
<button> — anything that triggers an action. Not <a> (that's navigation), not <div>.
<label> — always associate form inputs with a label. Not placeholder text — a label.
The Test
Disable CSS entirely and look at your page. Does it still make structural sense? Can you tell what the page is about, what the navigation options are, where the main content is? If not, the HTML structure needs work.