La deuxième étape de ce grand départ du Pays basque espagnol présente, comme la première étape, un profil accidenté. Le parcours s'oriente globalement vers le nord-est, reliant la capitale administrative basque Vitoria-Gasteiz, éloignée dans les terres, à la capitale touristique basque Saint-Sébastien, située sur la côte cantabrique. Longue de 208,9 kilomètres, il s'agit de l'étape la plus longue de cette 110e édition du Tour de France.
Le tracé débute par la traversée d'un long plateau sur près de cinquante kilomètres à cinq cents mètres d'altitude. Le sprint intermédiaire prend place à Legutio (km 40,6). S'ensuit quatre courtes ascensions : le col d'Udana (3e catégorie, km 81, 4,5 km à 5,1 %), la côte d'Aztiria (4e catégorie, km 87,5, 2,7 km à 5,3 %), la côte d'Alkiza (3e catégorie, km 141, 4,2 km à 5,7 %) et la côte de Gurutze (4e catégorie, km 174, 2,6 km à 4,7 %).
Le final de l'étape emprunte des routes connues de la Classique de Saint-Sébastien, avec l'ultime col au programme, l'Alto de Jaizkibel, (2e catégorie, km 192,5, 8,1 km à 5,3 %), dont le sommet se situe à 16 500 m de l'arrivée en bord de mer, à Saint-Sébastien[1].
Victime d'une chute la veille, l'Équatorien Richard Carapaz (EF Education-EasyPost) est non partant[2].
Le départ réel est retardé de quelques minutes à la suite de la crevaison du Belge Stan Dewulf (AG2R Citroën). De nombreux coureurs présentent de l'intérêt pour la formation d'une échappée ; finalement, elle n'est composée que de trois coureurs : le maillot à pois, l'Américain Neilson Powless (EF Education-EasyPost), le Français Rémi Cavagna (Soudal Quick-Step) et le Norvégien Edvald Boasson Hagen (TotalEnergies). Au sprint intermédiaire de Legutio, Boasson Hagen devance Cavagna ; dans le peloton, à quatre minutes et vingt-neuf secondes, le Belge Jasper Philipsen (Alpecin-Deceuninck) précède l'Australien Sam Welsford (DSM-Firmenich).
Fort et légitimé par son maillot à pois, Neilson Powless passe en tête au sommet des deux premières ascensions, le col d'Udana (3e catégorie, km 81, 4,5 km à 5,1 %) et la côte d'Aztiria (4e catégorie, km 87,5, 2,7 km à 5,3 %) ; l'écart avec le peloton en-haut de cette dernière est de trois minutes et vingt-cinq secondes. A Tolosa, l'échappée compte deux minutes et quarante-deux secondes d'avance sur le peloton. Dans la côte d'Alkiza (3e catégorie, km 141, 4,2 km à 5,7 %), Rémi Cavagna est repris par le peloton ; au sommet, Neilson Powless passe en tête devant Boasson Hagen, avec une minute et cinquante-et-une secondes d'avance sur le peloton. L'Américain passe de nouveau en tête au sommet de la côte de Gurutze (4e catégorie, km 174, 2,6 km à 4,7 %), avec trente-neuf secondes d'avance sur le Norvégien ; le peloton compte un débours d'une minute et cinquante-cinq secondes.
Au pied de la montée finale du Jaizkibel (2e catégorie, km 192,5, 8,1 km à 5,3 %), Neilson Powless compte une avance d'une minute et vingt-neuf secondes sur le peloton ; il est finalement repris à 2 700 mètres du sommet, dans les plus durs pourcentages. Le rythme imprimé par l'équipe UAE Emirates du maillot jaune britannique Adam Yates et du maillot blanc slovène Tadej Pogačar essore progressivement le peloton. Au sommet, ce dernier passe en tête, suivi comme son ombre par le Danois Jonas Vingegaard (Jumbo-Visma), tous deux y récupèrent des secondes de bonifications. Dans la descente, le vainqueur du Tour de France 2022 refuse de collaborer, provoquant le regroupement de vingt-quatre coureurs, dans lequel se trouvent, entre autres, les frères jumeaux Adam et Simon Yates (Jayco AlUla), les trois derniers vainqueurs différents du Tour de France (le Colombien Egan Bernal (INEOS Grenadiers), Tadej Pogačar et Jonas Vingegaard), le Britannique Thomas Pidcock (INEOS Grenadiers), l'Australien Jai Hindley (Bora-Hansgrohe), le Belge Wout van Aert (Jumbo-Visma) ultra-favori en cas d'arrivée groupée, le Danois Mattias Skjelmose Jensen (Lidl-Trek), les deux Espagnols Pello Bilbao et Mikel Landa (Bahrain Victorious), les deux Français Romain Bardet (DSM-Firmenich) et David Gaudu (Groupama-FDJ), l'Italien Giulio Ciccone (Lidl-Trek).
Certains coureurs, prétendants à la victoire finale, sont piégés dans l'ascension du Jaizkibel, comme : l'Australien Ben O'Connor (AG2R Citroën), les trois Français Julian Alaphilippe (Soudal Quick-Step), Guillaume Martin (Cofidis) et Thibaut Pinot (Groupama-FDJ), le Norvégien Tobias Halland Johannessen (Uno-X) ou encore le Sud-africain Louis Meintjes (Intermarché-Circus-Wanty).
A 10 kilomètres de l'arrivée, Pello Bilbao tente de s'échapper, il est repris à 5 400 mètres de l'arrivée, moment où le champion d'Allemagne Emanuel Buchmann (Bora-Hansgrohe) décide d'attaquer, il est également repris, près de huit cents mètres plus tard. A trois kilomètres de l'arrivée, Tom Pidcock attaque à son tour, mais il est immédiatement suivi par Wout van Aert. A 2 500 mètres du but final, Mattias Skjelmose Jensen tente également, en vain. Sous la flamme rouge, le Français Victor Lafay (Cofidis) place une attaque tranchante, il résiste au retour du groupe maillot jaune, emmené par Wout van Aert, et gagne avec quelques mètres d'avance sur le Belge et Tadej Pogačar, mettant désormais fin à quinze années de disette de l'équipe Cofidis sur le Tour de France, première victoire d'étape donc depuis le Français Sylvain Chavanel à Montluçon en 2008[3]. Le groupe de sept coureurs dans lequel se situe Ben O'Connor coupe la ligne avec un retard de cinquante-huit secondes. Le groupe de treize coureurs, avec Alaphilippe et Pinot, compte finalement un débours de deux minutes et vingt-cinq secondes.
Au niveau des différents classements : Adam Yates conserve son maillot jaune, tout comme son coéquipier Tadej Pogačar avec le maillot blanc et comme Neilson Powless avec son maillot à pois, il glane également le prix de la combativité. L'équipe Jumbo-Visma reste à la tête du classement par équipes. Grâce à sa victoire d'étape, Victor Lafay hérite du maillot vert.