For the second day in a row the stage was won by Fabio Aru (Astana) ahead of Ryder Hesjedal (Garmin-Cannondale) with Rigoberto Uran (Etixx-QuickStep) in the mix for third, but all eyes were on Contador (Tinkoff-Saxo) as he fought back from his most vulnerable moment in the race.
Despite the scare the Giro d’Italia race leader had ultimately banked enough time in the earlier stages to emerge largely unscathed by the experience, but his overall time to second placed Aru was cut by 2min 24sec and he will finish the race in Milan with a reduced lead of 3min 14sec.
"Today was not a great stage for me. I wasn't feeling good, probably because of the accumulated effort, but I knew I had a good cushion in the general classification and, even though there were plenty of kilometres to go before the finish, I preferred to ride at my rhythm," Contador said.
"There was never a moment when I thought the jersey was in danger. I maintained my calm because I knew that the difference in speeds between the groups was going to be small. We'll have a good dinner tonight, although I have to watch my weight for the Tour. This Giro d'Italia is in the bag now, with just tomorrow's stage to come, so I'm already thinking of my next target."
Stage 20 of the Giro d'Italia ran 199km from Saint Vincent to Sestriere taking the peleton over the Colle delle Finestre with its nine kilometres of "white roads" (gravel) to the Cima Coppi, the highest point of the Giro.
Julien Berard (AG2R), Marco Bandiera (Androni Giocattoli), Nicola Boem (Bardiani CSF), Aleksejs Saramotins (IAM), Diego Ulissi (Lampre-Merida), Jon Izagirre (Movistar), Giacomo Berlato (Nippo VIni Fantini), Matteo Busato (Southeast) and Ilnur Zakarin (Katusha) set the pace at the head of the race.
For the group the effort was more about soaking up the points from the two intermediate sprints on offer than contesting for the stage victory but some last gasp resistance to the idea of being caught was on display with Zakarin upping his tempo to build a solid 1min 20sec time gap to the peloton by the time he arrived at the nine kilometre section of gravel which broke up the climb.
Already a double stage winner at this year’s Giro, Mikel Landa (Astana) attacked the remaining select group containing Contador, Hesjedal, Aru, Uran, Tanel Kangert (Astana) and Steven Kruijswijk (LottoNL-Jumbo) and eventually joined Zakarin at the crest of Finestre.
It was shortly before Landa bridged to Zakarin that Contador appeared to crack under the pressure applied by Hesjedal and the others. He quickly lost touch with those who only minutes ago he looked like dominating.
The explosion by the race leader created two key groups on the road but Landa, Zakarin (who was later dropped), Hesjedal, Aru, Uran and Kruijswijk eventually merged as one with six kilometres to the summit at Sestriere as Contador set about managing his difficulties.
Aru made his winning move with two kilometres to go and rode on solo to claim his second win in as many days despite desperate attempts by Hesjedal and Uran to recover the lost ground.
"We worked at the front all stage. Landa was very strong, and he has done exceptional work for the team these days," Aru said.
"I suffered a lot on the Colle delle Finestre but then rejoined Mikel on the descent. This is my second stage win in two days and it still hasn't sunk in, especially after so many days of suffering. I come to Sestriere to train, and I"m very attached to the town, so this win is special for that reason, too."
Stage 20: 199km, Saint-Vincent - Sestriere
1 Fabio Aru (ITA) Astana 5hr 12min 25sec
2 Ryder Hesjedal (CAN) Cannondale-Garmin 0:00:18
3 Rigoberto Uran (COL) Etixx-QuickStep 0:00:24
4 Mikel Landa Meana (ESP) Astana
5 Steven Kruijswijk (NED) LottoNL-Jumbo 0:00:34
6 Alberto Contador (ESP) Tinkoff-Saxo 0:02:25
7 Tanel Kangert (EST) Astana 0:02:28
8 Franco Pellizotti (ITA) Androni Giocattoli
9 Leopold Konig (CZE) Sky
10 Diego Rosa (ITA) Astana
1 Alberto Contador (ESP) Tinkoff-Saxo 84hr 3min 30sec
2 Fabio Aru (ITA) Astana 00:02:02
3 Mikel Landa (ESP) Astana 00:03:14
4 Andrey Amador (CRC) Movistar 00:08:19
5 Ryder Hesjedal (CAN) Cannondale-Garmin 00:09:52
6 Leopold Konig (CZE) Sky 00:10:50
7 Steven Kruijswijk (NED) LottoNL-Jumbo 00:11:02
8 Damiano Caruso (ITA) BMC 00:12:17
9 Alexandre Geniez (FRA) FDJ 00:16:00
10 Yury Trofimov (RUS) Katusha 00:16:23