After an undulating day of racing in Sicily, the race came down to a final 3.7km uphill dash to the finish, with Ulissi breaking free of the peloton a kilometre from the line.
Sagan (Bora-Hansgrohe) put in a huge burst to bridge across to Ulissi and Mikkel Honoré (Deceuninck - Quick-Step), but the effort compromised Sagan's sprint as Ulissi kicked on the final ramp 50 metres from the finish to claim the stage.
Filippo Ganna (Ineos Grenadiers) will hold onto the race lead for another day.
How it happened
The first road stage of the 2020 Giro d’Italia was not the ordinary from a Grand Tour.
Rather than the usual pure sprint stage to open the racing, the Giro organisers opted for a sharp uphill finish after 149km from Alcamo to Agrigento on Sicily’s south coast.
To start the stage, the peloton would need to take on a tough and undulating opening 50km, which featured the fourth category climb Santa Ninfa (4.3km at 4.1 per cent), after 30km of racing.
The middle section of the stage was gradually rolling but without any notable climbs, taking the riders to the foot of the final climb to Agrigento.
That last climb was 3.7km long with an average gradient of 5.2 per cent, with a maximum gradient of nine per cent in the opening kilometre, making it a tall ask for any sprinters hoping to make it to the line near the head of the race.
As the flag dropped on the day’s action, attacks flew from the peloton immediately and it wasn’t long before five riders had built up an advantage to establish the day’s breakaway.
It was Thomas De Gendt (Lotto-Soudal), Ben Gastauer (AG2R La Mondiale), Mattia Bais (Androni Giocattoli-Sidermec), Alessandro Tonelli (Bardiani-CSF-Faizanè) and Etienne van Empel (Vini Zabù-KTM) who made up the break.
The intermediate sprint, just under 50km into the stage, offered up the first drama of the day as Elia Viviana (Cofidis) crashed on the turn leading up to the sprint, but was able to chase back on over the course of the day.
Fernando Gaviria (UAE Team Emirates) was the first to cross the sprint point behind the peloton, followed by Arnaud Démare (Groupama-FDJ) and Peter Sagan.
The breakaway group extended their advantage to around five minutes after 60km of racing, but with Sunweb, Ineos Grenadiers and UAE motivated at the front of the bunch, the gap began to tumble gradually and was under a minute with 40km left of the stage.
As the race entered the final 10km, the break still held a narrow advantage, with De Gendt giving up to rejoin the peloton and the rest were caught 9km from home.
Onto the foot of the final climb and some of the heavier sprinters were shelled out the back of the group early on, with Démare losing contact.
Into the final kilometre and UAE controlled the race as Valerio Conti set the pace at the front of the bunch.
Luca Wackermann (Vini Zabú-KTM) broke free briefly but he was joined by Ulissi and Honoré, before Sagan put in a huge effort to bridge across from the peloton and join the front of the race.
With 200m to the line Sagan looked to be the favourite to outsprint his rivals, but Ulissi found another gear and kicked once more on the last ramp 50m from the line before the road flattened out for the finish.
The move stuck and Ulissi took his seventh career Giro d’Italia stage, with Sagan forced to settle for second and Honoré taking third.
Maglia rosa Filippo Ganna finished safely in the bunch to hold onto his race lead for another day with a 22 second advantage over Joao Almeida (Deceuninck - Quick-Step).
Giro d'Italia 2020, stage two: Alcamo to Agrigento (149km)
1. Diego Ulissi (Ita) UAE Team Emirates, in 3-24-58
2. Peter Sagan (Svk) Bora-Hansgrohe
3. Mikkel Honoré (Den) Deceuninck - Quick-Step, all at same time
4. Michael Matthews (Aus) Sunweb, at 5s
5. Luca Wackermann (Ita) Vini Zabú-KTM
6. Joâo Almeida (Por) Deceuninck - Quick-Step
7. Gianluca Brambillia (Ita) Trek-Segafredo
8. Vincenzo Nibali (Ita) Trek-Segafredo
9. Pello Bilbao (Esp) Bahrain-McLaren
10. Lucas Hamilton (Aus) Mitchelton-Scott, all a same time
11. Geraint Thomas (GBr) Ineos Grenadiers, at 5s
19. Simon Yates (GBr) Ineos Grenadiers, at same time
General classification after stage two
1. Filippo Ganna (Ita) Ineos Grendiers, in 3-40-27
2. Joâo Almeida (Por) Deceuninck - Quick-Step, at 22s
3. Geraint Thomas (GBr) Ineos Grenadiers, at 23s
4. Tobias Foss (Nor) Jumbo-Visma, at 31s
5. Josef Černy (Cze) CCC Team, at 36s
6. Matteo Sobrero (Ita) NTT Pro Cycling, at 40s
7. Jan Tratnik (Slo) Bahrain-McLaren, at 42s
8. Simon Yates (GBr) Mitchelton-Scott, at 49s
9. Tanel Kangert (Est) EF Pro Cycling, at same time
10. Diego Ulissi (Ita) UAE Team Emirates, at 54s
Thank you for reading 20 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1