Eric Hosmer's two-run homer in the first inning 2, in the third test of a four-game series.
Kansas City starter Felipe Paulino (3-6) gave up two runs on two hits to go with a season-high 11 strikeouts over seven innings.
Rookie Michael Pineda (9-10) allowed three runs on five hits over a career- high eight innings to take the loss. He struck out eight and walked one.
"That was pretty quick wasn't it? That's what happens when you get two overpowering guys matched up against each other; it's normally going to be a quick game," Royals manager Ned Yost said.
The Royals scored all the runs they would need in the first inning. Alex Gordon led off with a double to right and moved to third on Melky Cabrera's groundout. Butler followed with a grounder to first baseman Smoak, who threw home. Gordon beat the throw home for a 1-0 lead. Hosmer stepped to the plate and cleared the wall in left for a 3-0 margin.
Smoak's homer to right in the second cut the gap to 3-1. Carp cleared the left-center field wall in the fourth to make it a one-run game.
Francoeur gave Kansas City some breathing room with a homer off Tom Wilhelmsen in the ninth.
Greg Holland pitched a scoreless eighth and Joakim Soria tossed a perfect ninth for his 27th save.
"We're better than the number of strikeouts we had, and we put it in the umpire's hands too with all the called third strikes," Mariners manager Eric Wedge said. "We've got to do a better job of protecting the plate in those situations, even if it's a tad off or right on, we've got to protect the plate better than we did tonight."
Seattle is 31-20 against the Royals at Safeco Field, which opened in 1999 -- its second-best winning percentage against an opponent there...Kansas City went 0-for-7 with runners in scoring position and stranded three...Pineda has recorded 171 strikeouts this season, passing Freddy Garcia (170 in 1999) for second in franchise history for strikeouts by a rookie pitcher. Mark Langston holds the franchise rookie record with 204 strikeouts during 1984.