ST. LOUIS -- Tyler Colvin had one big swing. Colorado Rockies pitchers got a lot of big outs.
"We're playing a great ballclub that's right in the race," Colvin said. "It's good to see to see us hold them off."
|More on Rockies-Cardinals|
|More MLB coverage|
Matt Holliday hit his 14th home run in the first inning for the Cardinals, who had been 32-10 when scoring first. Carlos Beltran was 0 for 3 with a walk to end a nine-game RBI streak in which he drove in 15 runs.
The Cardinals were 0 for 5 with runners in scoring position.
"Normally we get that kind of lead and it's hard to catch us because we keep piling them on," manager Mike Matheny said. "But they kept us off balance. They did what they needed to do to shut us down."
Matt Belisle retired four in a row to end the eighth, the biggest out coming on Holliday's groundout with two runners on.
Rafael Betancourt worked out of trouble in the ninth for his 13th save in 17 chances. He had blown three of his previous five save opportunities, but got Jon Jay to look at strike three with two on for the final out.
"I thought it was going to be a little further out than it was," Jay said. "He made a good pitch and I should have tried to foul it off to stay alive."
The versatile Colvin has started at all three outfield spots plus first base and batted everywhere in the lineup except fourth and ninth. He's batting .358 (24 for 67) in his past 18 games with seven homers and 22 RBI.
"He's a terrific find for us," manager Jim Tracy said. "He's rediscovered himself."
Francis (2-1) beat the Cardinals for the sixth time in seven career decisions, following up on his first victory since July 2010 in his previous start against the Cubs.
Francis didn't allow a run after giving up Holliday's two-run homer in the first. The Cardinals had two runners in scoring position the next four innings against the lefty, who earned his 57th victory to break a tie with Ubaldo Jimenez for third on the franchise career list and leave him one behind Jason Jennings for second.
"I love being here, I love playing for this team," Francis said. "For them to give me a shot, so far I've pitched well and taken advantage of it. Hopefully, it sticks."
Jay singled with one out in the first ahead of Holliday's 14th home run, a low liner that banged off a sign just over the left-field wall. Holliday is batting .500 (30 for 60) in the past 15 games with four home runs, 18 RBI and nine doubles, and has five home runs and 13 RBI in 19 career games against his old team.
Rookie Joe Kelly (1-1) was strong for the fourth time in five outings as the stand-in starter for injured Jaime Garcia, hurt only by Colvin's 10th home run off a changeup in the third that put Colorado up 3-2. Colvin connected for the second successive game the at-bat after catcher Yadier Molina made a wild throw to second on a sacrifice bunt attempt by Francis that would have resulted in a forceout.
"I want Yadi being aggressive, I want him making that play," Matheny said. "That's the right play to make. You can't have guys out there being tentative. The ball just sailed on him."
Both teams left the bases loaded in the third, but the Rockies took the lead on Colvin's 10th home run while the Cardinals came up empty when Allen Craig broke his bat on a two-out soft liner to third.
The Rockies stranded three in the fourth, too, when Carlos Gonzalez popped out to short. Gonzalez singled in the third to extend his hitting streak to 11 games.
The slow-footed Molina stole his eighth base in nine tries standing up in the sixth, catching Josh Roenicke napping with a huge jump ... Gonzalez is batting .372 (16 for 34) during his streak. ... Cardinals rookie LHP Barret Browning has retired all nine batters he has faced after working a scoreless seventh with a strikeout. ... Daniel Descalso had been 0 for 10 as a pinch hitter before singling in the seventh.