Après un crochet vers le sud-ouest comprenant le franchissement après 36 km du col de Pedaggera (col de 3e catégorie), le tracé de la douzième étape s'oriente vers le nord-est et se dirige vers Rivoli par un parcours relativement plat. Les coureurs franchissent une première fois la ligne d'arrivée avant d'accomplir une boucle de 53 kilomètres. Cette boucle grimpe le Colle Braida, un col de 2e catégorie (sommet à 28 km de l'arrivée) avant de rejoindre par un final descendant puis assez vallonné jusqu'à l'arrivée à Rivoli.
Déroulement de la course
En début d'étape, Marco Frigo (Israel Premier Tech) et Davide Formolo (UAE Emirates) attaquent et se retrouvent en tête de la course. Mais ils sont bientôt rejoints par un important groupe de 24 hommes et, après l'ascension de Pedaggera (col de 3e catégorie, sommet après 36 km de course), par quatre autres coureurs. Un imposant groupe de 30 unités se retrouve dès lors aux commandes de l'étape. 18 des 22 équipes du Giro 2023 sont représentées dans ce groupe de tête. Seules les équipes Ineos Grenadiers, DSM, Arkéa-Samsic et Groupama-FDJ ne comptent aucun coureur parmi les attaquants. À 92 km de l'arrivée, cinq coureurs sortent du groupe de tête. Perdant rapidement Samuele Battistella, ils se retrouvent à quatre en tête : Nico Denz (Bora-Hansgrohe), Sebastian Berwick (Israel Premier Tech), Alessandro Tonelli (Green Project-Bardiani) et Toms Skujiņš (Trek Segafredo) et creusent un écart sur leurs anciens compagnons d'échappée. Au premier passage sur la ligne d'arrivée de Rivoli (53 km à parcourir), le quatuor de tête possède une avance de plus de 3 minutes sur les premiers poursuivants dont se sont extraits Alex Baudin (AG2R), Christian Scaroni (Astana) et Alberto Bettiol (EF Education) et presque 9 minutes sur le peloton. Au Colle Braida (9,8 km, col de 2e catégorie), Skujiņš, Berwick et Denz passent en tête, Tonelli ayant été distancé d'une quarantaine de secondes. À Rivoli, le sprint à trois est lancé et l'Allemand Nico Denz franchit la ligne en vainqueur devant Toms Skujiņš. Le peloton avec tous les favoris termine à plus de 8 minutes.