Суть
Оба — нейтральные контейнеры без семантики.
<div> — block по умолчанию (новая «коробка» на всю ширину).
<span> — inline (кусок внутри строки текста).
<div class="card">...</div>
<p>Текст с <span class="hl">акцентом</span>.</p>
Если есть смысл — берите section/article/nav и т.д., а не div.
Итог: div — блочная обёртка, span — строчная; смысл им нужно давать классами/ARIA только если нет подходящего тега.