Ваш код очень бажный. Во-первых, вы не проверяете результат выполнения indexOf и проверка работает ровно наоборот. Во-вторых, значение поискового поля вы добавляете не в виде get-параметра, а прямо в тело адреса, что снова делает предыдущую проверку нерабочей. Ну и наконец, даже если всё это исправить, у вас всё равно будет баг - любой get-параметр, название которого заканчивается на "q", будет попадать под условие и подстановка не произойдёт.
Максимально тупое решение в лоб с перезагрузкой страницы:
if (
window.location.search.indexOf('?q=') === -1 &&
window.location.search.indexOf('&q=') === -1
) {
window.location.search += (window.location.search ? '&' : '?' ) + 'q=' + searchInput.value;
}
В современном же js есть куда более удобные инструменты для решения этой задачи:
https://developer.mozilla.org/en-US/docs/Web/API/U...
https://developer.mozilla.org/ru/docs/Web/API/Hist...