The stage win went to Mikel Nieve (Mitchelton-Scott), who powered away from his fellow escapees with just over 30 kilometres remaining of the 214km stage from Susa to Cervina.
Robert Gesink (LottoNL-Jumbo) and Felix Großschartner (Bora-Hansgrohe) managed to maintain a lead on the peloton, finishing second and third respectively – whilst Chris Froome (Team Sky) fought off attacks from Tom Dumoulin (Sunweb) to hold on to pink.
An early break of five went with 20km of racing covered, and this swelled to become a bunch of 27.
However, on the slopes of the opening climb, the group splintered. Eventually – three riders were in the lead – Nieve included.
Keen to rectify his team’s Giro performance following the loss of the pink jersey, after Simon Yates (Mitchelton-Scott) cracked on the slopes of stage 19, Nieve made a move that would stick at the 32km to go mark.
In the peloton behind, Astana drove the pace, working for Miguel Angel Lopez – who entered the stage in fourth on the GC, behind Thibaut Pinot (Groupama-FDJ). Despite support from team mates, Pinot could not hold the pace – and eventually lost contact allowing Lopez to move into third place in the standings.
With 15km remaining, Nieve had accumulated a lead of 8 minutes 50 seconds on the peloton. Though that gap did slip in the final kilometres, it was enough for him to cross the line solo, 2-17 ahead of second place Gesink.
The battle for pink was hard fought, with Dumoulin attempting to crack Froome during the final 6km. Froome, however, was always able to match the pace, almost distancing the Dutch man on several occasions.
In the end, Froome crossed the line 6 seconds ahead of the defending champion, meaning Froome rides into Rome in pink.