Soler reached base three times as the Royals snapped a three-game losing streak and won for the first time in six games north of the border.
“He definitely made up for it,” Keller said of Soler’s recovery after a rough start. “It’s really cool to see that.”
Soler redeemed himself further with a diving catch on Lourdes Gurriel Jr.’s liner in the seventh inning.
“That was a huge play,” manager Ned Yost said.
Soler apologized to Keller after his gaffe in the second, and was still thinking about it when he batted in the third.
“When I came up to bat the next time, with runners on base, I thought to myself that this was a good time to help this team win,” Soler said through a translator.
Justin Smoak homered twice for the Blue Jays, who had won 14 of their previous 17 home meetings with the Royals. It was the 10th multihomer game of Smoak’s career. The home runs were his 13th and 14th of the season.
Smoak hit a two-run homer in the second and a solo homer in the fifth but ended the game by fouling out against Royals right-hander Ian Kennedy in the ninth, stranding the tying run at second base.
Whit Merrifield reached base three times and Alex Gordon drove in a pair as Kansas City answered Toronto’s five-run second inning with a five-run third against struggling Blue Jays right-hander Aaron Sanchez (3-11).
“When we’ve gotten punched in the mouth we haven’t done a good job of responding,” Merrifield said. “Winning teams do that, they respond. We haven’t done that, but today we did.”
Keller (4-9) allowed six runs and eight hits in five innings to end a streak of six straight losing decisions. The right-hander has allowed six or more runs twice in his past three outings.
“It was a grind for him all day long,” Yost said. “He was never sharp, but he continued to compete his heart out. That’s exactly what I was looking for.”
Kevin McCarthy worked two hitless innings and Jake Diekman struck out a pair in a 1-2-3 eighth before Kennedy finished for his 11th save in 13 opportunities.
Royals DH Lucas Duda opened the scoring with an RBI double in the second but the Blue Jays scored five times in the bottom half. Soler lost Luke Maile’s fly ball in the sun, leading to a two-run triple, Eric Sogard hit an RBI single and Smoak followed with a two-run homer.
Handed a four-run cushion, Sanchez promptly allowed the first six batters to reach safely in the third. Humberto Arteaga and Merrifield walked, Nicky Lopez loaded the bases with a single and Gordon’s single brought home two runs. Hunter Dozier and Soler hit RBI singles and a fifth run scored when Cheslor Cuthbert grounded into a double play.
Sanchez allowed six runs and seven hits in three-plus innings to lose his 10th straight decision. It’s the longest such run by a Toronto pitcher since Ricky Romero lost 13 consecutive decisions in 2012.
Sanchez has walked 52 batters this season, tied with Cincinnati’s Luis Castillo for most in the majors.
“The free passes always find a way to come back and haunt me,” he said.
Sanchez won the AL ERA title in 2016, but has struggled with injuries and his performance since.
“The stuff is there but, in this league, if you miss some spots some guys can hurt you,” Merrifield said of Sanchez.
Soler made it 7-5 with a solo homer off Nick Kingham in the fifth, his 22nd, but Smoak replied with a leadoff blast in the bottom half.
Royals: Adalberto Mondesi (strained right groin) went 1 for 5 as the DH in a rehab game at Double-A Northwest Arkansas on Saturday night. Mondesi has been out since June 18.
Blue Jays rookie Vladimir Guerrero Jr. is set to become the youngest participant in Home Run Derby history. Major League Baseball confirmed Sunday that Guerrero will participate. Guerrero, son of Hall of Famer Vladimir Guerrero, will be 20 years, 114 days old for the derby, 116 days younger than Ken Griffey Jr. for the 1990 showcase. Bryce Harper is the only other 20-year-old to participate in the derby.
Toronto is 7-13 in one-run games. The Royals are 6-16.
Royals: RHP Glenn Sparkman (2-3, 4.07) surrendered a season-worst three home runs in his previous start, June 25 at Cleveland and has allowed seven homers in his past four outings.
Blue Jays: LHP Clayton Richard (0-4, 6.89) has allowed at least one home run in six of his seven outings this season, including a season-worst three in his previous start, June 25 at Yankee Stadium.