According to specification, there should not be flow content inside of buttons and links, only phrasing content.
Even though using a span and setting role=heading
does not flag as an error in the HTML5 validator, it is semantically confusing. For example, what is a heading link or a heading button? Is it a link? a button? a heading? Screen readers will report more than one role, which could be confusing.