2023
- 2nd Tour de France: Stages 1 & 17
- 4th Tour de France: Overall GC
- 1st Tour Down Under: Stage 5
- 2nd Tour Down Under: Overall GC
- 4th Paris-Nice: Overall GC
- 3rd Gran Piemonte
2022
- 1st Giro d'Italia: Stages 2 (ITT) & 14
- 1st Paris-Nice: Stage 8
- 1st Vuelta Asturias: Stages 1 & 3
- 1st Vuelta a Castilla y Leon: Stage 2
- 1st Vuelta a Castilla y Leon: Overall GC
- 1st Prueba Villafranca - Ordiziako Klasika
2021
- 1st Giro d'Italia: Stage 19
- 3rd Giro d'Italia: Overall GC
- 1st Tour of the Alps: Stage 2
- 1st Tour of the Alps: Overall GC
- 2nd Tirreno-Adriatico: Stage 4
2020
- 1st Tirreno-Adriatico: Stage 5
- 1st Tirreno-Adriatico: Overall GC
- 3rd Tour of Poland: Stage 4
- 3rd Tour of Poland: Overall GC
- 3rd Tour Down Under: Stage 3
- 7th Tour Down Under: Overall GC
2019
- 1st Tour de France: Stages 12 & 15
- 1st Vuelta a Andalucia: Stage 3
- 1st Paris-Nice: Stage 5
- 2nd Giro d'Italia: Stages 1 & 14
- 3rd Giro d'Italia: Stage 15
- 8th Giro d'Italia: Overall GC
2018
- 1st Paris-Nice: Stage 7
- 2nd Paris-Nice: Overall GC
- 2nd Volta Ciclista a Catalunya: Stage 3
- 1st Volta Ciclista a Catalunya: Stage 7
- 4th Volta Ciclista a Catalunya: Overall GC
- 4th Giro d'Italia: Stage 4
- 2nd Giro d'Italia: Stage 6
- 1st Giro d'Italia: Stages 9, 11 & 15
- 1st Tour of Poland: Stage 7
- 2nd Tour of Poland: Overall GC
- 1st Vuelta a Espana: Stage 14
- 2nd Vuelta a Espana: Stages 19
- 3rd Vuelta a Espana: Stages 15 & 20
- 1st Vuelta a Espana: Overall GC
2017
- 1st Paris-Nice: Stage 6
- 9th Paris-Nice: Overall GC
- 1st Tour de Romandie: Stage 4
- 2nd Tour de Romandie: Overall GC
- 6th Tour de France: Stage 5
- 5th Tour de France: Stage 13
- 9th Tour de France: Stages 12 & 18
- 7th Tour de France: Overall GC
- 1st Tour de France: Young Rider Classification
2016
- 6th Paris-Nice: Stage 6
- 5th Paris-Nice: Stage 7
- 7th Paris-Nice: Overall GC
- 1st Ordiziako Klasika
- 7th Clasica San Sabastian
- 4th Vuelta Ciclista a Burgos: Overall GC
- 1st Vuelta a Espana: Stage 6
- 6th Vuelta a Espana: Overall GC
2015
- 8th Tour of the Basque Country: Stage 3
- 3rd Tour of the Basque Country: Stage 4
- 12th Tour of the Basque Country: Stage 6
- 5th Tour of the Basque Country: Overall GC
- 9th Tour de Romandie: Stage 4
- 12th Tour de Romandie: Stage 6
- 6th Tour de Romandie: Overall GC
- 5th Criterium du Dauphiné: Stages 5 & 6
- 11th Criterium du Dauphiné: Stage 7
- 2nd Criterium du Dauphiné: Stage 8
- 5th Criterium du Dauphiné: Overall GC
- 8th Tour de France: Stage 3
- 10th Tour de France: Stage 14
- 11th Tour de France: Stage 20
- 84th Tour de France: Overall GC
- 14th Clasica San Sebastian
2014
- 15th Paris-Nice: Stage 7
- 12th Tour of the Basque Country: Overall GC
- 5th Tour of Slovenia: Stage 3
- 7th Tour of Slovenia: Overall GC
- 3rd National Championship, Road, Elite
- 21st Tour de France: Stage 14
- 22nd Grand Prix Cycliste de Quebec
2013
- 1st World Championship, Track, Points race, Elite
- 3rd La Cote Picarde, U23, France
- 3rd Arden Challenge: Stage 1
- 2nd Arden Challenge: Stages 2 & 3
- 1st Arden Challenge: Stage 4
- 1st Arden Challenge: Overall GC
- 2nd Tour of the Reservoir: Stage 1
- 4th Fleche du Sud: Stage 4
- 3rd Fleche du Sud: Stage 5
- 10th Fleche du Sud: Overall GC
- 9th Ras Tailteann: Overall GC
- 2nd Thuringen-Rundfahrt, U23: Stage 3
- 3rd Thuringen-Rundfahrt, U23: Stage 6
- 10th Thuringen-Rundfahrt, U23: Overall GC
- 4th Ryedale GP, Great Britain
- 1st Tour de l'Avenir: Stages 5 & 6
- 10th Tour de l'Avenir: Overall GC
- 4th Tour of Britain: Stage 2
- 6th Tour of Britain: Stage 5
- 1st Tour of Britain: Stage 6
- 3rd Tour of Britain: Overall GC
2012
- 4th Tour de Normandie: Stage 5
- 4th Thuringen-Rundfahrt, U23: Stage 4
- 8th Tour of Britain: Stage 6
2011
- 3rd Beijing, Team Pursuit, China
- 9th Thuringen-Rundfahrt, U23: Overall GC
- 1st Twinings Tour Salisbury
- 3rd Tour de l'Avenir: Stage 4
- 1st Tour de l'Avenir: Stage 6
2010
- 2nd Eddie Soens Memorial, Great Britain
- 1st World Championship, Track, Madison, Juniors
- 2nd World Championship, Track, Team Pursuit, Juniors