А какой правильный принцип построения html страницы?
Вы правы: через iframe блоки сайта никто не соединяет уже лет 20. В современных сайтах блоки хедера, футера, меню, контента верстаются отдельно и собираются в одну страницу, а вот каким образом тут уже есть варианты:самый простой - на уровне вебсервера с использованием SSI(Server Side Includes), но используется сравнительно редко;самый распространенный - когда бекэнд на лету собирает страницу перед отдачей клиенту, но это не ваш вариант;для статических же сайтов обычно используют либо "генераторы статических сайтов", либо настроенную систему сборки типа webpack/gulp, которая собирает css/js/html "блоки" в единое целое.
Так же сейчас популярны SPA(Single Page Application) сайты, в случае визиток инфа сразу же загружается со страницей, а там уже "разбивается" на разделы с помощью верстки/js/css, в случае чего-то более динамического инфа подгружаться на лету с помощью js.
У меня была идея, чтобы сайт состоял из одного index.html файла. А остальные страницы загружались бы в div при помощи JavaScript. Но как мне кажется, в этом случае будет не очень удобно править ошибки ... 
Пробуйте моё творение: includeHTML (я использую для SPA)