Schumacher covered 62 laps around the Enzo and Dino Ferrari circuit in 1 hour, 31 minutes, 6.486 seconds, with Alonso 2.0 seconds behind. McLaren's Juan Pablo Montoya was 15.8 back for third.
It marked the Ferrari driver's record seventh win at Imola and the 85th of his career. Apart from last year's U.S. Grand Prix, when only six cars competed because of a tire dispute, it was Schumacher's only win since the end of 2004.
"We had an amazing weekend," said Schumacher, who earned the 66th pole position of his career on Saturday to break the record he shared with Ayrton Senna.
Alonso started five cars behind Schumacher, but by the 35th lap he was on Schumacher's tail. However, the Spaniard never found a way to pass the seven-time world champion.
"It was a bit of a struggle, but luckily we know overtaking is nearly impossible here," Schumacher said.
The scene was the opposite of last year's race here, in which Alonso held off a surging Schumacher over the final 12 laps.
This time, Alonso went into the pits on the 40th lap, while Schumacher came in one lap later and managed to come out just in front of the Renault driver. Schumacher's expert blocking skills and Imola's narrow track prevented any serious attacks from Alonso the rest of the way.
"I waited for an opportunity and it didn't come," Alonso said. "We were still the quickest on the track today, so it looks good for the championship."
Schumacher's Ferrari teammate, Felipe Massa, was fourth and McLaren's Kimi Raikkonen crossed fifth.
Williams' Mark Webber took sixth and Honda's Jenson Button came seventh after starting from the front row for the fourth straight race.
Alonso's Renault teammate Giancarlo Fisichella took the last point in eighth.
Alonso leads the drivers' standings with 36 points. Schumacher moves up to second with 21, and Raikkonen dropped to third with 18.
"It's looking two points better now and we have a long way to go," Schumacher said.
Schumacher's run of five-straight world titles was ended by Alonso last season and Ferrari worked hard in the offseason to regain its edge.
It looked like it was going to be a close battle when Alonso and Schumacher finished 1-2 in the season-opening Bahrain GP. At the next race, though, Renault claimed both of the top spots with Fisichella winning ahead of Alonso and Schumacher sixth. In Australia three weeks ago, both Ferrari cars crashed and Alonso won again.
The next race is the European GP at Nurburgring in two weeks.