Miguel Cabrera's leadoff single started a three-run fifth inning and the Detroit Tigers held on to beat the Kansas City Royals 4-2 on Wednesday night.

Max Scherzer (12-10) gave up two hits and struck out eight over 7 2-3 innings. Ryan Perry got the final out of the eighth and Phil Coke pitched a shaky ninth.

Billy Butler hit a two-run, two-out homer in the ninth to pull the Royals within two.

Kyle Davies (8-11) was perfect through four innings before giving up three runs on four hits in the fifth.

Rookie Brennan Boesch hit a two-run double in the pivotal inning, matching his total of RBIs from the previous 16 games this month.

Johnny Damon gave Detroit a four-run lead in the eighth, sending a liner to the fence after left fielder Gregor Blanco misjudged it. Rookie Austin Jackson scored on the play.

Cabrera, an MVP candidate, was walked intentionally in the eighth and ended the night with a .326 batting average. He leads the majors with 120 RBIs and is among the leaders with 45 doubles and 35 homers.

Davies was dominating Detroit's hitters until Cabrera led off the fifth with the single. Ryan Raburn followed with a one-hit single and Boesch, who was a hot-hitting phenom before the All-Star break, hit a two-run double to the gap in right-center. Brandon Inge's single drove in the third and final run of inning.

Davies ended up giving up four runs, seven hits and one walk over eight innings.

Scherzer was sharp as he has often been the past three months, winning for the 10th time in 14 decisions.

Detroit helped him out with some slick plays defensively. Second baseman Will Rhymes made a sliding stop on a shot up the middle, flipped the ball out of his glove to shortstop Jhonny Peralta for a third-inning ending double play.

NOTES: Kansas City 2B Chris Getz will likely miss the rest of the season because of symptoms from a concussion earlier this month. ... After an off day, Detroit will host AL Central champion Minnesota in a series that some thought would have ramifications in the division when the schedule was announced last year. Justin Verlander (17-8) will pitch for the Tigers against Francisco Liriano (14-8). Minnesota beat Detroit in the 163rd-game tiebreaker last year to win the division.