Porcello (10-6) won for the fourth time in five starts, limiting the Twins to two runs on five hits and two walks. He struck out four as first-place Detroit took its third win in four games against Minnesota.
Al Alburquerque and Joaquin Benoit each tossed a scoreless inning of relief and Jose Valverde converted his 26th save for the Tigers, who extended their lead over second-place Cleveland to two games in the American League Central.
Detroit took a 1-0 lead in the first when Ryan Raburn scored on a wild pitch from Twins starter Francisco Liriano (6-8). Austin Jackson came home on another wild one from Anthony Swarzak in the sixth, making it 5-2.
Wilson Betemit drove in his first run for Detroit since joining the Tigers in a trade with Kansas City last week with a third-inning single.
Liriano was responsible for two wild pitches while yielding four runs on six hits over just 2 1/3 innings.
Delmon Young hit an RBI double for the Twins.