Esordisce nelle categorie minori con le minimoto. Nel 2014 fa il debutto nel campionato Italiano Velocità, nella categoria Pre Moto3 con moto due tempi, e chiude la stagione al 4º posto. L'anno successivo corre nella stessa categoria, migliorando il risultato della passata stagione chiudendo al 3º posto. Nel 2016 fa il salto nella categoria Moto3 con il team Mahindra Peugeot, concludendo al 3º posto con una vittoria in gara 2 a Vallelunga. Nel 2017 cambia il team ma non la categoria né il campionato, passa alla guida di una KTM gestita dal team Althea. Ottiene due successi e nell'occasione del Gran Premio di San Marino 2017 fa il suo debutto come wild card nel motomondiale, chiudendo la gara con un ritiro.[1] Nel 2018 rimane per la terza stagione consecutiva nel campionato Italiano Velocità nella categoria Moto3, questa annata col il team TM Racing Factory. Ottiene cinque successi e la corona di campione italiano Moto3 del 2018.[2] Oltre al suo impiego nel campionato italiano, corre sempre con lo stesso team nel campionato spagnolo categoria Moto3, e chiude al 27º posto. Il suo team, il TM Factory, in vista del GP di San Marino del motomondiale 2018 organizza una wild card e Zannoni chiude la gara al 20º posto. Nel 2019 continua con lo stesso team prendendo parte agli stessi campionati, il campionato Italiano e il mondiale junior. Inizia la stagione nel campionato italiano ottenendo tre successi consecutivi, riesce a restare in lotta per il campionato fino all'ultima prova a Vallelunga. Questa stagione partecipa come wild card al Gran Premio motociclistico d'Italia 2019, chiudendo con un ritiro, dovuto a un problema tecnico. Prima di partire per l'ultima gara del campionato italiano a Vallelunga viene chiamato a sostituire Niccolò Antonelli nel Gran Premio di Thailandia, con il team SIC58 Squadra Corse a bordo di una Honda NSF250R; Chiude la gara in 17ª posizione. Correndo in Thailandia rinuncia alla lotta al titolo nel campionato italiano, chiudendo la stagione al terzo posto. Nel 2020 cambia team, correndo con la Honda del team Junior Gresini, ma non cambia campionato, correndo per il quinto anno consecutivo nel campionato italiano Moto3, laureandosi con quattro successi campione italiano Moto3 del 2020, sopravanzando Alberto Surra e Vicente Perez.[3]
Nel 2021 corre nella classe MotoE del motomondiale, con il team LCR; il compagno di squadra è Miquel Pons. In occasione del Gran Premio di Misano ottiene il giro più veloce nella gara del sabato, chiude la stagione al 12º posto con 44 punti. Nella stessa stagione prende parte alla classe Supersport del Campionato Italiano Velocità con una Yamaha YZF-R6 con la quale conquista quarantasette punti ed il tredicesimo posto in classifica. Nel 2022 passa al team SIC58 rimanendo in MotoE. Disputa una stagione regolare andando a punti in tutte le gare tranne una (in cui si classifica sedicesimo) e chiude al decimo posto in classifica.[4] Nella stessa stagione prende parte anche alla classe Supersport (categoria 600CIV) nel Campionato Italiano Velocità dove ottiene due vittorie e si classifica al secondo posto.[5] Nel 2023 gareggia nuovamente come pilota titolare in MotoE con lo stesso team della stagione precedente, il compagno di squadra è Kevin Manfredi. In occasione del Gran Premio d'Austria ottiene la prima pole position e in gara i primi piazzamenti a podio nel contesto del motomondiale.[6] Chiude la stagione al nono posto in campionato.[7] Nel 2024 passa all'Aspar Team con Jordi Torres come compagno di squadra. Al Gran Premio di Catalogna ottiene la sua prima vittori iridata.[8] Dopo aver ottenuto una seconda vittoria al Mugello e altri piazzamenti a podio, chiude la stagione al quarto posto.[9]