Belgium's in-form Wout Van Aert, Dutchman Mathieu van der Poel and Frenchman Julian Alaphilippe started as the big favourites. But none of them managed to get away on the traditional final climb of the Poggio.
In a tense final to the Italian classic, Jasper Stuyven made the most of a moment of hesitation in a breakaway group to set up a solo effort. He was then joined by Soren Kragh Andersen of Denmark, but the chasing group was always close on the duo's heels.
In a breath-taking final 100 metres, Stuyven just managed to keep ahead of the sprinting bunch behind him. Australia's Caleb Ewan came second, just ahead of last year's winner Wout Van Aert. Mathieu van der Poel took fifth place, behind Peter Sagan. Alaphilippe was never in contention for the victory in the final sprint.
"All or nothing"
"There were a lot of fast guys in the first group. I had to play all or nothing. 8 times out of 10 you will have nothing, but this time I took the biggest win of my career. I was completely empty after the finish", Stuyven told reporters. He added that he didn't have the top shape in the past weeks, but that he concentrated on working towards the Sanremo classic.