Gordon hit a third-inning home run that gave the Royals a 4-1 lead and they held on thanks to the efforts of James Shields and three relievers.
Shields (7-8) won at home for the first time since April 30, allowing three runs on seven hits in seven innings.
Ryan Lavarnway brought the Red Sox within a run with a two-RBI single in the sixth, but Boston could not make a dent in the Kansas City bull pen.
Three relievers gave up a lone walk and struck out four with Greg Holland retiring the Red Sox in order in the ninth for his 32nd save. It was Kansas City's seventh straight victory, a stretch that has moved the Royals into contention for a playoff berth.
The loss went to John Lackey (7-10), who surrendered four runs on seven hits in seven innings.
Millions of Getty images now available for free via embed tool
Boston schools pull out free condoms over wrapping complaints