Ну смотрите, window.onload будет запущен только когда все ресурсы будут загружены. То есть после загрузки шрифтов, изображений, стилей и т.п. Но для показа города вам нужна только карта, и элемент
city_user
Как вариант, поместить код в callback функции ymaps.ready(), он вызовет ваш код, когда будет загружена карта, а сам скрипт поместите после создания элемента city_user, ну или просто создайте его динамически.
Как то так:
<div id="city_user"></div>
<!-- Скрипт ниже элемента -->
<script>
ymaps.ready(() => {
var city = ymaps.geolocation.city;
document.getElementById("city_user").innerHTML = city;
});
</script>
Скрипт будет запущен как только отрендерится элемент, а если это произойдет раньше, чем загрузиться api карты, то подождет.