Scottish Premiership Wrap: Celtic extend lead, Aberdeen net late winner
Neil Lennon's charges failed to find the target in the first half, but stepped up their performance after the break with a four-goal blitz.
Charlie Mulgrew found the breakthrough on 53 minutes, poking home in the box after a marauding run by Adam Matthews, and the lead was extended shortly after when Anthony Stokes curled beyond Marian Kello in the St Mirren goal.
Kris Commons then took centre stage with a quick-fire double, taking him past the 50-goal landmark for Celtic.
First, he headed home from Emilio Izaguirre's cross on 70 minutes, before adding a second two minutes later with a fierce close-range strike from James Forrest's centre.
Celtic's ninth straight league win leaves Lennon's unbeaten side 13 points clear of second-placed Aberdeen with a game in hand.
Aberdeen, meanwhile, kept the gap at 13 points with a 1-0 success at Kilmarnock - their third victory in succession.
Derek McInnes' men were frustrated for the majority of the game, but defender Mark Reynolds headed home the winner on 83 minutes.
Nicky Low was sent off in injury time for the visitors but it made no difference to the outcome of the match.
Elsewhere, a late revival saw Dundee United claw back a two-goal deficit to earn a share of the spoils in a 2-2 draw with Hibernian at Tannadice.
Liam Craig opened the scoring for the visitors on 38 minutes, before adding a second from the penalty spot on the hour mark.
David Goodwillie reduced the deficit with seven minutes remaining, before Brian Graham sparked delight among the home supporters with a 90th-minute leveller.
In Sunday's other fixture, Hearts' miserable campaign continued at Tynecastle with a 2-0 setback against fellow strugglers Partick Thistle.
Gary Locke's charges are still to enter positive points after being handed a 15-point deduction before the start of the season.
Lyle Taylor notched his first goal for Partick on 14 minutes, before Aaron Taylor-Sinclair added a second five minutes before the break to end the away side's nine-game winless streak.