Halladay (6-2) allowed five singles and used his fastball along with a few nasty breaking pitches to get 14 outs on grounders. He walked three and struck out six in improving to 4-0 in eight career starts against Cleveland.
Still, he wasn't pleased with the outing and almost sounded disappointed afterward.
"I had some trouble executing my sinker," he said. "It was hard to tell if I was just missing or it was running away. I missed my spots, but I was able to battle."
The Indians weren't nearly as critical.
"Everything he throws seems like it moves," said Indians first baseman Ben Broussard, who went 0-for-3. "You keep waiting for him to make a mistake but he doesn't make many. We got close a couple of times but we couldn't get a run over when we really needed to."
Wells' shot in the eighth inning off C.C. Sabathia (2-3) broke open a tight game between Halladay and the Indians' ace. Alex Rios hit a solo homer in the third as the Blue Jays snapped a seven-game losing streak against Cleveland.
Toronto was in danger of being swept for the fourth time this season. However, Halladay had little trouble with the light-hitting Indians, who remain stuck in an early-season offensive rut.
Sabathia, who dropped his third straight start, was still in it until giving up the homer to Wells in the eighth. Reed Johnson
reached on a fielder's choice and Frank Menechino, who came in batting .176, was grazed by a pitch before Wells connected for his fifth homer, a two-out shot on Sabathia's 112th and final pitch.
Before his homer, Wells was just 4-for-34 (.118) with runners in scoring position and 2-for-11 against Sabathia.
The homer didn't bother Sabathia as much as hitting Menechino.
"He's a guy who has no business getting on base against me," Sabathia said. "That guy is an out, and I should have gotten him out."
Sabathia gave up eight hits in 7 2/3 innings -- a season high -- but couldn't get the big out when he needed it.
"I lose it mentally for a second or a hitter," Sabathia said. "I was so upset about hitting Menechino that it was 3-0 to Wells before I knew it."
Blanked by Halladay for five innings, Cleveland closed to 2-1 in the sixth. Casey Blake singled and with Travis Hafner up, Toronto manager John Gibbons was ejected by plate umpire Jim Reynolds for questioning the strike zone. Hafner walked and the runners moved up on a groundout.
Halladay's wild pitch to Coco Crisp scored Blake. Crisp rocketed a grounder for the second out to second baseman Orlando Hudson, who then made a nice backhand stop up the middle and threw out Alex Cora.
"Those were big plays," Gibbons said. "He'll win a Gold Glove one of these days. He has such good range. He's saved us a ton of runs."
Aaron Boone's fielding error helped the Blue Jays take a 1-0 lead in the second. After cleanup hitter Menechino walked, Wells hit a grounder that handcuffed Boone near the line.
Sabathia got two outs before John McDonald grounded an RBI single to center off his former Indians teammate.
Rios put the Blue Jays up 2-0 in the third with his second homer of the series. Rios' drive to left-center came just five at-bats after his homer on Friday snapped a drought of 330 at-bats between homers.
Sunday was the 24th anniversary of Len Barker's perfect game against Toronto, the last no-hitter thrown by the Indians. The final out of Barker's gem at Cleveland Stadium was made by Ernie Whitt, the Blue Jays' bench coach. Whitt hit a routine pop up to center fielder Rick Manning. All three players were on hand and Barker signed a baseball for Whitt, saying, "Ernie, couldn't have done it without you, Len." ... Crisp has hit safely in 10 straight games. He's batting .400 (14-for-35) during the streak. ... Boone's single in the fifth was just his sixth hit in 48 at-bats. He added a run-scoring double in the ninth, his first RBI in 12 games. ... Toronto hadn't beaten the Indians since last Aug. 3.