09.10 | 18 | | | Paris - Tours Espoirs (1.2U) | 178.4 | | | more |
23.09 | 14 | | | World Championships MU - Road Race (WC) Great Britain | 169.8 | 7 | 15 | more |
04.09 › 08.094-8/9 | | | | Tour of Britain (2.Pro) Great Britain | | | | more |
| 33 | | | Mountains classificationMountains classification | | | | |
| 4 | | | Points classificationPoints classification | | | | |
| 31 | | | General classificationGeneral classification | | | 3 | |
08.09 | 4 | | | S5Stage 5 - West Bridgford › Mansfield | 186.8 | 7 | | |
07.09 | 6 | 31 | | S4Stage 4 - Redcar › Duncombe Park, Helmsley | 149.5 | 3 | | |
06.09 | 7 | 42 | | S3Stage 3 - Durham › Sunderland | 163.6 | 2 | | |
05.09 | 14 | 48 | | S2Stage 2 - Hawick › Duns | 175.2 | | | |
04.09 | 54 | 54 | | S1Stage 1 - Aberdeen › Glenshee Ski Centre | 181.3 | | | |
18.08 › 28.0818-28/8 | | | | Tour de l'Avenir (2.Ncup) Great Britain | | | | more |
27.08 | DNS | | | S8Stage 8 - Ugine › La Toussuire | 100.2 | | | |
26.08 | 38 | 31 | | S7Stage 7 - Thonon-les-Bains › Saint-François-Longchamp | 175.4 | | | |
24.08 | 63 | 35 | | S6Stage 6 - Saint-Amour › Oyonnax | 124.6 | | | |
23.08 | 4 | 12 | | S5 (TTT)Stage 5 (TTT) - Gueugnon › Saint Vallier | 27.9 | | | |
22.08 | 8 | 7 | | S4Stage 4 - Sainte Sévère sur Indre › Chaillac | 142.8 | | | |
21.08 | 12 | 5 | | S3Stage 3 - Civray › La Trimouille | 153.7 | | | |
20.08 | 3 | 3 | | S2Stage 2 - Benet › Civray | 152.8 | 1 | 5 | |
19.08 | 3 | 3 | | S1Stage 1 - La Roche-sur-Yon › La Roche-sur-Yon | 121.6 | 1 | 5 | |
18.08 | 3 | | | TTT PrologueTTT Prologue - La Roche-sur-Yon › La Roche-sur-Yon | 3.9 | | | |
07.08 | 11 | | | Commonwealth Games ME - Road Race (JR) | 160 | | | more |
27.07 › 31.0727-31/7 | | | | Tour Alsace (2.2) | | | | more |
| 34 | | | Youth classificationYouth classification | | | | |
| 3 | | | Points classificationPoints classification | | | | |
| 55 | | | General classificationGeneral classification | | | | |
31.07 | 1 | | | S5Stage 5 - Mulhouse › Berrwiller | 158.2 | 5 | 7 | |
30.07 | 11 | 57 | | S4Stage 4 - Kembs › Altkirch | 169.5 | | | |
29.07 | 59 | 58 | | S3Stage 3 - Vesoul › La Planche des Belles Filles | 144.1 | | | |
28.07 | 70 | 56 | | S2Stage 2 - Rust (Europa Park) › Scherwiller | 156.9 | | | |
27.07 | 2 | 4 | | S1 (TTT)Stage 1 (TTT) - Sausheim › Sausheim | 4.3 | 4 | 1 | |
29.06 | 3 | | | LOGCO Otley Grand Prix (NAT) | | | | more |
26.06 | 2 | | | National Championships Great Britain ME - Road Race (NC) | 201 | 10 | 75 | more |
23.06 | 12 | | | National Championships Great Britain U23 - ITT (NC) | 22.1 | | | more |
11.06 › 18.0611-18/6 | | | | Giro d'Italia Giovani Under 23 (2.2U) | | | | more |
| 19 | | | Mountains classificationMountains classification | | | | |
| 5 | | | Points classificationPoints classification | | | | |
| 53 | | | General classificationGeneral classification | | | | |
18.06 | 2 | | | S7Stage 7 - Cuneo › Pinerolo | 121 | 2 | 1 | |
17.06 | 131 | 57 | | S6Stage 6 - Boves › Colle Fauniera | 110.7 | | | |
16.06 | 8 | 41 | | S5Stage 5 - Busca › Peveragno | 146.6 | | | |
14.06 | 109 | 52 | | S4Stage 4 - Chiuro › Chiavenna | 101.1 | | | |
13.06 | 49 | 49 | | S3Stage 3 - Pinzolo › Santa Caterina Valfurva | 177.1 | | | |
12.06 | 13 | 6 | | S2Stage 2 - Rossano Veneto › Pinzolo | 166.5 | | | |
11.06 | 14 | 14 | | S1Stage 1 - Gradara › Argenta | 164.9 | | | |
02.06 › 05.062-5/6 | | | | Course de la Paix Grand Prix Jeseníky (2.Ncup) Great Britain | | | | more |
| 1 | | | Points classificationPoints classification | | | | |
| 31 | | | General classificationGeneral classification | | | | |
05.06 | 1 | | | S3Stage 3 - Jeseník › Jeseník | 166.7 | 5 | 12 | |
04.06 | 40 | 39 | | S2Stage 2 - Bruntál › Dlouhé Stráně | 134.6 | | | |
03.06 | 3 | 3 | | S1Stage 1 - Jeseník › Rýmařov | 131.5 | 1 | 4 | |
02.06 | 3 | 3 | | ProloguePrologue - Jeseník › Jeseník | 3.4 | 1 | 4 | |
15.05 | 5 | | | Tro-Bro Léon (1.Pro) Groupama - FDJ | 207.8 | 45 | 85 | more |
14.05 | 60 | | | Grand Prix du Morbihan (1.Pro) Groupama - FDJ | 185.4 | | | more |
03.05 › 08.053-8/5 | | | | 4 Jours de Dunkerque / Grand Prix des Hauts de France (2.Pro) Groupama - FDJ | | | | more |
| 6 | | | Youth classificationYouth classification | | | | |
| 15 | | | Mountains classificationMountains classification | | | | |
| 34 | | | Points classificationPoints classification | | | | |
| 27 | | | General classificationGeneral classification | | | 5 | |
08.05 | 32 | | | S6Stage 6 - Ardres › Dunkerque | 182.9 | | | |
07.05 | 32 | 29 | | S5Stage 5 - Roubaix › Cassel | 183.7 | | | |
06.05 | 71 | 15 | | S4Stage 4 - Mazingarbe › Aire-sur-la-Lys | 170.8 | | | |
05.05 | 59 | 11 | | S3Stage 3 - Péronne › Mont-Saint-Éloi | 170 | | | |
04.05 | 70 | 9 | | S2Stage 2 - Béthune › Maubeuge 148k | 181.5 | | | |
03.05 | 19 | 24 | | S1Stage 1 - Dunkerque › Aniche | 161.1 | | | |
19.04 | 27 | | | G.P. Palio del Recioto - Trofeo C (1.2U) | 147.2 | | | more |
18.04 | 23 | | | Giro del Belvedere (1.2U) | 166.2 | | | more |
16.04 | 24 | | | Liège - Bastogne - Liège U23 (1.2U) | 174.8 | | | more |
01.04 › 03.041-3/4 | | | | Le Triptyque des Monts et Châteaux (2.2U) | | | | more |
| 18 | | | Mountains classificationMountains classification | | | | |
| 13 | | | Points classificationPoints classification | | | | |
| 16 | | | General classificationGeneral classification | | | | |
03.04 | 45 | | | S3bStage 3b - Ellezelles › Frasnes-lez-Anvaing | 95.7 | | | |
03.04 | 18 | 10 | | S3a (ITT)Stage 3a (ITT) - Wodecq › Wodecq | 14.2 | | | |
02.04 | 2 | 8 | | S2Stage 2 - Bernissart › Tertre | 169.9 | 2 | 1 | |
01.04 | 35 | 36 | | S1Stage 1 - Antoing › Mont Saint-Aubert | 131.7 | | | |
27.03 | 1 | | | Gent-Wevelgem / Kattekoers-Ieper (1.Ncup) Great Britain | 177 | 15 | 70 | more |
17.03 | 35 | | | Grand Prix de Denain - Porte du Hainaut (1.Pro) Groupama - FDJ | 200.3 | | 3 | more |
16.03 | 59 | | | Danilith Nokere Koerse (1.Pro) Groupama - FDJ | 189.8 | | | more |
13.03 | 26 | | | Dorpenomloop Rucphen (1.2) | 186 | | | more |
06.03 | 19 | | | Grote Prijs Jean-Pierre Monseré (1.1) | 203.2 | 2 | 3 | more |
01.03 | 68 | | | Le Samyn (1.1) | 209 | | | more |