La première partie de l'étape est globalement en montée et ponctuée par la longue ascension vers le Passo delle Radici (col de 2e catégorie). Dès le franchissement de ce col puis sa descente, l'immédiate montée de Monteperpoli (col de 4e catégorie, sommet à 76 km de l'arrivée) constitue la dernière difficulté du jour avant un profil sans beaucoup de relief jusqu'à l'arrivée au bord de la Mer de Ligurie, dans la station balnéaire toscane de Viareggio.
Non partant en raison d'un test positif au Covid-19, Remco Evenepoel a laissé le maillot rose à Geraint Thomas. Après plusieurs essais d'échappées et de regroupements partiels, un quatuor se forme et prend ses distances avec le peloton. Ces quatre attaquants sont Davide Bais (Eolo Kometa), Magnus Cort Nielsen (EF Education-EasyPost), Alessandro De Marchi (Jayco AlUla) et Derek Gee (Israel Premier Tech). Ils comptent jusqu'à 4 minutes et 45 secondes d'avance sur le peloton. Une fois le col de 2e catégorie du Passo delle Radici franchi en tête, Davide Bais, ayant obtenu les points utiles au classement du meilleur grimpeur, se relève et laisse filer ses trois compagnons d'échappée. Un contre de quatre hommes dont trois appartiennent à l'équipe Bahrain Victorious s'organise derrière les trois fuyards mais cette tentative de contre est annihilée par le peloton à 67 km de l'arrivée. La pluie rendant les routes glissantes provoque plusieurs chutes au sein du peloton. Bien que le peloton revienne à 40 secondes des fuyards à 5 kilomètres du terme, les trois coureurs échappés résistent et se disputent la victoire. Gee attaque juste avant la flamme rouge mais ne creuse pas un écart suffisant et, dans la dernière ligne droite, Magnus Cort Nielsen distance ses adversaires et s'impose facilement à Viareggio.