Dlaczego rozdzieliłeś obie części kodu JavaScript? Być może to jest powód ich niezależnego wywołania i złego działania strony?
Dlaczego w PHP “obce wstawki” kodujesz przy pomocy echo, zamiast zamknąć znacznik “?>”, wstawić właściwy kod - tu skrypt w JS (jest to o wiele czytelniejsze) - a potem znów otworzyć znacznik “<?php”?
Dlaczego w drugiej części używasz funkcji setTimeout z opóźnieniem 0 - czyli natychmiastowe uruchomienie - nie lepiej (i prościej) jest użyć bezpośredniej konstrukcji? No chyba, że chcesz dać opóźnienie przekierowania, to podajesz wartość w milisekundach.
To nie ma znaczenia czy to będzie w dwóch osobnych tagach script.
Teraz działa to tak, że alert tylko blokuje do czasu jego zamknięcia odświeżenie strony, ale skrypt się wykonuje migiem cały, razem z tym location.href.