PITTSBURGH — No matter how stingy Sonny Gray pitched in his encore after a shutout earlier on this road trip, it would not mean much if the Cardinals could not find some way, any way at all to conjure a run against the Pittsburgh Pirates.
Held scoreless in the first two games of the series, the Cardinals stuffed the first few innings Wednesday with opportunities to break their streak of zeroes.
None did.
For the first time since 1976, the Cardinals visited Pittsburgh and did not score a run in a three-game series. Mitch Keller pitched seven scoreless innings and Tommy Pham had two RBI singles to send the Pirates toward a 5-0 victory in the series finale Wednesday afternoon at PNC Park. The Cardinals were shut out in three consecutive games for the first time since 2022 and shut out in a three-game series for the first time since visiting Atlanta in 2015.
People are also reading…
The Cardinals finished Wednesday’s game 1 for 10 with runners in scoring position, and nine of those at-bats came in the first three innings against Keller (3-10).
They went 2 for 23 in the series with runners in scoring position.
Pittsburgh has won six consecutive games for the first time this season, and they've held the Cardinals and Mets combined to four runs in those six games.
The Cardinals, who did not have Nolan Arenado or Willson Contreras in the lineup Wednesday due to bruised hands, reach Thursday’s off-day in Chicago having gone 49 consecutive innings against a National League foe without scoring a run.
Gray (8-3) followed up his shutout in Cleveland with 6 1/3 solid innings against the Pirates. The only runs Gray allowed while he was on the mound came on Pham’s singles — one in the second inning and the other in the seventh. Two of the runners Gray left behind also scored to give the Pirates four runs on five hits against the right-hander.
Sonny departs, Bucs rampage
There was a moment there in the seventh inning when Gray had yet to throw his 75th pitch and the Pirates clung to a 1-0 lead when it appeared the right-hander may be in the process of authoring a second consecutive complete game.
Gray pitched a shutout in Cleveland this past week, and it took him fewer than 100 pitches to do so.
The right-hander sped through the middle innings of Wednesday’s game to get the one-run game into the seventh inning. The Pirates led on Pham’s first RBI single back in the third inning. Gray struck out the final two batters of that inning to begin a streak of 14 consecutive Pirates retired.
A leadoff walk interrupted the streak but not Gray’s hold on the game.
That came three batters later with Pham.
The former Cardinals outfielder pulled a single to left field off Gray to double his RBI total and double the Bucs’ lead. That hit also chased Gray from the game.
That’s when the Pirates rolled.
Reliever Riley O’Brien got three consecutive ground balls from the first three batters he faced, though two slipped through for base hits, and he complicated the inning on his own with a wild pitch. Both of the runners he inherited from Gray scored, and Pittsburgh pounced on him for four runs. Pittsburgh would send nine batters to the plate inning in the inning. In back-to-back at-bats for No. 9 hitter Isiah Kiner-Falefa and leadoff hitter Spencer Horwitz, the Pirates got RBI singles with runners in scoring position.
That was two more in two batters than the Cardinals had at that point in the series.
RISP woes persist
The Cardinals weren’t even at-bat when they got their first hit of the game with a runner in scoring position.
That suggests how productive it was.
After failing to produce an at-bat with a runner in scoring position in Monday’s shutout and going 1 for 13 with runners in scoring position Tuesday, the Cardinals kept finding new ways to struggle to produce in those opportunities Wednesday. They were hitless in their first nine at-bats with runners in scoring position against Keller through three innings. That changed when the official scorer reconsidered a hard-hit grounder by Lars Nootbaar.
Instead of hitting into an error, Nootbaar was credited with an infield single.
That made the Cardinals 1 for 9 with runners in scoring position.
They improved (relatively) to 2 for 22 in the series.
But neither of those two hits produced a run. Nootbaar’s infield single moved a teammate to third, and Pedro Pages’ RISP single Tuesday night led to a decisive play at the plate where Contreras was thrown out by Pham.
As they did the night before against Bucs ace Paul Skenes, the Cardinals generated chances against Keller in the wee innings. Brendan Donovan led off with a double, and by the time the sixth batter of the first inning came up, the Cardinals had the bases loaded. A walk to Alec Burleson and a hit by pitch for Nootbaar filled the bases with two outs. Thomas Saggese grounded out to end the inning and left all three teammates marooned.
The Cardinals went 0 for 3 with runners in scoring position in the inning.
They’d go 0 for 3 in the second inning, too, after a leadoff double from right fielder Jose Fermin. And then 0 for 3 again the fourth inning following Burleson’s double.
The Cardinals avoided their RISP issues in the middle innings by not getting on base.
Keller sets K mark
Eleven years after the Pirates selected in him the second round of the 2014 draft, right-hander Keller became the all-time strikeout leader at a ballpark that predates his arrival in the majors.
Keller caught Masyn Winn looking to lead off the third inning.
The strikeout was Keller’s second of the game and 384th at PNC Park. That vaulted him into the all-time lead at Pittsburgh’s riverside ballpark that opened in April 2001. Pitchers from Gerrit Cole to Charlie Morton have called PNC Park home, and second-year starter Skenes will storm up the rankings in his onrushing years. But in his 79th game at the ballpark and 422nd inning along the Allegheny River, Keller took over the K lead.
He then stacked on.
By the end of his scoreless seventh inning, Keller had struck out seven.
Post-Dispatch sports columnists Jeff Gordon and Lynn Worthy talk about the barrage of two-run homers the Cardinals inflicted on the Cubs as their offense came to life.
Photos: Cardinals shut out again, swept by Pirates

