div из a все-равно вывалится, т.к. в a не может быть многих элементов (блочных в основном). Я обычно в таких случаях, когда внутри a должно быть много контента, делаю ссылку с абсолютным позиционированием, растянутой на весь блок, и располагаю ее в самом начале.
<div>
<a href="#"></a>
<img src='...'>
<p> text</p>
</div>
Не знаю, насколько это корректно с ъ-точки зрения, но это более логично в данном случае.
А если в ссылке будет
только img и p, то можно даже не оборачивать все это в div, чтобы не создавать лишний уровень вложенности, а просто вложить в тэг a.
<a href="#">
<img src='... >
<p>text</p>
</a>