With Miami leading 4-3 in the sixth, Fowler stroked a two-run triple to left-center. Fowler then scored on a sacrifice fly by Kolten Wong to give St. Louis a 6-4 lead en route to its sixth straight victory.
The Cardinals (19-14) also won their ninth consecutive road game, the longest streak in the majors this season. The club record is 12 straight road wins in 1941.
Miami (13-20) is 3-12 in its past 15 games. The Marlins have dropped five straight series, but this is the first time all season that they have been swept in three games.
Miami's Christian Yelich hit a leadoff double in the ninth, but Seung Hwan Oh hung on for his ninth save of the season. With two outs and runners on the corners, Steve Lombardozzi drilled a ball down the right field line that went just foul on what could have been a game-tying double or triple. On the next pitch, he grounded out to end the game.
The Marlins, who have placed one infielder on the disabled list in each of the past three days, used their fourth starting shortstop of the season, Dee Gordon, normally their second baseman. Gordon hadn't played shortstop since 2013.
In addition, the Marlins used new arrival Lombardozzi at second base. For the 28-year-old Lombardozzi, it was his first big league game since 2015 and his fourth organization in the majors.
Neither starting pitcher earned a decision. St. Louis' Lance Lynn, who entered the game with a 4-1 record and a 2.04 ERA, lasted just four innings, allowing four runs. Miami's Tom Koehler, given a 4-0 lead in the first inning, allowed four runs in 5 1/3 frames.
Reliever Sam Tuivailala (2-0) earned the win with one scoreless inning. Marlins reliever Jarlin Garcia (0-1) took the loss in his first career decision.
After St. Louis took its 6-4 lead, Miami closed the deficit to 6-5 in the bottom of the sixth. Gordon doubled and scored on a one-out single by Derek Dietrich. The Marlins had a chance to get more runs in the inning, but Giancarlo Stanton bounced out with the bases loaded.
Cardinals shortstop Aledmys Diaz hit an RBI single in the seventh to restore St. Louis' two-run lead.
Miami opened the scoring with a four-run first. Yelich hit a solo homer to center, and Justin Bour pulled a three-run shot to the upper deck in right.
The Cardinals cut their deficit to 4-3 in the third. After walks to Magneuris Sierra and Matt Carpenter, the Cardinals got a two-run opposite-field single by Jedd Gyorko and an RBI single to center by Yadier Molina. Koehler had to duck on Molina's hard shot.
NOTES: Cardinals RHP Daniel Poncedeleon, a prospect at Triple-A Memphis, left the field Tuesday on a stretcher after he was hit in the head by a line drive. Doctors operated on Poncedeleon on Tuesday night, and he remains in intensive care. ... Miami placed SS Adeiny Hechavarria (oblique strain) on the disabled list and selected the contract of INF Steve Lombardozzi from Triple-A New Orleans. RHP Joe Gunkel was designated for assignment to create space on the 40-man roster. ... Marlins 3B Martin Prado (hamstring) is expected to miss at least six weeks. ... Miami INF Miguel Rojas (broken right thumb) will have surgery Friday and is expected to miss at least two months. ... Both teams are off Thursday. The Cardinals open a three-game series Friday against the visiting Chicago Cubs. RHP Mike Leake, who leads the National League with a 1.79 ERA, starts for St. Louis. ... Miami hosts the Atlanta Braves on Friday.