See more of the story

PITTSBURGH – The way the Twins finished the first inning Friday foreshadowed their entire evening against Pittsburgh Pirates starter Mitch Keller.

The Twins had two runners on base after seven pitches. Trevor Larnach opened with an opposite-field double, and Carlos Correa drew a walk. Then the rally fizzled with a flyout and two strikeouts on called third strikes.

That was the theme when the Twins put runners on base. Some quality offensive opportunities were spoiled by strikeouts in a 3-0 loss at PNC Park, the fourth time they've been shut out this year. Royce Lewis, Mr. Grand Slam, even struck out in his first at-bat with the bases loaded this season as the Twins lost their fourth straight game.

"Everybody in here is pretty frustrated," said Byron Buxton, who had two hits and one costly baserunning mistake. "Obviously, a good pitcher. Go out there and get some guys on, and don't get no runs across — you know we didn't get the job done."

Twins starter Joe Ryan was effective, permitting two hits and two runs in seven innings, and his outing was overshadowed by the lack of offense.

It wasn't until the fifth inning when the Twins had a runner reach third base. After Willi Castro drew a one-out walk, Larnach and Correa loaded the bases with back-to-back singles. Assistant hitting coach Derek Shomon was ejected for expressing his displeasure with home plate umpire Paul Clemons' strike zone during the inning, but Keller struck out Lewis on an elevated 95 mph fastball and Max Kepler with a sharp slider.

Keller, who has allowed only four runs over his last five starts, smacked his glove and shouted as he walked off the mound.

"He throws probably more hard stuff when there is nobody on base," Twins manager Rocco Baldelli said. "He's getting ahead, forcing the action on you as a hitter. Then we got guys on, and he started to pitch a little more. He started to change speeds a little more. I know he did that with a couple of our guys in particular. He did that with Royce. I don't think he pitched him like he did everybody else."

In the sixth inning, Pirates left fielder Bryan Reynolds shut down a potential rally twice. Reynolds took a leadoff hit away from Ryan Jeffers with a diving catch in the gap. After a single from Jose Miranda, Buxton lined a single to left field. As Miranda raced from first to third, Reynolds lined up his body preparing a throw toward third base, and he made a no-look throw to second.

Buxton, assuming Reynolds' throw was headed to third, was caught midway between first and second base, and he was tagged out in a rundown. Carlos Santana, the next batter, hit a fly ball to center field that could've been a sacrifice fly if Buxton hadn't run into the second out of the inning.

"It's just frustrating," Buxton said. "You read a play. Everybody is lined up to third base. I don't know. ... He made a good play. The first time I felt like I got deked, like deked-deked."

BOXSCORE: Pittsburgh 3, Twins 0

Ryan retired nine of his first 10 batters. The one hit came from a splitter to Oneil Cruz in the second inning that didn't split downward. Cruz launched it to the last few rows in the right field seats for a 422-foot solo homer, the ball rocketing off his bat at 114 mph.

"Bad pitch on my part," said Ryan, who threw first-pitch strikes to 21 of his 25 batters. "I had to get it down. I just couldn't really get over that front leg as well today and left it there."

Reynolds opened the fourth inning with a double, and Ryan issued walks to two of the next three batters, including an eight-pitch walk to Cruz. Nick Gonzales followed with a sacrifice fly to center field, which became an important run as Ryan retired his final 10 batters.