Brennan Boesch hit a three-run homer and Austin Jackson drove in the other four runs for the Tigers, who lead the White Sox by a half-game in the Central. Detroit was six games out after a loss to the Chicago Cubs on June 12.
Porcello (7-5) fell just short of his first complete game, departing after he allowed two hard-hit singles to start the ninth.
Porcello struck out four with no walks, outdueling Chris Sale (11-3) in the Chicago left-hander's first loss since May 12. Sale allowed five runs and seven hits in seven innings.
BLUE JAYS 7, RED SOX 3
BOSTON (AP) — Edwin Encarnacion tied the game with a two-run homer in the sixth, then J.P. Arencibia gave Toronto the lead with a seventh-inning solo shot and the Blue Jays beat the Red Sox.
Carlos Villanueva (5-0) allowed three runs on four hits over 6 1-3 innings to win his third consecutive start. He walked two and struck out five.
Aaron Cook (2-3) allowed five runs — three earned — on four hits and a walk while striking out one.
On the night dedicated to longtime catcher Jason Varitek, replacement Jarrod Saltalamacchia hit a three-run homer in the second inning to break a scoreless tie.
ATHLETICS 2, YANKEES 1
OAKLAND, Calif. (AP) — Brandon Inge and Yoenis Cespedes homered, Jarrod Parker shut down one of baseball's best lineups for eight innings and the Athletics beat the Yankees for their fourth straight win.
Parker (7-4) allowed only an RBI single to Raul Ibanez in the fourth to become the latest Oakland starter to baffle the Bronx Bombers. He struck out five and walked one to hand New York its third straight loss in the series.
Cespedes crushed a tying homer later in the fourth and Inge hammered the first pitch of the eighth off Phil Hughes (9-8) for the go-ahead shot.
RANGERS 9, ANGELS 2
ANAHEIM, Calif. (AP) — Mike Napoli homered twice against his former team, Yu Darvish struck out 11 over seven strong innings, and Texas battered struggling Angels starter Ervin Santana in a victory over Los Angeles.
Napoli, Yorvit Torrealba and Adrian Beltre homered during Texas' five-run second inning, chasing Santana (4-10) after just 13 batters.
Darvish (11-6) had little trouble holding an early seven-run lead in the Japanese All-Star's first victory of July, yielding three hits and four walks.
ROYALS 7, TWINS 3
KANSAS CITY, Mo. (AP) — Lorenzo Cain drove in three runs and Alex Gordon had three hits and scored two runs as the Royals beat the Twins.
Cain delivered run-producing singles in the first and fifth innings and he had an RBI double in the seventh. Cain's three RBIs matched a career high.
Luis Mendoza (4-6) made his sixth quality start in seven appearances to collect the victory, but only his second since May 13. He yielded three runs and seven hits in 6 1-3 innings.
Twins rookie left-hander Scott Diamond (8-4) lost for the first time since June 19, spanning five starts. Diamond allowed four runs and 10 hits in six innings.
MARINERS 2, RAYS 1
ST. PETERSBURG, Fla. (AP) — Jason Vargas took a shutout into the seventh inning, Michael Saunders had two RBIs and Seattle beat Tampa Bay.
Vargas (10-7) gave up one run and seven hits in six-plus innings as the Mariners stopped a nine-game losing streak against the Rays.
Alex Cobb (4-7), who left after bruising his right lower leg after the second.
Tom Wilhelmsen, the fourth Seattle reliever, pitched the ninth for his ninth save.
ORIOLES 3, INDIANS 1
CLEVELAND (AP) — Jim Thome's two-run homer in the seventh inning led Baltimore to its fourth straight victory.
Thome, who passed Sammy Sosa for seventh place on the career list Friday, hit his 611th and second with Baltimore since being acquired from Philadelphia on July 1 off Zach McAllister (4-2).
Chris Tillman (2-1) allowed only Shin Soo-Choo's leadoff homer in the first in 6 2-3 innings. The right-hander, making his third start of the season since being called up earlier this month, gave up six hits, struck out four and walked one.
Jim Johnson pitched the ninth for his league-leading 29th save.