Membre de l'échappée matinale, Filippo Ganna s'adjuge l'étape, après avoir distancé à 5 km du sommet de la dernière ascension Thomas De Gendt (Lotto-Soudal) et Einer Rubio (Movistar), sortis du peloton dès le début de la montée. Les différents poursuivants sont repris dans le col. Après avoir pris la 4e place au sommet de la première ascension du jour, Ganna profite de son passage en tête du dernier col, devant Pozzovivo et Fuglsang, pour s'emparer du maillot bleu. L'italien devance à l'arrivée de 34 secondes le groupe maillot rose, réglé par Patrick Konrad (Bora-Hansgrohe) devant João Almeida. Brandon McNulty termine à 2 minutes 14 du vainqueur, Jonathan Caicedo à 16 minutes 34. Almeida conforte ainsi son maillot rose, avec désormais 43 secondes d'avance sur Bilbao et 48 sur Kelderman. McNulty et Caicedo sortent du Top 10, ce qui profite principalement à Konrad et Majka, désormais 9e et 10e à environ 1 minute 30 du leader.