Pittsburgh Pirates' Tommy Pham, right, is greeted by Spencer Horwitz, left, after scoring during the seventh inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates' Isiah Kiner-Falefa hits an RBI single during the seventh inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates' Tommy Pham hits an RBI single during the seventh inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates' Nick Gonzales, left, is greeted by Henry Davis, right, after scoring during the seventh inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

51ºÚÁÏ Cardinals pitcher Sonny Gray delivers during the fifth inning of a baseball game against the Pittsburgh Pirates, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Mitch Keller delivers during the fifth inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Cardinals second baseman Brendan Donovan catches a pop-up hit by the Pirates’ Isiah Kiner-Falefa during the fifth inning Wednesday, July 2, 2025, in Pittsburgh.

The Cardinals’ Alec Burleson, left, safely grabs second base on a double as Pirates second baseman Nick Gonzales applies the late tag during the third inning Wednesday, July 2, 2025, in Pittsburgh.

51ºÚÁÏ Cardinals' Jose Fermin celebrates his double during the second inning of a baseball game against the Pittsburgh Pirates, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates' Tommy Pham watches his RBI single during the second inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

51ºÚÁÏ Cardinals pitcher Sonny Gray delivers during the first inning of a baseball game against the Pittsburgh Pirates, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Mitch Keller delivers during the first inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

51ºÚÁÏ Cardinals pitcher Sonny Gray delivers during the first inning of a baseball game against the Pittsburgh Pirates, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Mitch Keller delivers during the first inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

51ºÚÁÏ Cardinals relief pitcher Riley O'Brien delivers during the seventh inning of a baseball game against the Pittsburgh Pirates, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Isaac Mattson delivers during the ninth inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

51ºÚÁÏ Cardinals pitcher Sonny Gray delivers during the fifth inning of a baseball game against the Pittsburgh Pirates, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates' Jared Triolo stands in the dugout before a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Mitch Keller delivers during the first inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Mitch Keller delivers during the first inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates' Ke'Bryan Hayes stands in the dugout before a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Mitch Keller delivers during the fifth inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Cardinals starting pitcher Sonny Gray delivers during the fifth inning against the Pirates on Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Mitch Keller delivers during the fifth inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Mitch Keller delivers during the first inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates' Jared Triolo stands in the dugout before a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Mitch Keller delivers during the first inning of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates pitcher Isaac Mattson, right, celebrates with catcher Henry Davis, after getting the final out of a baseball game against the 51ºÚÁÏ Cardinals, Wednesday, July 2, 2025, in Pittsburgh.

A fan holds a broom after the Pittsburgh Pirates defeated the 51ºÚÁÏ Cardinals in a baseball game for a series sweep, Wednesday, July 2, 2025, in Pittsburgh.

Pittsburgh Pirates third baseman Ke'Bryan Hayes, left, celebrates with left fielder Tommy Pham, after defeating the 51ºÚÁÏ Cardinals in a baseball game, Wednesday, July 2, 2025, in Pittsburgh.