Soriano hit a two-run homer in the eighth inning to give the Cubs the go-ahead runs and Chicago completed a three-game sweep of the Pittsburgh Pirates with a 4-2 win on Sunday.
The Cubs arrived in Pittsburgh on a six-game losing streak and having been outscored 31-10 in getting swept by the Nationals.
"You have to give these guys a lot of credit after what happened in Washington to come in here and do what they did against a really good team," Chicago manager Dale Sveum said.
Soriano followed Anthony Rizzo's leadoff single in the eighth with his second homer in as many days and 28th of the season, sending the first pitch from Jason Grilli (1-6) into the Cubs' bullpen in left-center.
"Hopefully more to come, too," Recker said. "We'll see. I was just glad to get the win. Obviously, to contribute offensively was good, too."
Chicago is 6-20 on the road since the All-Star break, with five of those wins coming at PNC Park. The Cubs had lost eight consecutive road games before this series.
Pittsburgh (72-67) peaked at 16 games over .500 this season but now needs to go 9-14 just to avoid extending their North American major professional sports record of consecutive losing seasons to 20.
"We need to play better -- that's it," Pirates manager Clint Hurdle said. "I'm not going to get up here and point fingers or this and that or say this ... I'm telling you how I feel -- we've got to play batter. And that's it. And they know that."
Joe Mather went 3 for 5 for the Cubs (54-86), who have the majors' second-worst record.
Chicago's road sweep was its first since Aug. 1-4, 2010, in Pittsburgh. The Pirates were swept in three games at home for the first time this season.
Soriano had six RBIs in the series. His 94 on the season are the most since he put up 95 during his only season with the Washington Nationals in 2006.
"I'm feeling good at the plate," Soriano said. "That last at bat I just was concentrating and just said to myself, 'Look for a strike,' and he threw me a fastball and I put a good swing on it."
A pair of rookie left-handers started and pitched well but came away with no-decisions.
Making the third start of his career, Chicago's Chris Rusin allowed one run on five hits with four strikeouts in five innings. He left the game in line for his first major league victory, but the Pirates tied it in the seventh when Holt scored on a balk by James Russell (7-1).
Rusin allowed five runs on eight hits in one-plus inning during his previous outing.
"It was so bad last week that anything would have been better this week," Rusin said. "Today I was just able to throw strikes with all my pitches, and I kept the ball down."
Pittsburgh's Jeff Locke gave up the homers to Vitters and Recker in the fourth but overall scattered seven hits over six innings.
The Pirates left 13 men on base -- at least one during each of the first seven innings. They stranded two four times, including when Dave Sappelt caught Garrett Jones' sinking liner to right to end the fifth.
"It's a game of inches, and off the bat I thought for sure it was falling but Sappelt got a good jump on it and made a good play," Jones said.
"We had some opportunities; we just didn't execute."
McCutchen's homer, his 25th, was his NL-leading 173rd hit. It ended a streak of five consecutive homerless games for the Pirates -- their longest of the season.
Grilli earned the loss in relief for the second straight night.
Pittsburgh is 9-20 since Aug. 8. ... The Pirates activated RHP Chad Qualls from the disabled list before the game. He retired both batters he faced in the eighth. ... Locke singled in the fifth, his first hit in the majors. ... The Pirates will play three games at the Reds starting Monday. The previous time Pittsburgh played in Cincinnati Aug 3-5, it entered trailing by 3½ games in the NL Central. Five weeks later, the Pirates are in third place and 11 back. ... The Cubs head to Houston, where they will play their final series there against the Astros with both teams part of the National League. The Astros move to the AL West next season.