Professionista dal 2009, ha caratteristiche di passista-scalatore. In carriera ha conquistato una tappa al Giro d'Italia 2021, terminato al secondo posto nella classifica generale, ed una tappa alla Vuelta a España 2021.
Carriera Gli esordi e i primi anni da professionista Nei primi anni 2000 inizia la sua carriera ciclistica nella squadra ragusana Libertas Ibla, riuscendo già nei primi anni tra gli Allievi a ottenere buoni piazzamenti. Nel 2004 e nel 2005 milita nella categoria Juniores del G.S. Berti Mobili di Massa, ottenendo numerosi successi, guidato dall'ex pro Giuseppe dI Fresco.
Dal 2006 al 2009 gareggia nella categoria Dilettanti Elite/Under-23, vestendo prima la divisa del team bresciano Unidelta-GLS, diretto dall'ex pro Bruno Leali, e poi, dal 2007 al giugno 2009, quella della formazione pistoiese G.S. Mastromarco Grassi Chianti Sensi. Con questa seconda squadra vince il titolo italiano in linea Under-23 nel 2008 a Palazzago, il Giro Ciclistico Pesche Nettarine di Romagna nel 2009 e la tappa di Lonato del Garda al Girobio nello stesso anno. In queste due stagioni rappresenta anche l'Italia nelle gare in linea Under-23 dei campionati del mondo di Varese e Mendrisio, piazzandosi decimo in entrambe le occasioni.
Nel luglio 2009 viene messo sotto contratto da professionista con la LPR Brakes-Farnese Vini di Fabio Bordonali; l'anno dopo segue quindi il suo direttore sportivo alla nuova De Rosa-Stac Plastic.
2011-2014: Liquigas/Cannondale
Nel 2011 si trasferisce alla Liquigas-Cannondale. Durante la stagione si piazza sesto al Gran Premio Città di Camaiore; prende inoltre parte alla Vuelta a España, classificandosi terzo nella tappa di Vitoria, la penultima. L'anno dopo partecipa al Giro d'Italia come gregario in salita per Ivan Basso. In quella corsa indossa la maglia bianca di leader della classifica giovani per sei giorni – la perderà, a favore di Sergio Henao, nella tappa con arrivo a Cervinia – e conclude al ventiquattresimo posto nella graduatoria generale. Nello stesso anno si classifica terzo al Tour of Britain.
Nel 2013, in maglia Cannondale, coglie il primo successo da professionista, aggiudicandosi la quinta e ultima tappa della Settimana Internazionale di Coppi e Bartali. Nella stessa stagione chiude diciannovesimo al Giro d'Italia, nono ai campionati nazionali Elite e terzo al Tour of Alberta, e vince la classifica scalatori al Tour of Beijing. Nel 2014 non ottiene successi, si classifica però quinto alla Settimana Internazionale di Coppi e Bartali, terzo al Giro d'Austria e nono alla Vuelta a España, ottenendo il suo primo piazzamento nei dieci in un Grande Giro.
Il 5 agosto 2014 viene annunciato il suo trasferimento ufficiale al team BMC a partire dalla stagione 2015.
2015-2018: BMC
Nel 2015 prende il via del Giro d'Italia in veste di uomo classifica per la sua nuova squadra. Corre con regolarità, classificandosi spesso a ridosso degli uomini di classifica, e conclude la prova all'ottavo posto a circa 12 minuti dal vincitore Alberto Contador. Successivamente disputa il Tour de France, il primo della sua carriera, vincendo con i compagni la cronometro a squadre della nona tappa e aiutando Tejay van Garderen e Samuel Sánchez impegnati nella lotta per la classifica generale.
Nel 2016 disputa ancora il Tour de France in veste di luogotenente. Si fa vedere nel corso della decima tappa quando riesce a entrare nella fuga di giornata concludendo all'ottavo posto sul traguardo. Successivamente disputa la prova in linea alle Olimpiadi di Rio e si classifica quinto al Tour des Fjords.
Nel 2017 veste la prima maglia di capoclassifica alla Tirreno-Adriatico grazie alla vittoria nella cronosquadre di apertura. Non prende il via dell'ultima tappa del Tour of the Alps 2017, nonostante fosse settimo in classifica a 42" da Geraint Thomas, per recuperare in vista della Liegi-Bastogne-Liegi. Disputa il Tour de Suisse quale uomo classifica della BMC. Grazie al buon prologo e al secondo posto di giornata sull'arrivo in salita di Villars-sur-Ollon, al termine della quarta frazione della breve corsa a tappe elvetica, conquista il primato in classifica con 15" su Steven Kruijswijk. Perde la maglia al termine della sesta tappa, in favore di Domenico Pozzovivo ma resta competitivo nei giorni successivi tanto da concludere al secondo posto la classifica finale, a 48" da Simon Špilak, classificandosi anche secondo nella classifica a punti e terzo nel gran premio della montagna. Prende il via del Tour de France in veste di aiutante di Richie Porte ma, a seguito della caduta che costringe al ritiro il suo capitano, viene promosso a uomo di classifica della propria squadra. Grazie a una fuga da lontano nel corso della quindicesima tappa guadagna oltre cinque minuti sugli altri uomini di classifica risalendo, momentaneamente, al decimo posto della graduatoria generale. Conclude la gara a tappe francese all'undicesimo posto della classifica. Successivamente prende parte alla Vuelta a España vincendo, con i compagni, la cronometro a squadre di apertura. Conclude la corsa al centonovesimo posto della classifica, senza riuscire ad inserirsi nelle fughe di giornata.
Nel 2018 vince per il terzo anno consecutivo la cronometro a squadre di apertura della Tirreno-Adriatico, vestendo per un giorno la maglia di capoclassifica; conclude la corsa al secondo posto. Dopo essere arrivato quinto al Delfinato cerca, senza successo, di ottenere una vittoria di tappa individuale al Tour de France. Ad agosto viene annunciato il suo passaggio alla Bahrain-Merida per la stagione 2019. In seguito viene convocato da Cassani per il campionato del mondo di Innsbruck: terzo in maglia BMC nella cronosquadre, mentre termina al 64º posto l'impegnativa prova in linea del 30 settembre.
Dal 2019: il passaggio alla Bahrain-Merida e il secondo posto al Giro Nel 2019 sfiora la vittoria nella dodicesima tappa del Giro d'Italia, giungendo secondo alla spalle di Cesare Benedetti; è poi quarto nella cronometro finale di quel Giro a Verona, e quinto nella tappa di Valloire al seguente Tour de France. Nel 2020 centra la sua seconda vittoria da professionista, in Spagna al Circuito de Getxo, anticipando Giacomo Nizzolo ed Eduard Prades. Prende il via del Tour de France in veste di aiutante di Mikel Landa e giunge settimo nella cronometro finale concludendo la gara a tappe francese al decimo posto della classifica generale. Partecipa alla prova in linea dei mondiali ad Imola, dove ottiene il decimo posto.
Partecipa al Giro d'Italia 2021 come gregario di Mikel Landa, ma assume i gradi di capitano in seguito al ritiro del ciclista spagnolo per una caduta nella quinta tappa. Coglie il suo primo successo al Giro nella ventesima tappa, con partenza da Verbania e arrivo in salita all'Alpe Motta, dopo aver attaccato insieme al compagno di squadra Pello Bilbao e a Romain Bardet nel corso della discesa del Passo del San Bernardino, quando mancavano 50 km all'arrivo. Conclude la Corsa rosa al secondo posto, con un distacco di 1'29" dal colombiano Egan Bernal, conquistando il primo podio in carriera in un grande giro. Successivamente prende parte alla prova in linea dei Giochi Olimpici, conclusa in ventiquattresima posizione, e alla Vuelta a España, in quest'ultima nuovamente con il ruolo di gregario di Landa. Conquista la vittoria nella nona tappa, con arrivo in salita sull'Alto de Velefique, dopo aver staccato i compagni di fuga ed aver percorso gli ultimi 71 km in solitaria.
Nel 2022 Caruso trionfa al Giro di Sicilia con la maglia della Nazionale, vincendo due tappe e Giro tra le sue strade, davanti ai propri tifosi, a Piano Provenzana, nell’ultima tappa della corsa ciclistica organizzata da RCS Sport e Regione Siciliana col tempo di 4 ore 1 minuto e 47 secondi. Successivamente prende il via al Tour de France in veste di alfiere della sua squadra ma si dovrà ritirare a causa del covid.
Nel 2023 prende il via del Giro d'Italia in veste di uomo classifica per la sua squadra e riesce a raggiungere il quarto posto nella cronoscalata di Lussari, concludendo la Corsa rosa al quarto posto, con un distacco di 4'40" dallo sloveno Primož Roglič. Nel prosieguo della stagione sfiora la vittoria nella diciottesima tappa della Vuelta a España, giungendo secondo alla spalle di Remco Evenepoel. Nel 2024 prende il via al Giro d'Italia in veste di aiutante di Antonio Tiberi e giunge settimo nella settima tappa concludendo la gara a tappe italiana al diciassettesimo posto della classifica generale. Nel 2025 prende parte alla Milano Sanremo raggiungendo il traguardo di undici partecipazioni. Nella stessa stagione chiude quinto al Giro d'Italia e si aggiudica la quinta tappa della Vuelta a Burgos. Nel 2026 ottiene un'altra top 10 al Giro d'Italia ed annuncia il ritiro a fine stagione, firmando un contratto da direttore sportivo con la Bahrain-Victorious per il 2027.
Palmarès
2005 (Juniores) 2ª tappa 3Tre Bresciana (Brescia > Idro) Classifica generale 3Tre Bresciana
2008 (Dilettanti Elite/Under-23, - G.S. Mastromarco - Grassi -Chianti Sensi) Campionati italiani, Gara in linea Under-23 (Palazzago)
2009 (Dilettanti Elite/Under-23, G.S. Mastromarco - Chianti Sensi - Mapooro) Gran Premio Termica Marietta 5ª tappa Giro Ciclistico Pesche Nettarine di Romagna (Bagnacavallo > Faenza) Classifica generale Giro Ciclistico Pesche Nettarine di Romagna 2ª tappa Girobio (Modena > Lonato del Garda)
2013 (Cannondale Pro Cycling, una vittoria) 5ª tappa Settimana Internazionale di Coppi e Bartali (Monticelli Terme > Fiorano Modenese)
2020 (Bahrain-McLaren, una vittoria) Circuito de Getxo "Memorial Ricardo Otxoa"
2021 (Bahrain Victorious, due vittorie) 20ª tappa Giro d'Italia (Verbania > Valle Spluga/Alpe Motta) 9ª tappa Vuelta a España (Puerto Lumbreras > Alto de Velefique)
2022 (Bahrain Victorious, tre vittorie) 2ª tappa Giro di Sicilia (Palma di Montechiaro > Caltanissetta)Vittoria ottenuta con la squadra nazionale dell'Italia 4ª tappa Giro di Sicilia (Ragalna > Etna) Classifica generale Giro di Sicilia
2025 (Bahrain Victorious, una vittoria) 4ª tappa Vuelta a Burgos (Doña Santos > Regumiel de la Sierra)
Altri successi
2007 (Mastromarco) Classifica giovani Giro della Toscana
2010 (De Rosa-Stac Plastic) Classifica giovani Settimana Internazionale di Coppi e Bartali Classifica giovani Giro del Trentino
2013 (Cannondale Pro Cycling) Classifica scalatori Tour of Beijing
2015 (BMC Racing Team) 9ª tappa Tour de France (Vannes > Plumelec, cronosquadre)
2016 (BMC Racing Team) Classifica scalatori Vuelta a Andalucía 1ª tappa Tirreno-Adriatico (Lido di Camaiore, cronosquadre)
2017 (BMC Racing Team) 1ª tappa Tirreno-Adriatico (Lido di Camaiore, cronosquadre) 1ª tappa Vuelta a España (Nîmes, cronosquadre)
2018 (BMC Racing Team) 1ª tappa Tirreno-Adriatico (Lido di Camaiore, cronosquadre) 3ª tappa Tour de France (Cholet, cronosquadre)
2022 (Bahrain Victorious) Classifica a punti Giro di Sicilia
2026 (Bahrain Victorious) Premio della Combattività Giro d'Italia
Piazzamenti Grandi Giri
Giro d'Italia 2012: 24º 2013: 19º 2015: 8º 2019: 23º 2021: 2º 2023: 4º 2024: 17º 2025: 5º 2026: 9º
Tour de France 2015: 53º 2016: 22º 2017: 11º 2018: 20º 2019: 58º 2020: 10º 2022: non partito (18ª tappa) 2026: 55º
Vuelta a España 2011: 73º 2014: 9º 2017: 109º 2021: 17º 2023: 19º 2024: non partito (7ª tappa)
Classiche monumento
Milano-Sanremo 2011: 63º 2013: 49º 2014: ritirato 2016: 27º 2017: 34º 2018: 27º 2020: 25º 2021: 54º 2022: 15º 2023: 53º 2025: 80º 2026: 104º
Liegi-Bastogne-Liegi 2011: 93º 2012: 55º 2013: 59º 2017: 31º 2018: 37º 2019: 57º 2020: ritirato 2022: 40º
Giro di Lombardia 2011: ritirato 2012: ritirato 2013: ritirato 2014: ritirato 2015: ritirato 2016: 55º 2017: ritirato 2018: 72º 2019: 59º 2022: 62º 2024: ritirato
Competizioni mondiali
Campionati del mondo Varese 2008 - In linea Under-23: 10º Mendrisio 2009 - In linea Under-23: 10º Ponferrada 2014 - In linea Elite: 74º Innsbruck 2018 - Cronosquadre: 3º