Твой код отработает только до первой перезагрузки страницы (до первой смены location.href). Дальше страница загружается с чистого листа и скрипт начинает работать с самого начала. И к тому же нельзя дублировать функции с одним именем! И в setTimeout плохо передавать строку!
Попробуй так:
<? $page = isset($_GET['page']) ? (int) $_GET['page'] : 0 ?>
setTimeout(function() {
location.href = "site.ru/admin/list.php?page=<?=++$page?>"
}, 20000);