Perhaps obvious, but the C preprocessor can do the job.
index._html
#define _em(a) <em> a </em>
#define _image(a, b) <img src="a" b/>
#define _list(a, b, c) <h1> a </h1> \
<ul> \
    <li> b </li> \
    <li> c </li> \
</ul>
<!-- ___________________________________________________ -->
<!doctype html>
<html> 
#define _theTile The Bar Title
#include "head._html"
<body>
_list(foo, bar, bean)
This is really _em(great)
_image(media/cat.jpg, )
_image(media/dog.jpg, width="25%" height="10px")
</body>
</html>
Being head._html
<head>
    <meta charset="utf-8"/>
    <title> _theTile </title>
    <!-- more stuff ... -->
</head>
Then, 
cpp -P index._html > index.html
produces:
<!doctype html>
<html> 
<head>
    <meta charset="utf-8"/>
    <title> The Bar Title </title>
    <!-- more stuff ... -->
</head>
<body>
<h1> foo </h1> <ul>     <li>  bar </li>     <li>  bean </li> </ul>
This is really <em> great </em>
<img src="media/cat.jpg"  />
<img src="media/dog.jpg"  width="25%" height="10px"/>
</body>
</html>