Kyle Tucker and Yainer Diaz hit two-run shots, while Mauricio Dubon and Martin Maldonado had solo blasts. Yordan Alvarez knocked in three runs, while Dubon and Chas McCormick contributed three hits apiece.
Justin Verlander (10-6) lasted five innings to record his 100th victory at Detroit's Comerica Park. The former Tigers ace gave up two hits, issued two walks and hit three batters while laboring through 98 pitches. He also recorded seven strikeouts.
Miguel Cabrera broke up Houston's shutout bid with a three-run homer in the eighth. Detroit starter Alex Faedo (2-5) gave up three runs and seven hits in 4 2/3 innings.
The Astros took the lead in the third. Jose Altuve drew a leadoff walk. With two outs, Tucker ripped his 26th homer over the right field wall.
Houston added to its advantage in the fourth. Singles by Pena and Maldonado and a walk to Alex Bregman loaded the bases with two outs. Faedo then walked Alvarez to force in a run. Tucker flied out to keep the score at 3-0.
The Tigers left two runners on base in the fifth as Verlander recorded his last two strikeouts.
The Astros tacked on four more runs against Tyler Holton in the seventh. Tucker led off with a single and moved to third on McCormick's double. Jon Singleton singled to drive in Tucker, while McCormick scored on a double play grounder.
They weren't through. Dubon hit his seventh homer over the left field wall. Maldonado then lined his 11th homer off the left field foul pole.
The Astros made it 14-0 in the eighth. The first five runs came in on McCormick's RBI single, Pena's three-run triple and Dubon's run-scoring single. Position player Carson Kelly came in to pitch for Detroit and gave up Diaz's homer.
Houston scored three runs off another position player, Zack Short, in the ninth. In the bottom half, Zach McKinstry hit his eighth homer of the year for Detroit.
—Field Level Media