The trio broke away with sixteen kilometres left. Come the finishing stretch, Degenkolb was the first to make a move in what could have been a suicidal lead out if either of his companions had been able to swing past him.
In the end, neither could - leaving the Trek-Segafredo man the opportunity to collect the spoils ahead of Van Avermaet in second and Lampaert third.
The 156km stage from Arras to Roubaix included 12 of the cobbled sectors which featured in this year's Paris-Roubaix, plus three bonus stretches of pavé, and provided a huge challenge for the general classification contenders.
The biggest GC casualty was Richie Porte (opens in new tab) (BMC), who crashed in the first 10km of the race, abandoning with a suspected broken collarbone.
The GC rider to lose the most time was Rigoberto Uran (opens in new tab) (EF Education First-Drapac), who crossed the line 1 minute 58 down on Degenkolb, and around 1-30 down on his key rivals.
It was a tough day out for Romain Bardet (opens in new tab) (Ag2r La Mondiale), too, who was forced to close gaps well over a minute on multiple occasions following mechanicals.
Both Mikel Landa (opens in new tab) (Movistar) and Chris Froome (opens in new tab) (Team Sky) crashed during the stage. Landa was forced to chase, though just about made contact with the likes of Froome, Nairo Quintana (opens in new tab) (Movistar) and Tom Dumoulin (opens in new tab) (Team Sunweb) before the line.
How it happened
The cobbles of stage nine were always expected to cause ripples in the GC, and the first key abandonment came with just 10km of racing down.
Richie Porte (BMC Racing) who had entered the stage in tenth overall crashed early on, leaving the race with a suspected broken collarbone.
Movistar domestique José Joaquín Rojas also abandoned, and Andre Greipel (Lotto Soudal) came down, but was able to chase back on.
The incident in the peloton meant that a group of five escapees built up a lead of two minutes. The break consisted of Thomas De Gendt (Lotto-Soudal), Antwan Tolhoek (LottoNL-Jumbo), Jerome Cousin (Direct Energie), Damien Gaudin (Direct Energie) and Omar Fraile (Astana).
They were soon joined by the bridging efforts of Reinardt Janse van Rensburg, (Team Dimension Data), Lilian Calmejane (Direct Energie), Chad Haga (Sunweb), Olivier le Gac (Groupama – FDJ) and Nicolas Edet (Cofidis, Solutions Crédits).
Approaching the first sector, Tolhoek punctured, ending his time with the breakaway.
Back in the peloton, a puncture for Romain Bardet (AG2R La Mondiale) saw him take a wheel from team mate Alexis Vuillermoz; he was left with a one-minute deficit to fill on the peloton, though he was able to make up the time by the next sector.
Come sector 13, with 87 kilometres left, the break had a 3-40 gap to the peloton.
With 66km to go, a pile up in the peloton split the bunch. Soon after, Team Sky came to the front and pushed the pace - with Chris Froome and Geraint Thomas (Team Sky) plus Nairo Quintana (Movistar), Tom Dumoulin (Sunweb) and yellow jersey Greg van Avermaet (BMC) safely nestled in, as well as 2018 Paris Roubaix winner Peter Sagan (Bora-Hansgrohe).
Behind the train of Team Sky and its stowaways, a second bunch containing Vincenzo Nibali (Bahrain-Merida), Rigoberto Uran (EF Education First-Drapac) and Adam Yates (Mitchelton-Scott) was 20s in arrears.
A full minute back was BMC's nominated leader behind Porte – Tejay van Garderen, who collided with Sonny Colbrelli (Bahrain Merida) and picked up a flat tyre not long after.
The pace of the select group at the front of the peloton meant that the gap to the escapees began to sink - with 51km to go, the time distance had dropped to 1-37. Then Bardet suffered another mechanical issue that left him with another gap to close, this time around 40s.
At the end of the longest cobbled sector, at 49km to go, Van Avermaet attacked, stringing out the bunch, and with 45km left Froome found himself on the floor before jumping back up to continue the fight. By this point, there was just 58s to the break.
Philippe Gilbert (Quick Step Floors) was next to put in a dig, though Sagan and Alejandro Valverde (Movistar) were on his wheel immediately, closing down the attack.
In the bunch, Michal Kwiatkowsi (Team Sky) came down on sector six, whilst Froome sat a safe second wheel behind Jakob Fugslang (Astana).
Not long after, Mikel Landa (Movistar) was down, leaving him chasing over a minute and Rigoberto Uran (EF Education First-Drapac) also had a spill.
Up front, the break had blown itself apart, reduced to just two riders – Gaudin and Van Rensburg – with a slimmed down lead of 25s with only 25km left, and come the 20km to go mark they'd been absorbed.
The stage-winning move came with 16km left, when Lampaert attacked, taking with him Degenkolb and Van Avermaet. Sagan missed the moment and attempted to chase solo, before limping back to the peloton.
With 10km to go, the trio had 34s, accelerating to 51s with 5km to go.
Behind, the GC leaders still in the lead bunch - such as Froome, Landa (who had made it back), Dumoulin and Quintana began to attack each other whilst Bardet and Uran were still adrift. The drop in pace meant that Bardet was eventually able to make it back, though the same could not be said for Uran.
Coming into the finish straight, Degenkolb was the first to go - reaching the line first with Van Avermaet in second and Lampaert third.
Tour de France stage nine: Arras to Roubaix (156km)
1 John Degenkolb (Ger) Trek-Segafredo in 3-24-26
2 Greg Van Avermaet (Bel) BMC Racing Team
3 Yves Lampaert (Bel) Quick-Step Floors
4 Philippe Gilbert (Bel) Quick-Step Floors at 19s
5 Peter Sagan (Svk) Bora-Hansgrohe
6 Jasper Stuyven (Bel) Trek-Segafredo
7 Bob Jungels (Lux) Quick-Step Floors, at same time
8 André Greipel (Ger) Lotto Soudal at 27s
9 Edvald Boasson Hagen (Nor) Dimension Data
10 Timothy Dupont (Bel) Wanty-Groupe Gobert, at same time
General Classification after stage nine
1 Greg Van Avermaet (Bel) BMC Racing Team in 36-07-17
2 Geraint Thomas (GBr) Team Sky at 43s
3 Philippe Gilbert (Bel) Quick-Step Floors at 44s
4 Bob Jungels (Lux) Quick-Step Floors at 50s
5 Alejandro Valverde (Spa) Movistar Team at 1-31
6 Rafal Majka (Pol) Bora-Hansgrohe at 1-32
7 Jakob Fuglsang (Den) Astana Pro Team at 1-33
8 Chris Froome (GBr) Team Sky at 1-42
9 Adam Yates (GBr) Mitchelton-Scott at 1-42
10 Mikel Landa (Spa) Movistar Team at 1-42
Thank you for reading 5 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