Gordon's homer capped a five-run Royals rally in the third that chased Tigers starter Charlie Furbush (1-3) and put Kansas City on top 9-2.
Butler drove in two runs on a second-inning single and Melky Cabrera added a two-run single in the third, as the Royals rebounded after two straight losses to the Tigers.
Greg Holland (3-1) earned the victory with 2 1/3 scoreless frames in relief of starter Luke Hochevar, who was knocked out after surrendering six runs on nine hits over 3 2/3 innings.
Furbush was rocked for nine runs (four earned) on nine hits before exiting after only 2 2/3 frames.
Brennan Boesch went 3-for-5 with a two-run single for Detroit, which remained a half-game behind Cleveland atop the American League Central.