Slovak Sagan, 30, won the 177 kilometre mountain trek between Lanciano and Tortoreto in a time of just over four hours with UAE Team Emirates' American rider Brandon McNulty finishing second, 19 seconds behind.
Victory gave Sagan his first win in over a year since claiming the fifth stage of the 2019 Tour de France, where he won the green jersey.
"I'm very happy. What can I say, finally," Sagan said in a post-race interview.
"I've been trying since we started the season again with Strade Bianche, San Remo, the Tour de France. I was, a lot of times, on the podium or top five.
"I didn't have a plan (for a solo attack). I'd already accepted second, third, fourth place. But after, I just let it go... Finally I won with my style. Taking victory was special."
Portuguese Joao Almeida of Deceuninck-Quickstep extended his lead at the top of the general classification to 34 seconds as he finished third with a time bonus.
Earlier, the Mitchelton-Scott team withdrew after four staff members tested positive following top rider Simon Yates pulling out last week, while Jumbo-Visma, whose leader Steven Kruijswijk tested positive, said they would not start the 10th stage.
Thursday's (AEDT) 11th stage is a 182km route from Porto Sant'Elpidio to Rimini.