Pujols belted his 26th home run of the season in the fourth inning to give the Angels an 8-2 lead, and the bullpen held on to preserve Zach Greinke's (10-4) first win in four starts since he was traded to the Halos by Milwaukee late last month.
Greinke labored through seven innings, giving up four runs on eight hits and striking out five. He threw 112 pitches.
The Indians scored two runs each in the seventh and eighth innings to trim the lead to three runs before Ernesto Frieri closed the door in the ninth and rung up his 14th save.
Erik Aybar homered for the Angels, who snapped a three-game losing streak.
Ubaldo Jimenez (9-12) allowed eight runs on eight hits over four innings to take the loss.
Michael Brantley homered and drove in two runs for Cleveland. The Tribe had won four its last six games heading into Tuesday's contest.