On 16 August 2016, he returned to the Czech Republic, signing on the permanent basis with AC Sparta Prague.[4]
On 31 January 2018, he signed a 3.5-year contract with Eredivisie club Vitesse who paid €2.5 million for him.[5]
On 2 September 2019, he signed a 4-year contract with the Russian Premier League champion Zenit St. Petersburg.[6] On 4 April 2023, Karavayev extended his contract with Zenit until the end of the 2025–26 season, with an option for another season.[7]
On 11 May 2021, he was included in the preliminary extended 30-man squad for UEFA Euro 2020.[10] On 2 June 2021, he was included in the final squad.[11] In Russia's opening game against Belgium on 12 June 2021, he substituted injured Yuri Zhirkov late in the first half, as Russia lost 0–3.[12] In the second game against Finland on 16 June, he once again had to come on as a first-half substitute for an injured teammate, this time Mário Fernandes, Russia won the game 1–0.[13] He appeared as a second-half substitute on 21 June in the last group game against Denmark as Russia lost 1–4 and was eliminated.[14]