La 10e étape est complètement plate avec de larges routes droites pour traverser la plaine du Pô. Les coureurs composent avec des aménagements routiers dans les zones urbaines, des ronds-points, terre-pleins et barrières, ralentisseurs. L'arrivée est une ligne droite de 1500 mètres de long et 8 mètres de large.
Le peloton composé de 163 coureurs passe le kilomètre 0 à 13 h 59 et deux coureurs tentent immédiatement de partir, ce sont Sho Hatsuyama et Luca Covili. Le peloton semble laisser filer les deux hommes, l'écart monte rapidement à 4 minutes et les Groupama-FDJ et Deceuninck-Quick Step sont les premiers à rouler derrière. Lors de la première heure de course, le duo de tête couvre 38,1 kilomètres. L'écart à 100 kilomètres de l'arrivée est de 2 minutes 40, les équipes de sprinteurs contrôlent l'écart sur les échappées. Lors du premier sprint intermédiaire, Covili passe devant son compagnon de tête, Arnaud Démare prend la troisième place devant Pascal Ackermann. Lors du second sprint, Hatsuyama prend les 3 secondes de bonifications. Mais, le duo de tête est repris juste après la banderole des 30 derniers kilomètres.
Dans les 20 derniers kilomètres, le sprint se prépare et le peloton roule sur des routes larges. Quelques coureurs se font une frayeur au passage d'une ville, on roule à plus de 47 km/h à l'avant du peloton. À l'avant du groupe, on retrouve pas moins de sept trains dont les Lotto Soudal, Mitchelton-Scott, Bahrain-Merida. Thomas De Gendt étire le peloton pour son coéquipier Caleb Ewan, les Groupama-FDJ remontent à l'avant et Francisco Ventoso sort à 2,5 kilomètres de l'arrivée. Dans le dernier kilomètre, une grosse chute a lieu dans le peloton. Pascal Ackermann fait partie des coureurs qui tombent. Francisco Ventoso est repris juste après et c'est Caleb Ewan qui lance son sprint. Arnaud Démare qui a pris l'autre côté de la route s'impose devant Elia Viviani et Rüdiger Selig. L'Italien Valerio Conti conserve son maillot rose.