The Astros are 0-4 while getting outscored 32-8 since interim manager Tony DeFrancesco replaced Brad Mills as leader of the stripped-down roster. Houston has won just seven of its last 50 overall.
Ben Francisco had three hits for the Astros, who were swept for the third time this month and 12th overall.
Holliday's three-run double in the fifth inning was the go-ahead blow.
Jake Westbrook (13-9) won for the fourth time in five starts despite struggles with control two days after getting a new contract for next season with a mutual option for 2014.
Westbrook surrendered five runs on seven hits, two walks and two hit batters in five innings, ending a string of 13 consecutive starts of at least six innings.
Astros rookie lefty Dallas Keuchel (1-6) retired 11 of the first 12 batters, but six of his last seven reached base, one on an error. He earned his first career RBI on a sacrifice fly in the second, but was charged with five earned runs in four-plus innings.
The Cardinals totaled 17 hits and were 10 for 14 with runners in scoring position against five pitchers, one off their season best, to sweep the Astros for the first time since April 2009 and wrap up a 6-3 homestand with a string of contenders awaiting.
St. Louis starts a 10-game trip Friday night with three games at NL Central-leading Cincinnati, followed by three at wild card-contending Pittsburgh and four at NL East-leading Washington.
Like Westbrook, the 24-year-old Keuchel entered with decent recent numbers with three consecutive quality starts. He's 0-6 in nine starts since beating the Indians with a six-hitter on June 23.
Freese's 16th homer capped a two-out rally in the fourth. The Astros elected to pitch to Freese instead of Daniel Descalso, just 3 for 21 during the homestand to that point and batting .226.
The first five Cardinals reached safely to start the fifth, including an error. Holliday had been just 5 for 36 with two RBIs on the homestand, put St. Louis ahead 7-5 with his double.
NOTES: Craig has a 12-game hitting streak. He is batting .354 during his hitting streak with a homer, six doubles and six RBIs, raising his average to .313. ... Tyler Greene, traded from the Cardinals to Houston earlier this month, was 0 for 7 with five strikeouts in the series. Greene was a first-round pick in 2005 and became a fan target after numerous failures in St. Louis. ... ... Brett Wallace is 7 for 14 against Westbrook with four RBIs. ... Astros OF Justin Maxwell missed his second straight start with a bruised right index finger. ... Lance Lynn (13-5, 3.73 ERA) faces Mat Latos (10-3, 3.56) in the series opener against the Reds. ... The Astros open a three-game road series against the Mets, with Jordan Lyles (2-10, 5.70) set to start the opener against Jonathan Niese (10-6, 3.82).
Link to boxscore: St. Louis 13, Houston 5