De Roanne (Loire) à Belleville-en-Beaujolais (Rhône), le parcours relie la vallée de la Loire à celle de la Saône, à travers le Beaujolais. De profil accidenté, l'étape traverse le célèbre vignoble du Beaujolais.
Dans les quarante premiers kilomètres, le parcours est jalonné de deux ascensions : la côte de Thizy-les Bourgs (3e catégorie, km 20,5, 4,3 km à 5,6 %) et le col des Écorbans (3e catégorie, km 38, 2,1 km à 6,9 %). Le sprint intermédiaire est situé à Régnié-Durette (km 93,3). La seconde partie de l'étape est constituée de trois ascensions répertoriées au grand prix de la montagne : le col de la Casse Froide (3e catégorie, km 110, 5,2 km à 6,1 %), le col de la Croix Montmain (2e catégorie, km 125, 5,5 km à 6,1 %) et le col de la Croix Rosier (2e catégorie, km 140,5, 5,3 km à 7,6 %, bonus au sommet). Après cet ultime col, le final reste accidenté, notamment par le détour du mont Brouilly. La ligne d'arrivée à Belleville-en-Beaujolais est précédée d'une légère montée (500 m à 2 %) ; la dernière ligne droite mesure environ 400 m et est précédée d'un virage à 90°[1].
Victime d'une chute lors de la 4e étape, le Néerlandais Fabio Jakobsen (Soudal Quick-Step) ne se remet pas de ses blessures et est non partant[2].
Dès le kilomètre zéro, la formation d'une échappée est très disputée. Au sommet de la côte de Thizy-les Bourgs km 20,5 (3e catégorie, 4,3 km à 5,6 %), le Colombien Daniel Martínez (INEOS Grenadiers) passe en tête, suivi par le peloton. Dans la descente de la côte de Thizy-les-Bourgs, l'Espagnol David de la Cruz (Astana Qazaqstan) chute avec le Français Quentin Pacher (Groupama-FDJ), l'Espagnol est contraint à l'abandon. Un groupe de piégés se constitue, dans lequel se trouve le maillot à pois américain Neilson Powless (EF Education-EasyPost) et l'Australien Ben O'Connor (AG2R Citroën). Au col des Écorbans km 38 (3e catégorie, 2,1 km à 6,9 %), l'Italien Giulio Ciccone (Lidl-Trek) passe en tête du groupe maillot jaune, avec cinquante-six secondes d'avance sur le groupe de poursuivants et près de trois minutes sur le groupe maillot vert. Dans la descente, le Belge Wout van Aert (Jumbo-Visma) part seul et devance d'une dizaine de secondes le groupe maillot jaune. Un temps piégé, un groupe de coureurs, dans lequel figure, entre autres, les deux frères jumeaux britanniques Adam (UAE Emirates) et Simon Yates (Jayco AlUla) et le Français David Gaudu (Groupama-FDJ), fait son retour dans le groupe de tête.
Au niveau du col du Fût d'Avenas (km 63,3), un duo, composé des deux Belges Tiesj Benoot (Jumbo-Visma) et Dylan Teuns (Israel-Premier Tech), compte une avance de quinze secondes sur le groupe maillot jaune. De nouveaux coureurs intègrent la tête de la course jusqu'à Fleurie, formant la première réelle échappée de cette journée. Ce groupe est composé de douze coureurs : l'Américain Matteo Jorgenson (Movistar), les deux Belges à l'initiative ainsi que Victor Campenaerts (Lotto Dstny), le Costaricien Andrey Amador (EF Edcuation-EasyPost), le Danois Mads Pedersen (Lidl-Trek), l'Espagnol Ion Izagirre (Cofidis), les trois Français Mathieu Burgaudeau (TotalEnergies), Guillaume Martin (Cofidis) et Thibaut Pinot (Groupama-FDJ), le Néerlandais Mathieu van der Poel (Alpecin-Decenuninck), le Norvégien Tobias Halland Johannessen (Uno-X) et le Portugais Ruben Guerreiro (Movistar). En contre, le Français Julian Alaphilippe (Soudal Quick-Step) et le Belge Jasper Stuyven (Lidl-Trek) parviennent à revenir sur les coureurs de front au sprint intermédiaire. Le groupe d'échappés est composé désormais de quinze coureurs.
Au sprint intermédiaire de Régnié-Durette (km 93,3), Mads Pedersen devance l'échappée. À 60 km de l'arrivée, l'avance des hommes de tête est de trois minutes sur le groupe maillot jaune, cinq minutes sur le groupe maillot à pois et près de douze minutes sur le groupe maillot vert. Au col de la Casse-Froide km 110 (3e catégorie, 5,2 km à 6,1 %), Guillaume Martin passe en tête, avec deux minutes et vingt-cinq secondes d'avance sur le groupe maillot jaune, emmené par AG2R Citroën, et plus de cinq minutes sur le groupe maillot à pois. Dans la descente, Andrey Amador et Mathieu van der Poel partent à l'avant pour prendre de l'avance sur la prochaine ascension : le col de la Croix Montmain km 125 (2e catégorie, 5,5 km à 6,1 %). Au début de l'ascension, van der Poel et Amador ont trente secondes d'avance sur le groupe de poursuivants avec Pinot et Alaphilippe entre autres. Dans la montée, sous l'impulsion de Thibaut Pinot, quelques coureurs sont distancés dont Alaphilippe. Après avoir lâché Amador, van der Poel passe en tête au col avec 20 secondes d'avance et entame seul la montée du col de la Croix Rosier, km 140 (2e catégorie, 5,3 km à 7,6%). Pinot et Jorgenson qui se sont extraits du groupe des poursuivants rattrapent van der Poel. À trois kilomètres du col, ils sont huit à l'avant dont l'Espagnol Izagirre qui place une attaque. Ce dernier passe le col en tête avec quinze secondes d'avance sur le petit groupe Pinot, le groupe maillot jaune est alors à quatre minutes. À treize kilomètres de l'arrivée, l'Espagnol à quarante cinq secondes d'avance. Izagirre profite de la désorganisation du groupe des poursuivants pour filer vers la victoire. Jorgensen et Burgaudeau se détachent pour se disputer la deuxième place. Ion Izagirre s'impose en solitaire à Belleville-en-Beaujolais. Le Français Burgaudeau prend la deuxième place devant l'Américain Jorgensen[3].