Virgil van Dijk struck after just five minutes when he carried the ball from his own half, beating Gary McDonald and Sanel Jahic, while using his pace to go past three others and send his low strike inside the post from 16 yards.
Celtic should have doubled their lead when Tony Stokes tapped the ball over the line from Scott Brown’s low delivery, but the latter was wrongly flagged offside as he burst on to a threaded pass from Kris Commons.
Stokes latched on to a long pass from Van Dijk and flicked the ball over the advancing Alan Mannus, but Jahic and Frazer Wright got across to snuff out the danger as the keeper returned to his line.
Mannus then denied Commons when Stokes set up the Celtic midfielder with a terrific reverse pass, and from the resulting corner Van Dijk headed narrowly wide.
Van Dijk was in more familiar territory as he got his foot across to block a shot from Brian Easton inside the penalty area after Nigel Hasselbaink rolled the ball wide to the Saints defender.
Fraser Forster did well to parry a powerful drive from Gwion Edwards at his near post after the St Johnstone substitute skipped inside Efe Ambrose.
A minute later Mannus scooped away a thunderbolt from Commons from 15 yards after Joe Ledley delivered the ball from the left flank.
St Johnstone battled until the end but Celtic’s victory was more comfortable than the result suggests.