Chris Froome (Team Sky) made amends for losing time on Wednesday's stage to Los Machucos by distancing Vincenzo Nibali (Bahrain-Merida) on the final climb of stage 18 to extend his lead out to 1-37 on a stage won by Sander Armée (Lotto-Soudal) from the day's early break.
The red jersey had come under pressure on two of the day's three earlier climb, as Ilnur Zakarin (Katusha-Alpecin) and Alberto Contador (Trek-Segafredo) launched a number of attacks, before Fabio Aru (Astana) was able to get away with around 40km remaining.
Aru was never going to be able to catch the day's early break, which took the stage win as Armée distanced Alexey Lutsenko (Astana) on the final climb to take the first victory of his professional career, but did stand a chance of moving up the general classification as he held a lead of 1-30 over the chasing group going onto the two-kilometre final climb.
By the line, that duo had nearly caught Aru, but, more importantly for Froome, had distanced the other GC contenders, including second-place overall Vincenzo Nibali who conceded 21 seconds.
How it happened
With a high chance of the breakaway succeeding on the stage to Santo Toribio de Liébana, the start of the stage was conducted at a blistering pace as the GC teams tried to control who made it into the move.
In the end it took more than 60km for the break to get away, with no fewer than 20 riders in the move: Julian Alaphilippe and Matteo Trentin (Quick-Step Floors), Alessandro De Marchi (BMC Racing), Magnus Cort Nielsen (Orica-Scott), Nelson Oliveira and Marc Soler (Movistar), Patrick Konrad (Bora-Hansgrohe), Clément Chevrier and Alexis Gougeard (Ag2r-La Mondiale), Toms Skujins (Cannondale-Drapac), Antwan Tolhoek (LottoNL-Jumbo), Matej Mohoric (UAE Team Emirates), Alexey Lutsenko (Astana), Sander Armée (Lotto-Soudal), Giovanni Visconti (Bahrain-Merida), Jeremy Maison and Anthony Roux (FDJ), Stephane Rossetto (Cofidis), Sergio Pardilla (Caja Rural-Seguros), and Aldemar Reyes (Manzana-Postobon).
With Pardilla the best placed rider on GC at more than 24 minutes back, Team Sky seemed content for the break to get away and contest the stage win, spreading across the front of the bunch to allow the escape to steadily built a large gap of more than 10 minutes.
The lead was approaching 13 minutes with 46km remaining, when Katusha-Alpecin went to the front of the peloton en masse in an attempt to pull Ilnur Zakarin clear.
Five riders were alongside Zakarin and quickly opened a gap of around 10 seconds over the peloton. However the move was short-lived as Team Sky and Bahrain-Merida, working for Froome and Nibali respectively, made the junction.
However that wasn't the end of the GC drama as Luis Leon Sanchez to set up a move by Fabio Aru, who went over the top of his team-mate to go clear solo onto the descent off the Collada de Ozalba.
Aru quickly gained a minute, and on the following climb, the Collada de la Hoz, there were more attacks as Contador went on the attack.
The Spaniard, up to fifth overall after his performance on Los Machucos on stage 17, sprung clear with Miguel Angel Lopez in his wake, but was steadily closed down by Gianni Moscon at the head of four Sky riders including Froome.
The upper slopes of the day's penultimate climb had split the break, with Armée, Gougeard, Soler, Alaphilippe, and Lutsenko going clear, and they also presented another opportunity for Contador, who once again tried to attack but was not allowed to open a gap as the other GC hopefuls quickly jumped on his wheel.
The run-in to the final climb saw Armée and Lutsenko go clear, while Aru was able to continue to open his advantage over the red jersey group.
Lutsenko led onto the final climb, but it was Armée who launched the final attack, surging clear in the final 500m to drop his Kazakh rival and take his first professional win.
The stage win decided, eyes then turned to the battle for GC, where Aru continued to work hard to hold his lead onto the final climb while Sky continued to set the pace on the front of the main GC group.
Aru led by 1-20 at the base of the final climb, but that lead was quickly trimmed as Trek-Segafredo sought to light up the road and set up a possible move by Contador.
However Team Sky wouldn't be having any of that as Gianni Moscon moved up to keep the pace high and prevent any attack, before Froome took over with 600m remaining.
Contador was in the wheel of the red jersey, along with Michael Woods, and then moved to the front as Nibali, Kelderman, and Zakarin were all in difficulty.
By the line Contador, Froome, and Woods had almost managed to catch Aru, whose long distance breakaway had yielded only minimal rewards, while Nibali struggled through the final 500m to lose 21 seconds to Froome.
That meant that Froome's advantage was back out to 1-37, giving him greater margin for error heading towards the final summit finish on the Alto de l'Angliru on Saturday.
Vuelta a España 2017, stage 18: Suances to Santo Toribio de Liébana (169km)
1. Sander Armée (Bel) Lotto Soudal, in 4-09-39
2. Alexey Lutsenko (Kaz) Astana, at 31 secs
3. Giovanni Visconti (Ita) Bahrain-Merida, at 46 secs
4. Alexis Gougeard (Fra) Ag2r La Mondiale, at 1-02
5. Jose Joaquin Rojas Gil (Esp) Movistar, at 1-06
6. Alessandro De Marchi (Ita) BMC Racing, at 1-19
7. Matteo Trentin (Ita) Quick-Step Floors, at 1-21
8. Sergio Pardilla Bellon (Esp) Caja Rural-Seguros, at same time
9. Antwan Tolhoek (Ned) LottoNL-Jumbo, at 1-38
10. Anthony Roux (Fra) FDJ, at 1-48
20. Fabio Aru (Ita) Astana, at 9-56
21. Alberto Contador (Esp) Trek-Segafredo, at 10-08
23. Chris Froome (GBr) Team Sky, at same time
24. Wilco Kelderman (Ned) Team Sunweb, at 10-12
25. Ilnur Zakarin (Rus) Katusha-Alpecin, at same time
28. Vincenzo Nibali (Ita) Bahrain-Merida, at 10-29
General classification after stage 18
1. Christopher Froome (GBr) Team Sky, in 72-03-50
2. Vincenzo Nibali (Ita) Bahrain-Merida, at 1-37
3. Wilco Kelderman (Ned) Team Sunweb, at 2-17
4. Ilnur Zakarin (Rus) Katusha-Alpecin, 2-29
5. Alberto Contador Velasco (Spa) Trek-Segafredo, at 3-34
6. Miguel Angel Lopez (Col) Astana, at 5-16
7. Michael Woods (Can) Cannondale-Drapac, at 6-33
8. Fabio Aru (Ita) Astana, at same time
9. Wout Poels (Ned) Team Sky, at 6-47
10. Steven Kruijswijk (Ned) LottoNL-Jumbo, at 10-26
Thank you for reading 20 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1