Вообще говоря, это абсолютно стандартная ситуация. Наилучшим способом ее решения является использование паттерна MVC. Для Вашего случая (как я понимаю Вы только начинаете создавать сайты) есть простейший прием.
Любая страница Вашего сайта имеет структуру:
<!DOCTYPE html>
<html lang="en"> <!-- Здесь можно lang="ru" -->
<head>
Здесь Вы даете глобальные настройки meta, подключаете JavaScript и CSS модули, выводите титул страницы
<head>
<body>
<header>
Код Вашего хэдера
</header>
Контент страницы
<footer>
Код Вашего футера
</footer>
</body>
</html>
Поскольку хэдер и футер выводятся одинаковыми на всех страницах, было бы логично сделать их одни раз, а потом подключать на каждой странице.
Делается это просто, с помощью PHP: создаете 2 отдельных файла, например, header.html и footer.html, в которые помещаете html-коды хэдера и футера, соответственно.
Для хэдера прописываете простую конструкцию внутри тэгов :
<?php include("путь_к_файлу_header.html/header.html") ?>
Ясен пень, что путь_к_файлу_header.html указываете свой. Если файлы хэдера и футера хранятся там же, где index.html, пишете просто
include header.html
.
Для футера - аналогично.
Таким образом, изменяя только контент страницы Вы получаете неограниченное количество страниц сайта на одном и том жже шаблоне.