Programming languages are those that allow a programmer to control the expression of algorithms. It is the lack of control that disqualifies HTML as a programming language. It comes down to level of control. HTML does allow you to trigger things to occur such as have words and pictures drawn on a screen. By itself, you cannot use HTML to solve the traveling salesman problem or do a binary search or iterate an arbitrary data structure. The ability to solve those problems alone does not define a programming language. However, by itself, HTML lacks the algorithmic capabilities available in imperative and functional programming languages.
What is HTML? A type of data structure interpreted by a web browser.
A programming language is a singular specification. Although you can converge HTML+CSS to achieve a Turing complete result, the key factor is the combination of data structures to produce a side effect natural to imperative or functional languages. There is such a thing as data-oriented programming and it is a way of using data with programming languages. HTML is data that must be interpreted by other means.
More Details on This Topic
StackOverflow | Is HTML Considered a Programming Language?
Tampere University | Programs vs. Markup or Why HTML authoring is Not a Programming