St. Louis won its fourth in a row, riding a seven-inning, resurgent effort from Lance Lynn.
Lynn (12-5) had gone 1-4 in his five previous starts, but allowed the Phillies a lone run on five hits while striking out six.
Both Trevor Rosenthal in the eighth and Edward Mujica in the ninth allowed a leadoff single, but neither Philadelphia runner advanced beyond first base. Mujica picked up his 30th save, moving him into a tie with Pittsburgh's Jason Grilli for the National League lead.
The Cardinals did all their damage in the third off Kyle Kendrick (9-7).
Pete Kozma opened the inning with a single and moved to second on a sacrifice by Lynn. Matt Carpenter then singled to drive in Kozma and Jay delivered Carpenter with his triple to right.
A single from Matt Adams brought in Jay with the third run of the inning.
Erik Kratz drove in Philadelphia's run with a single in the fourth.
Teacher apologizes for showing sexual image of herself in class
Senate Democrats to pull all-nighter on climate change