Majka took victory from the day's breakaway as Froome concedes just four seconds to second place Vincenzo Nibali
Rafal Majka (Bora-Hansgrohe), who had been in the day’s main breakaway, took a sensational stage victory after riding much of the final climb solo to finish 27 seconds ahead of second place Miguel Angel Lopez (Astana).
Vincenzo Nibali (Bahrain-Merida) crossed the line in third to take four bonus seconds, with Froome just behind, leaving the gap between first and second at 55 seconds at the end of the stage.
Nibali had been most active in trying to get away from Froome on the final climb, but was unable to make big inroads with Wout Poels doing much of the pacing for the race leader.
It was bad news for Esteban Chaves (Orica-Scott) though, who, despite attacking first from the GC contenders, slipped from third to fifth with Wilco Kelderman (Sunweb) and Ilnur Zakarin (Katusha) jumping up the rankings to third and fourth respectively having finished with Froome.
How it happened
On the first of two key mountain stages this weekend, 10 riders got away in the breakaway with the hope that the GC teams might let them go.
Rafal Majka, Patrick Konrad (Bora-Hansgrohe), Alexis Gougeard (Ag2r La Mondiale), Simon Clarke, Davide Villella (Cannondale-Drapac), Rui Costa (UAE Team Emirates), Bart De Clercq (Lotto-Soudal), Luis Angel Mate (Cofidis), Stefan Denifl (Aqua Blue Sport) and Ricardo Vilela (Manzana Postobon) were the riders to get out front.
They managed a maximum gap of around eight minutes, but that didn’t seem enough as the peloton gradually brought them closer.
By the time they’d reached the penultimate climb, a category two pass that began with 30km to go, the break had three minutes and lost several riders.
They lost four riders by the top of that 8.5km climb, with just Davide Villella, Rafal Majka, Patrick Konrad, Rui Costa and Bart De Clercq taking two minutes over the summit.
Marc Soler (Movistar) attempted to attack from the peloton to reach the break, but was unable to make it, with those in the break holding 1-35 onto the early slopes of the final 12km climb.
Majka eventually found himself out solo after dropping his breakaway companions, with 1-45 at 8km to go.
Astana set the early pace in the peloton to try and set up Fabio Aru, but with so many riders being put into trouble in a now reduced main bunch, Aru also appeared to be struggling at the rear of the peloton as Pello Bilbao pushed on.
Majka meanwhile, had 1-20 on the chasing bunch with 5km remaining. Romain Bardet (Ag2r La Mondiale) was the first to try and bridge over to him with Richard Carapaz (Movistar) with 4km to go to try and find a stage win, with Esteban Chaves the first GC contender to reach out on the steepest ramps of the climb.
Alberto Contador followed shortly after, with Vincenzo Nibali then too jumping from the Sky led bunch.
With Bardet dropped, the group of four only hand a handful of seconds on Froome and brought Majka’s time down to 56 seconds with 3.2km to go.
As the Nibali group struggled to work together, Majka was able to draw the gap out to 1-10 again.
Contador and Nibali then found themselves out on their own, but Wout Poels was slowly clawing them back for Froome as Nibali appeared to get frustrated with Contador’s lack of work.
As Poels pulled off with just over 2.5km to go, Froome was able to do the final work to get back to Nibali and Contador along with Astana’s Miguel Angel Lopez.
A slowing of pace then allowed Wilco Kelderman (Sunweb), Ilnur Zakarin (Katusha) and Chaves to come back with Lopez then attacking with 48 seconds to close on Majka.
But he wasn’t able to do anything about Pole out front, who rode home to a glorious stage win after seeing his GC campaign fall apart with illness in the opening week of the Vuelta.
Lopez then crossed the line 27 seconds down (with his team leader Fabio Aru finishing over a minute behind the winner), while Nibali took the chance to grab four bonus seconds for third place, with Froome following him in.
The Vuelta continues with another huge mountain day on Sunday, a 129.4km route that takes in two category one climbs before an especial climb summit finish.
Vuelta a España 2017, stage 14: Écija to La Pandera (175km)
1 Rafal Majka (Pol) Bora-Hansgrohe, 4-42-10
2 Miguel Angel Lopez (Col) Astana Pro Team, at 27s
3 Vincenzo Nibali (Ita) Bahrain-Merida, at 31s
4 Christopher Froome (GBr) Team Sky
5 Ilnur Zakarin (Rus) Katusha-Alpecin
6 Wilco Kelderman (Ned) Sunweb, all same time
7 Alberto Contador (Esp) Trek-Segafredo, at 37s
8 Wout Poels (Ned) Team Sky 00:00:46
9 Johan Esteban Chaves Rubio (Col) Orica-Scott, at 57s
10 Fabio Aru (Ita) Astana Pro Team, at 1-03
11 Michael Woods (Can) Cannondale-Drapac, at 1-13
12 Pello Bilbao (Esp) Astana Pro Team, at 1-19
General classification after stage 14
1 Christopher Froome (GBr) Team Sky, at 58-30-47
2 Vincenzo Nibali (Ita) Bahrain-Merida, at 55s
3 Wilco Kelderman (Ned) Sunweb, at 2-17
4 Ilnur Zakarin (Rus) Katusha-Alpecin, at 2-25
5 Johan Esteban Chaves Rubio (Col) Orica-Scott, at 2-39
6 Fabio Aru (Ita) Astana Pro Team, at 3-09
7 David De La Cruz (Spa) Quick-Step Floors, at 3-11
8 Alberto Contador (Spa) Trek-Segafredo, at 3-19
9 Michael Woods (Can) Cannondale-Drapac, at 3-23
10 Miguel Angel Lopez Moreno (Col) Astana Pro Team, at 3-48