Если бы вы не писали этот вопрос - сэкономили бы минут 5 на изучение.
По факту - зависит от ваших предыдущих скиллов, от умения разбираться в коде и быстро всё раскладывать по полочкам.
Вы присваиваете значение переменной после успешного выполнения аякс запроса, а возврат значения происходит раньше, т.к. Последовательность действий не дожидается ответа от аякс запроса.
Через location как раз и пробует автор наверняка, потому что как еще в JS? А работает по разному, потому что одни браузеры понимают что это картинка и просто ее показывают, а другие как файл предлагают. В виде решения можно выдавать не прямую ссылку на картинку, а на скрипт php, который читает файл и выдает его с заголовком content-disposition: attachment и нужным именем файла.
А вы уверены, что они не индексируются? Добавьте и подтвердите сайт в яндекс вебмастере и гугл вебмастере, а там есть куча инструментов для отслеживания страниц в индексе, и т.д.
Посмотреть каким алгоритмом (например, через сниффер браузера мониторить запрос) грузится телефон (вероятно это ajax с передачей (как минимум) ID объявления) и запрашивать этот же адрес в вашем скрипте.
P.S. подозреваю, что там наверняка есть защиты, но это надо копаться уже.
Может потому, что браузер прокручивает документ (читай "рассчитывает координату") раньше, чем рендерится нужный (подключенный) шрифт? А когда шрифт отрисовался, браузер уже всё давно сделал.
Попробуйте добавить формат для якоря, чтобы браузер не находил его в коде документа, а по событию загрузки документа и может быть небольшого таймаута, прокручивать документ до нужных координат через JS самому.