Jeimer Candelario hit an RBI double for the Tigers, who have won five of six. Jonathan Schoop had two hits and scored two runs.
Winning pitcher Drew Hutchison (3-1) allowed only an unearned run in 2 2/3 innings of relief. Michael Fulmer got four outs for his 12th save.
''We pitched really well tonight to keep them off the scoreboard for the most part and you do need that big key hit to kind of relax everybody in the dugout,'' Detroit manager A.J. Hinch said. ''Miggy provided that.''
Royals starter Jon Heasley held the Tigers scoreless over 5 1/3 innings in his second career outing.
''Definitely felt a little more settled in,'' said Heasley, who gave up four runs in four innings to Seattle in his debut. ''Had a good plan going in. Felt like I attacked the zone and got some outs on some quality pitches.''
Tigers left fielder Akil Baddoo robbed Hunter Dozier of a homer with a leaping catch in the third.
''I just told myself I'm going to jump as high as I can and see if I can come up with it,'' Baddoo said.
Kansas City scored its lone run without a hit against Hutchison in the fifth on Dozier's sacrifice fly.
Cabrera's two-out, opposite-field double off Domingo Tapia (4-1) in the sixth was followed by Candelario's RBI double. Tapia allowed four hits and three runs in one-third of an inning in his first career defeat.
''Couple of jam shots that fell into the right spot,'' Royals manager Mike Matheny said. ''He's been really good for us. He's been the guy we want in those situations to get out of trouble when that time comes. Unfortunately, (the hits) just went to where we were not.''
Cabrera added a two-run single in the eighth off Ervin Santana and finished with three hits to raise his batting average to .261.
''He had really good at-bats and key at-bats, even better as the game went on,'' Hinch said. ''Obviously, a big night for him and we needed him. That was a tough game to win, even though it looked like we won a little comfortably at the end. Miggy's contributions were huge.''
Detroit outfielder Victor Reyes exited after the fifth inning due to right groin tightness. He had seven hits in his last nine plate appearances.
SPECIAL START TIME
The series finale Sunday will begin at 12:10 p.m. The game was moved up due to traffic concerns, with the Detroit Lions playing a 1 p.m. game next door.
Detroit starter Tarik Skubal got his 200th strikeout in his 38th career appearance. That's the fastest a Tigers pitcher has reached that mark in franchise history.
Royals: LHP Kris Bubic (5-6, 4.80) is scheduled to start the finale of the three-game series on Sunday. Bubic, who held Seattle to one run over 6 1/3 innings in his last start, is 1-0 with a 1.69 ERA in three appearances against the Tigers this season.
Tigers: RHP Wily Peralta (4-3, 3.04 ERA) carries a 16-inning scoreless streak into Sunday's game. He limited Tampa Bay to three hits in seven innings last Sunday.
More AP MLB: https://apnews.com/hub/MLB and https://twitter.com/AP-Sports
Copyright 2022 STATS LLC and Associated Press. Any commercial use or distribution without the express written consent of STATS LLC and Associated Press is strictly prohibited.