The run into the finish was technical with a punchy rise to the line. Sagan used his power and speed to soundly beat Sonny Colbrelli (Bahrain-Merida) and Philippe Gilbert (Quick-Step Floors) at the end of the 204.5km stage from Lorient to Quimper.
"In the final stretch, Sky started to pull hard and go full speed,"said Sagan, "and then Gilbert came over the climb fast too.
"He tried to attack but we caught him and after, I think Van Avermaet started a little too early, so it really left me and Colbrelli to fight it out. I was pretty lucky because Colbrelli was coming close near the end.
"During the Tour de France everything is different, but the parcours was like an Ardennes classic – up down, left, right, narrow roads. Technically it was a nice parcours."
Sagan strengthened his grip on the green jersey as his main rival, Fernando Gaviria (Quick-Step Floors) didn't make the sprint finish. The Slovakian now leads the competition by 33 points, 180 to Gaviria's 147.
"While there weren’t as many points today," said Sagan, "just 30 for the win – it’s better than nothing though, and tomorrow is another day."
With a lumpy profile on the agenda for the day, there was a lot of interest in making the breakaway among the smaller squads. Finally breaking from the grasp of the peloton were Elie Gesbert (Fortuneo-Samsic), Julien Vermote (Dimension Data), Jasper De Buyst (Lotto Soudal), Lilian Calmejane and Sylvain Chavanel (both Direct Energie), Tom Skujins (Trek-Segafredo) and Nicolas Edet (Cofidis), who rode out to a four-minute lead.
The group never managed to extend that lead as Chavanel took the intermediate sprint ahead of Edet while three minutes and 50 seconds later Fernando Gaviria (Quick-Step Floors) beat Peter Sagan (BORA-hansgrohe) in the bunch sprint for eighth place.
Chavanel then attacked the break to take the KOM points at the top of the côte de Kaliforn, the côte de Trimen and côte de la Roche du Feu. Gesbert crashed on a descent and was later absorbed by the peloton as remaining five riders kept up the chase.
Chavanel was then chased down and dropped by Skujins, Calmejane and Edet with the trio soaking up some KOM points while the peloton edged its way closer.
Eventually, Edet dropped off with Skujins and Calmejane wound up just before the bonus sprint won by Julian Alaphilippe (Quick-Step Floors) ahead of race leader Greg van Avermaet (BMC).
With the narrow roads in the final kilometres, Team Sky drove to the front and went full gas to keep their leaders out of trouble. This stretched out the bunch, ensuring that only those with the best positioning would compete for the win.
Within the final kilometre, Gilbert put in a big attack on the early slopes of the climb. Julien Simon (Cofidis) was the first to respond but it was the trio of van Avermaet, Colbrelli and Sagan that made the juncture first. From there van Avermaet opted to sprint from 250 metres to go, giving Sagan and Colbrelli the perfect leadout.
Colbrelli jumped first, Sagan countered and had enough in the tank to win the sprint convincingly in the end.
The top of the general classification remained unchanged with van Avermaet, his BMC team-mate Tejay van Garderen and Gilbert leading.