L'Ukrainien Yuriy Krivtsov (AG2R La Mondiale) s'échappe dès le premier kilomètre de course. Au troisième kilomètre, il est rejoint par Mickaël Buffaz (Cofidis). Leur avance montera jusqu'à près de onze minutes. Ils passent les premiers au sprint intermédiaire et au Grand prix de la montagne sans se disputer les points, au contraire d'Emanuele Sella qui s'échappe temporairement du peloton pour acquérir les derniers points au sommet de la côte.
Au premier passage sur la ligne d'arrivée, Krivtsov et Buffaz n'ont plus qu'une minute et 45 secondes d'avance. À vingt kilomètres de l'arrivée, Paolo Bettini, Riccardo Riccò et Emanuele Sella attaquent en tête du peloton. Bettini et Ricco cessent rapidement leur effort, tandis que Sella rejoint puis distance les deux hommes de tête. Le peloton, lancé par les équipes des sprinters, procède néanmoins au regroupement à dix kilomètres du but.
À 300 mètres, le sprinter de l'équipe Gerolsteiner Oscar Gatto accélère brutalement à gauche de la chaussée et prend quelques mètres d'avance sur les autres sprinters. Ces derniers le dépassent dans le dernier hectomètre. Daniele Bennati s'impose de quelques centimètres sur Bettini, déjà deuxième la veille, et Robbie McEwen. Il reprend le maillot cyclamen du classement par points cédé la veille à Riccardo Riccò[3],[4].