Elia Viviani claimed his first career Tour de France stage win in a sprint finish in Nancy as Deceuninck-Quick Step team-mate Julian Alaphilippe retained the yellow jersey.

The Italian sprinter, frustrated to leave the Giro d'Italia empty-handed in May, took the first pure sprint opportunity of this year's Tour as he edged out UAE Team Emirates' Alexander Kristoff on the line.

It was a second consecutive stage victory for Viviani's Belgian team after Alaphilippe's champagne moment in Epernay on Monday powered him into the yellow jersey.

Several sprinters had targeted Saturday's opening stage in Brussels but an uphill drag to the finish line proved too much for the pure quick men.

"It means a lot," said Viviani, who has won five Giro stages and three Vuelta stages, but was missing one from the biggest race of all.

"Probably I can't believe it still. It was a big goal of the year. We missed the first chance and put the yellow on.

"But I think after Julian's phenomenal ride yesterday, it's a moment when you switch on the team. Today we did a perfect job, you saw how the lead-out did.

"I'm pretty happy. I was missing this win. I won in the Giro and the Vuelta and now in the Tour de France, that means a lot to me."

Lotto-Soudal's Caleb Ewan had to settle for third while former world champion Peter Sagan of Bora-Hansgrohe came fourth.

And the bunch finish meant there was no change at the top of the general classification, in which Alaphilippe leads by 20 seconds from Jumbo-Visma's Wout Van Aert.

The rest of the peloton were simply happy to make it through a sketchy final five kilometres unscathed, with the route designers sending them barrelling down a wide dual carriageway before a roundabout funnelled them into a tight left-hander two kilometres from the line.

Nicolas Roche remains 19th on the general classification for Team Sunweb, while his cousin Dan Martin (UAE Team Emirates) moves up two spots to 36th.

Wednesday’s fifth stage is a 175.5km hilly ride from St Die des Vosges to Colmar.