Победа под Любечем не окончила борьбу со Святополком: вскоре тот подступил к Киеву с печенегами, а в 1018 году польский король Болеслав Храбрый, приглашённый Святополком, разбил войска Ярослава на берегах Буга, захватил в Киеве сестёр, жену Анну и мачеху Ярослава и, вместо того чтобы передать город («стол») мужу своей дочери Святополку, сам сделал попытку утвердиться в нём. Но киевляне, возмущённые неистовствами его дружины, начали убивать поляков, и Болеслав должен был поспешно оставить Киев, лишив Святополка военной помощи. А Ярослав, вернувшись после поражения в Новгород, приготовился бежать «за море». Но новгородцы во главе с посадником Константином Добрыничем, изрубив суда князя, сказали ему, что хотят биться за него против Болеслава и Святополка. Они собрали деньги, заключили новый договор с варягами конунга Эймунда и сами вооружились. Весной 1019 года это войско во главе с Ярославом осуществило новый поход на Святополка. В битве на реке Альте Святополк был разбит, его знамя захвачено, сам он был ранен, но бежал. Конунг Эймунд спросил у Ярослава: «прикажете ли убить его, или нет?», — на что Ярослав дал своё согласие: