Le Tour de Lombardie part de Bergame et arrive à Côme après 241 km[1]. Ce parcours est raccourci de 6 km par rapport à l'édition précédente. Le début de la course emprunte des routes plates, à travers la plaine bergamasque. La première difficulté est le Colle Gallo(it), montée de 7,5 km qui commence après 47 km. La course se dirige ensuite vers le lac de Côme, en passant par le Colle di Brianza(en). Les principales difficultés sont concentrées dans les 70 derniers kilomètres. La montée vers la Madonna del Ghisallo, longue de 8,5 km, présente une pente moyenne de 6%, avec un maximum à 14%. Elle est suivie par le mur de Sormano, difficulté courte (moins de deux kilomètres), mais avec une pente moyenne de 15,8% et des passages raides à 27%. Après la descente et quelques kilomètres sur les rives du lac de Côme, les coureurs abordent la montée vers Civiglio(it) à moins de vingt kilomètres de l'arrivée (4,2 km à 9,7%). À trois kilomètres de l'arrivée, le Monte Olimpino(it) remplace la côte de San Fermo della Battaglia à cause d'un risque de glissement de terrain[1],[3].
Le Tour de Lombardie faisant partie du calendrier de l'UCI World Tour, les dix-huit « World Teams » y participent. Six équipes continentales professionnelles sont également invitées par les organisateurs[4],[5].
Une échappée de huit coureurs se forment après une vingtaine de kilomètres de courses. Elle comprend Davide Ballerini (Androni Giocattoli-Sidermec), Umberto Orsini, Alessandro Tonelli (Bardiani-CSF), Florian Sénéchal (Quick-Step Floors), Franck Bonnamour (Fortuneo-Samsic), Jhonatan Restrepo (Katusha-Alpecin), Michael Storer (Sunweb) et Marco Marcato (UAE Team Emirates). Ils comptent six minutes d'avance au Colle Gallo puis au Colle di Brianza. L'équipe Movistar, du nouveau champion du monde Alejandro Valverde, contrôle le peloton jusqu'à la côte de la Madonna del Ghisallo, où l'équipe Bahrain-Merida accélère. Le groupe de tête perd des coureurs. Seuls Orsini, Tonelli, Storer et Bonnamour restent en tête, avec moins de deux minutes d'avance à 60 km de l'arrivée.
La course « explose » dans le mur de Sormano. Les derniers coureurs échappés sont rejoints. À 50 km de l'arrivée, Primož Roglič (LottoNL-Jumbo) attaque. Il est rejoint par le tenant du titre, Vincenzo Nibali (Bahrain-Merida) et Thibaut Pinot (Groupama-FDJ). Les trois coureurs passent en tête au sommet. Ils sont rejoints par Egan Bernal (Sky) en bas de la descente. Ce groupe compte 40 secondes d'avance lorsqu'il aborde la montée de Civiglio. Roglič et Bernal y sont distancés par Nibali et Pinot. Après plusieurs tentatives, ce dernier parvient à s'échapper seul à la fin de la côte, à quatorze kilomètres de l'arrivée. Nibali ne parvient pas à le suivre. Il part s'imposer en solitaire, trois jours après sa victoire sur Milan-Turin. Nibali, rattrapé par un groupe de poursuivants, parvient à s'en échapper et passe la ligne d'arrivée 32 secondes après Pinot. À 43 secondes, un groupe de six coureurs arrive et est réglé au sprint par Teuns, troisième de la course[6],[7].
La course distribue aux soixante premiers coureurs les points suivants pour le classement individuel de l'UCI World Tour (uniquement pour les coureurs membres d'équipes World Tour) et le Classement mondial UCI (pour tous les coureurs) :
Les premières places des classements UCI World Tour ne changent pas à l'issue de ce Tour de Lombardie. Simon Yates garde la première place du classement individuel devant Peter Sagan et Alejandro Valverde[9].