Thomas nailed his line through the turn and sprinted clear of Bahrain Victorious at the front of group one, and just narrowly held on to take the stage ahead of Sonny Colbrelli.
Lukas Pöstlberger finished safely in the bunch to maintain his race lead for another day.
How it happened
Stage five of the 2021 Critérium du Dauphiné looked like a great opportunity for the Classics specialists to win the day, with five lower category climbs spread through the 175km route from Saint-Chamond to Saint-Vallier.
The stage started with climbing from the flag starting with the 4.4km-long Côte du Planil, with a lumpy opening 80km to follow.
At the 90km mark, the riders then took on the Côte de la Sizeranne (2.4km at seven per cent), followed by the Côte de Hauterives at 120km.
Into the pivotal final 30km came the last two climbs, starting with the third category Col de Barbe Bleu (2.8km at 5.7 per cent), which peaked 27km from the finish, and finally the Côte du Montrebut (1.4km at 11 per cent), 12.5km from the line. From the top of that climb it was a fast downhill run to the finish in Saint-Vallier.
The pace for the day was set on the first climb as Kasper Asgreen (Deceuninck - Quick-Step) attacked the bunch and helped establish a five-rider break, which also featured Tim Wellens (Lotto-Soudal) ad Tsgabu Grmay (Team BikeExchange).
That group extended their advantage to almost two minutes in the opening 50km, but with just over 100km still to race the gap had dropped to under a minute, sparking an attack from riders in the bunch .
Jasper Stuyven, Mattias Skjelmose, Ryan Mullen (Trek-Segafredo) and Josef Černy (Deceuninck) fired off the front of the peloton and took 4km to bridge across to the breakaway, setting up eight riders out front.
Into the final 60km of the stage the gap to the break decreased once again, and with just over 40km to the line the escapees had all been swept up, sparking a flurry of attacks from the bunch.
Sven Erik Bystrøm from UAE Team Emirates put in the biggest attack 37km out and was able to get clear of the peloton alone, staying out front until 14km to go.
The peloton was together once again on the final climb, the Côte du Montrebut, before Lawson Craddock (EF Education-Nippo) attacked on the double digit gradients and got a gap.
Craddock rode hard on the descent, with Bahrain Victorious and Ineos Grenadiers chasing back in the bunch.
The American was finally caught 2km out, setting up a potential sprint from a reduced bunch, after plenty of riders were distance on the steep final climb (including Chris Froome), as Colbrelli was he fastest rider still in the group.
Then at just over 1km from the line came the decisive moment, as the leading group barrelled towards a sharp right-hand turn, with Geraint Thomas leading into the corner and taking the perfect line.
The Welshman powered out of the apex and got a gap on the Bahrain Victorious led group, and then pushed hard into the final few hundred metres.
Bahrain chased desperately as their sprinter Colbrelli was forced to launch his sprint early in the hopes of catching a slowing Thomas, but the Italian only got up to his rival's wheel at the line.
Thomas just held on to take the stage, earning himself a 10 second time bonus to move up two places in the general classification.
Pöstlberger (Bora-Hansgrohe) still leads the race by one second ahead of Alexey Lutsenko (Astana-Premier Tech).
Thomas is now sixth overall, 14 seconds off the race lead.
The race continues with a tough uphill finish on stage six, feature the Col de Porte and the Côte de la Frette in the final.
Critérium du Dauphiné, Saint-Chamond to Saint-Vallier (175.4km)
1. Geraint Thomas (GBr) Ineos Grenadiers, in 4-02-15
2. Sonny Colbrelli (Ita) Bahrain Victorious
3. Alex Aranburu (Esp) Astana-Premier Tech
4. Carlos Barbero (Esp) Qhubeka-Assos
5. Mads Würtz Schmidt (Den) Israel Start-Up Nation
6. Michael Valgren (Den) EF Education-Nippo
7. Patrick Konrad (Aut) Bora-Hansgrohe
8. Alejandro Valverde (Esp) Movistar
9. Harry Sweeny (Aus) Lotto-Soudal
10. Franck Bonnamour (Fra) B&B Hotels p/b KTM, all at same time
General classification after stage five
1. Lukas Pöstlberger (Aut) Bora-Hansgrohe, in 16-59-22
2. Alexey Lutsenko (Kaz) Astana-Premier Tech, at 1s
3. Kasper Asgreen (Den) Deceuninck - Quick-Step, at 6s
4. Ion Izagirre (Esp) Astana-Premier Tech, at 9s
5. Wilco Kelderman (Ned) Bora-Hansgrohe, at 13s
6. Geraint Thomas (GBr) Ineos Grenadiers, at 14s
7. Ilan Van Wilder (Bel) Team DSM, at same time
8. Richie Porte (Aus) Ineos Grenadiers, at 16s
9. Patrick Konrad (Aut) Bora-Hansgrohe, at 32s
10. Ben O'Connor (Aus) Ag2r-Citroën, at 34s
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