| # | Rider | Team | Time | Gap |
|---|---|---|---|---|
| 1 | Ethan Hayter | INEOS Grenadiers | 28:26:23 | |
| 2 | Thymen Arensman | Team DSM | + 11 | + 11 |
| 3 | Pello Bilbao | Bahrain Victorious | + 18 | + 18 |
| 4 | Matteo Sobrero | Team BikeExchange-Jayco | + 23 | + 23 |
| 5 | Ben Tulett | INEOS Grenadiers | + 25 | + 25 |
| 6 | Remi Cavagna | Quick-Step Alpha Vinyl Team | + 31 | + 31 |
| 7 | Samuele Battistella | Astana Qazaqstan Team | + 32 | + 32 |
| 8 | Sergio Higuita | BORA-hansgrohe | + 32 | + 32 |
| 9 | Diego Ulissi | UAE Team Emirates | + 45 | + 45 |
| 10 | Bruno Armirail | Groupama-FDJ | + 50 | + 50 |
| 11 | Marco Brenner | Team DSM | + 51 | + 51 |
| 12 | Sylvain Moniquet | Lotto-Soudal | + 51 | + 51 |
| 13 | Mark Padun | EF Education-EasyPost | + 52 | + 52 |
| 14 | Harold Tejada | Astana Qazaqstan Team | + 53 | + 53 |
| 15 | Felix Gall | AG2R Citroën Team | + 56 | + 56 |
| 16 | Quentin Pacher | Groupama-FDJ | + 01:01 | + 01:01 |
| 17 | Dorian Godon | AG2R Citroën Team | + 01:07 | + 01:07 |
| 18 | Simon Carr | EF Education-EasyPost | + 01:07 | + 01:07 |
| 19 | Lucas Hamilton | Team BikeExchange-Jayco | + 01:07 | + 01:07 |
| 20 | Quinten Hermans | Intermarché-Wanty-Gobert Matériaux | + 01:08 | + 01:08 |
| 21 | Sean Quinn | EF Education-EasyPost | + 01:10 | + 01:10 |
| 22 | Richard Carapaz | INEOS Grenadiers | + 01:12 | + 01:12 |
| 23 | Giovanni Aleotti | BORA-hansgrohe | + 01:14 | + 01:14 |
| 24 | Sebastian Berwick | Israel-Premier Tech | + 01:23 | + 01:23 |
| 25 | Steff Cras | Lotto-Soudal | + 01:26 | + 01:26 |
| 26 | Mauri Vansevenant | Quick-Step Alpha Vinyl Team | + 01:30 | + 01:30 |
| 27 | Idar Andersen | Uno-X Pro Cycling Team | + 01:34 | + 01:34 |
| 28 | Jakub Kaczmarek | Poland | + 01:38 | + 01:38 |
| 29 | Davide Formolo | UAE Team Emirates | + 01:55 | + 01:55 |
| 30 | Abner González | Movistar Team | + 01:57 | + 01:57 |
| 31 | Nikias Arndt | Team DSM | + 02:04 | + 02:04 |
| 32 | William Barta | Movistar Team | + 02:16 | + 02:16 |
| 33 | Laurens Huys | Intermarché-Wanty-Gobert Matériaux | + 02:28 | + 02:28 |
| 34 | Edoardo Zambanini | Bahrain Victorious | + 02:28 | + 02:28 |
| 35 | Jefferson Cepeda | Caja Rural-Seguros RGA | + 02:31 | + 02:31 |
| 36 | Thomas Champion | Cofidis | + 02:32 | + 02:32 |
| 37 | Eduard Prades | Caja Rural-Seguros RGA | + 02:36 | + 02:36 |
| 38 | Mads Würtz Schmidt | Israel-Premier Tech | + 02:40 | + 02:40 |
| 39 | Alexandre Delettre | Cofidis | + 02:40 | + 02:40 |
| 40 | Sergio Martin | Caja Rural-Seguros RGA | + 02:52 | + 02:52 |
| 41 | Juri Hollmann | Movistar Team | + 02:55 | + 02:55 |
| 42 | Óscar Rodríguez | Movistar Team | + 03:05 | + 03:05 |
| 43 | Antonio Tiberi | Trek-Segafredo | + 03:13 | + 03:13 |
| 44 | Hugo Page | Intermarché-Wanty-Gobert Matériaux | + 03:15 | + 03:15 |
| 45 | Andrea Vendrame | AG2R Citroën Team | + 03:18 | + 03:18 |
| 46 | Michael Schär | AG2R Citroën Team | + 03:33 | + 03:33 |
| 47 | Stephen Williams | Bahrain Victorious | + 03:52 | + 03:52 |
| 48 | Stake Laengen Vegard | UAE Team Emirates | + 03:55 | + 03:55 |
| 49 | Reto Hollenstein | Israel-Premier Tech | + 04:09 | + 04:09 |
| 50 | Jhonnatan Narvaez | INEOS Grenadiers | + 04:14 | + 04:14 |
| 51 | Michael Hepburn | Team BikeExchange-Jayco | + 05:03 | + 05:03 |
| 52 | Kaden Groves | Team BikeExchange-Jayco | + 05:04 | + 05:04 |
| 53 | Edward Theuns | Trek-Segafredo | + 05:13 | + 05:13 |
| 54 | Antoine Raugel | AG2R Citroën Team | + 05:16 | + 05:16 |
| 55 | Filip Maciejuk | Bahrain Victorious | + 05:19 | + 05:19 |
| 56 | Max Kanter | Movistar Team | + 06:02 | + 06:02 |
| 57 | Zdenek Stybar | Quick-Step Alpha Vinyl Team | + 06:11 | + 06:11 |
| 58 | Arnaud Démare | Groupama-FDJ | + 06:20 | + 06:20 |
| 59 | Nans Peters | AG2R Citroën Team | + 06:24 | + 06:24 |
| 60 | Tosh van der Sande | Jumbo-Visma | + 06:25 | + 06:25 |
| 61 | Alessandro de Marchi | Israel-Premier Tech | + 06:38 | + 06:38 |
| 62 | Michal Schlegel | Caja Rural-Seguros RGA | + 06:56 | + 06:56 |
| 63 | Michel Heßmann | Jumbo-Visma | + 07:10 | + 07:10 |
| 64 | Rui Oliveira | UAE Team Emirates | + 07:13 | + 07:13 |
| 65 | Mick van Dijke | Jumbo-Visma | + 07:23 | + 07:23 |
| 66 | Yevgeniy Fedorov | Astana Qazaqstan Team | + 07:38 | + 07:38 |
| 67 | Anders Skaarseth | Uno-X Pro Cycling Team | + 07:40 | + 07:40 |
| 68 | Cesare Benedetti | BORA-hansgrohe | + 08:06 | + 08:06 |
| 69 | Jarrad Drizners | Lotto-Soudal | + 08:08 | + 08:08 |
| 70 | Julen Amezqueta | Caja Rural-Seguros RGA | + 08:13 | + 08:13 |
| 71 | Jonathan Milan | Bahrain Victorious | + 08:17 | + 08:17 |
| 72 | Cristian Scaroni | Astana Qazaqstan Team | + 08:30 | + 08:30 |
| 73 | Jonas Gregaard | Uno-X Pro Cycling Team | + 09:08 | + 09:08 |
| 74 | Stanislaw Aniolkowski | Poland | + 09:53 | + 09:53 |
| 75 | Daan Hoole | Trek-Segafredo | + 10:00 | + 10:00 |
| 76 | Iversby Hvideberg Jonas | Team DSM | + 10:28 | + 10:28 |
| 77 | Ignatas Konovalovas | Groupama-FDJ | + 11:14 | + 11:14 |
| 78 | Lawson Craddock | Team BikeExchange-Jayco | + 12:35 | + 12:35 |
| 79 | Marijn van den Berg | EF Education-EasyPost | + 12:53 | + 12:53 |
| 80 | Michele Gazzoli | Astana Qazaqstan Team | + 12:58 | + 12:58 |
| 81 | Magnus Sheffield | INEOS Grenadiers | + 13:04 | + 13:04 |
| 82 | Marcin Budzinski | Poland | + 13:16 | + 13:16 |
| 83 | Olav Kooij | Jumbo-Visma | + 13:18 | + 13:18 |
| 84 | Pascal Ackermann | UAE Team Emirates | + 13:56 | + 13:56 |
| 85 | Sebastian Molano | UAE Team Emirates | + 14:00 | + 14:00 |
| 86 | Jens Keukeleire | EF Education-EasyPost | + 14:21 | + 14:21 |
| 87 | Tom Bohli | Cofidis | + 15:29 | + 15:29 |
| 88 | Taj Jones | Israel-Premier Tech | + 16:38 | + 16:38 |
| 89 | Alex Dowsett | Israel-Premier Tech | + 18:25 | + 18:25 |
| 90 | Bram Welten | Groupama-FDJ | + 18:45 | + 18:45 |
| 91 | Peter Kusztor | Team Novo Nordisk | + 19:07 | + 19:07 |
| 92 | Kamil Malecki | Lotto-Soudal | + 21:14 | + 21:14 |
| 93 | Diego Camargo | EF Education-EasyPost | + 21:23 | + 21:23 |
| 94 | Boy van Poppel | Intermarché-Wanty-Gobert Matériaux | + 21:56 | + 21:56 |
| 95 | David Lozano | Team Novo Nordisk | + 22:00 | + 22:00 |
| 96 | Jakub Murias | Poland | + 22:20 | + 22:20 |
| 97 | Heinrich Haussler | Bahrain Victorious | + 22:37 | + 22:37 |
| 98 | Matthias Brändle | Israel-Premier Tech | + 22:54 | + 22:54 |
| 99 | Thomas de Gendt | Lotto-Soudal | + 23:25 | + 23:25 |
| 100 | Julius Johansen | Intermarché-Wanty-Gobert Matériaux | + 24:02 | + 24:02 |
| 101 | Davide Cimolai | Cofidis | + 24:47 | + 24:47 |
| 102 | Yevgeniy Gidich | Astana Qazaqstan Team | + 24:51 | + 24:51 |
| 103 | Emils Liepins | Trek-Segafredo | + 24:58 | + 24:58 |
| 104 | Piotr Brozyna | Poland | + 25:22 | + 25:22 |
| 105 | Bert van Lerberghe | Quick-Step Alpha Vinyl Team | + 26:01 | + 26:01 |
| 106 | Kelland O'brien | Team BikeExchange-Jayco | + 26:08 | + 26:08 |
| 107 | Phil Bauhaus | Bahrain Victorious | + 26:28 | + 26:28 |
| 108 | Gerben Thijssen | Intermarché-Wanty-Gobert Matériaux | + 26:34 | + 26:34 |
| 109 | Niklas Märkl | Team DSM | + 26:34 | + 26:34 |
| 110 | Sam Bennett | BORA-hansgrohe | + 26:54 | + 26:54 |
| 111 | Roger Kluge | Lotto-Soudal | + 27:28 | + 27:28 |
| 112 | Jacopo Mosca | Trek-Segafredo | + 28:10 | + 28:10 |
| 113 | Davide Martinelli | Astana Qazaqstan Team | + 28:25 | + 28:25 |
| 114 | Oliviero Troia | UAE Team Emirates | + 28:58 | + 28:58 |
| 115 | Elia Viviani | INEOS Grenadiers | + 29:36 | + 29:36 |
| 116 | Sam Welsford | Team DSM | + 29:41 | + 29:41 |
| 117 | Josef Cerný | Quick-Step Alpha Vinyl Team | + 29:50 | + 29:50 |
| 118 | Salvatore Puccio | INEOS Grenadiers | + 30:05 | + 30:05 |
| 119 | Iuri Leitao | Caja Rural-Seguros RGA | + 30:10 | + 30:10 |
| 120 | Andrea Peron | Team Novo Nordisk | + 30:20 | + 30:20 |
| 121 | Ryan Mullen | BORA-hansgrohe | + 30:28 | + 30:28 |
| 122 | Jacopo Guarnieri | Groupama-FDJ | + 30:47 | + 30:47 |
| 123 | Syver Wærsted | Uno-X Pro Cycling Team | + 31:19 | + 31:19 |
| 124 | Mateusz Grabis | Poland | + 32:51 | + 32:51 |
| 125 | Joris Nieuwenhuis | Team DSM | + 33:34 | + 33:34 |
| 126 | Lukasz Wisniowski | EF Education-EasyPost | + 33:40 | + 33:40 |
| 127 | Patryk Stosz | Poland | + 36:43 | + 36:43 |