Offerto al Torino un giocatore in uscita dalla Lazio
Dopo il trasferimento di Ciro Immobile, la fascia di capitano è stata affidata a Zaccagni. La decisione ha scatenato polemiche nello spogliatoio
Lazio
Dopo aver saltato quasi tutta la prima parte della stagione 2014-2015 per via di molteplici infortuni, fa il suo esordio con la maglia della società biancoceleste il 14 gennaio 2015, a 20 anni, in occasione degli ottavi di Coppa Italia, vinti per 1-3, contro il Torino dove serve l'assist a Klose per il gol del momentaneo 0-2. Il suo esordio in Serie A avviene il 18 gennaio, sostituendo Marco Parolo all'81º minuto della partita persa, per 0-1, contro il Napoli. Il 9 marzo 2015, nella vittoria casalinga, per 4-0, contro la Fiorentina, indossa per la prima volta la fascia da capitano dopo l'uscita di Stefano Mauri, divenendo così il più giovane calciatore ad aver indossato la fascia nella Lazio. Il 20 maggio 2015 perde la finale di Coppa Italia dove la Lazio viene superata dalla Juventus per 2-1. Conclude la prima stagione con la maglia della Lazio totalizzando 21 presenze.
La seconda stagione si apre l'8 agosto 2015, nella finale dove perde la Supercoppa italiana 2015, per 2-0, contro i Campioni d'Italia della Juventus. Il 1º ottobre successivo ottiene la sua prima presenza nelle coppe europee, in occasione della partita della fase a gironi di Europa League vinta per 3-2 contro il Saint-Étienne. Il 17 dicembre 2015 segna il suo primo gol con la maglia della Lazio, in occasione degli ottavi di finale di Coppa Italia contro l'Udinese; tale gol ha permesso ai suoi di vincere la partita per 2-1 e quindi di passare il turno. Il 24 gennaio 2016 invece arriva anche la prima marcatura in Serie A, in occasione della vittoria casalinga, per 4-1, contro il Chievo. Chiude la stagione con 27 presenze e 2 reti.
Prestiti a Genoa e Benevento
La stagione successiva va a segno nella prima gara della stagione contro l'Atalanta. Successivamente alterna campo a panchina e il 13 gennaio 2017 viene ceduto in prestito secco al Genoa fino a giugno dello stesso anno.[20] L'esordio arriva due giorni più tardi in occasione della trasferta persa, per 4-1, contro il Cagliari. Conclude la stagione con un bottino di 13 presenze.
Il 19 luglio 2017 viene ceduto, a titolo temporaneo con obbligo di riscatto in caso di permanenza in Serie A, al Benevento, squadra neopromossa. L'esordio arriva il 12 agosto successivo in occasione del terzo turno di Coppa Italia perso, per 0-4, contro il Perugia. Il 3 dicembre, al 90+5', serve l'assist al portiere Alberto Brignoli che vale lo storico pareggio delle streghe per 2-2 sul Milan. Il 31 marzo 2018 mette a segno la sua prima rete con indosso la maglia giallorossa; in occasione della sconfitta esterna, per 6-2, proprio contro la Lazio. A fine stagione il centrocampista romano non viene riscattato poiché il club campano viene retrocesso in Serie B; l'esperienza si conclude così con un bottino di 26 presenze e 1 rete.
Lazio
Il 18 agosto 2018, dopo un anno e sette mesi dall'ultima volta, torna a vestire la maglia biancoceleste in occasione della sconfitta interna, per 1-2, contro il Napoli. Il 4 novembre successivo torna anche al gol, in occasione della partita casalinga vinta, per 4-1, contro la SPAL. Nel corso della stessa stagione, il 2 marzo 2019, durante la stracittadina contro la Roma, sigla la rete del definitivo 3-0, è il suo primo gol in un derby. Conclude la stagione sollevando la Coppa Italia, anche se non disputa neanche una presenza nella competizione. Nella finale secca contro la Juventus disputata a Riyad il 22 dicembre 2019 sigla su punizione la rete del definitivo 3-1 per la Lazio, che si aggiudica la Supercoppa italiana Il 23 febbraio successivo, sempre su calcio piazzato realizza il momentaneo 1-3 contro il Genoa (la partita finirà 3 a 2 per i biancocelesti).
Nella stagione 2021-2022, con l'arrivo di Maurizio Sarri sulla panchina biancoceleste, guadagna spazio nelle gerarchie, venendo spesso schierato titolare, alternandosi con Lucas Leiva. Il 24 febbraio 2022, nell'incontro di ritorno dello spareggio di Europa League contro il Porto, mette a segno, allo scadere, il suo primo gol in una competizione europea, valevole per il 2 a 2 finale, che non consente ai capitolini di passare il turno. Chiude la stagione con 43 presenze in tutte le competizioni, segnando così il suo record personale di presenze stagionali.
La stagione seguente parte avanti rispetto al neoacquisto biancoceleste Marcos Antônio nelle gerarchie dell'allenatore toscano. Il 6 novembre vince il suo primo derby di Roma da capitano con la maglia della Lazio, complici le assenze del capitano Ciro Immobile e il suo vice Sergej Milinković-Savić, rispettivamente per infortunio e squalifica. Termina la stagione collezionando in totale 39 presenze e 1 assist, e contribuendo al raggiungimento del secondo posto in classifica in Serie A.
Nazionale
Il 16 maggio 2016 viene convocato dal Commissario Tecnico della nazionale italiana, Antonio Conte, per prendere parte ad uno stage di preparazione in vista del Campionato europeo di calcio 2016.[33] Il 5 novembre successivo viene selezionato dal nuovo CT Gian Piero Ventura per la gara valida per le qualificazioni alla Coppa del Mondo FIFA di Russia 2018 con il Liechtenstein e per l’amichevole con la Germania.[34] Il 31 maggio 2017 viene impiegato nella partita non ufficiale disputata dalla nazionale Sperimentale contro San Marino; la partita non viene calcolata come esordio poiché non riconosciuta da UEFA e FIFA.[35] Il 29 aprile 2019, viene convocato dal Commissario Tecnico Roberto Mancini presso il Centro tecnico federale di Coverciano, per uno stage della nazionale italiana, in preparazione alle qualificazioni del campionato europeo 2020. L'8 novembre 2021 viene convocato dal ct dopo 5 anni di assenza, in vista delle qualificazioni ai Mondiali 2022. (Wikipedia)