Halladay (6-6), who pitched seven shutout innings against Arizona in his previous start, yielded only a Carlos Beltran solo homer in the second inning and a John Jay single in the third, otherwise handcuffing St. Louis.
The right-hander didn't allow a walk, struck out eight and set down the last 12 batters he faced as Philadelphia took the opener of a three-game series.
Jonathan Papelbon secured the victory with his 25th save.
Domonic Brown supplied and RBI single, while Utley cracked a two-run homer in the eighth inning off Barret Browning (0-1) to break a 1-1 tie.
Cards starter Kyle Lohse held the Phillies to one run on four hits through seven full frames.