The home side tried to get an early goal on the board, but Michael O'Halloran left Craig Gordon with an easy save after being played in by a high ball forward from Steven MacLean, while the Celtic keeper cleared a couple of corners in the opening quarter of an hour.
The reigning Scottish champions started to dictate the game as the opening 45 minutes progressed, resulting in Alan Mannus coming under pressure between the posts for St Johnstone, but the keeper was ready to deny Nadir Ciftci's low strike from a Stefan Johansen delivery.
Tomas Rogic created another chance for the Turkish striker shortly after, but Mannus was able to keep it out again, with Ciftci blasting the ball straight at the home side's keeper.
Ciftci finally broke the deadlock shortly before the interval though, finding himself in space at the far post to power the ball in from a Callum McGregor corner.
The home side almost got one back moments after the restart as Brian Easton tried his luck with a 25-yard drive, but the defender's finish was kept out by the post.
Rogic could have added a third on the hour mark when he sprinted into the box to meet an Emilio Izaguirre through-ball, but the Australia international's finish was hurried, resulted in a wayward shot.
There was a third for Celtic midway through the second period though as Mikael Lustig charged through the middle before crossing the ball in to Ciftci, leaving the scorer of the opening goal with a simple header to add his second.
The home side started to look tired in the final 20 minutes, allowing James Forrest to sprint forward before sending a long ball forward into the penalty area, but none of his teammates could get on the end of it.
Rogic was involved again as the final 10 minutes approached, making a run into the box before pulling it back for Kris Commons, but the midfielder's finish was blocked.
The defeat is the Saints' first in eight outings in the league, but keeps them fourth in the table, while Celtic go four points clear of Aberdeen with a game in hand over the second-placed side.