Match ends, St. Mirren 1, Celtic 2.
Celtic head into Sunday's Old Firm derby five points clear at the top of the Scottish Premiership after a comfortable victory at St Mirren.
Goals in a 10-minute first-half spell from Callum McGregor and James Forrest secured an 11th consecutive league win for Neil Lennon's men.
Cammy MacPherson netted a late reply but Celtic maintained their advantage over Rangers, having played a game more, while St Mirren's first defeat in four matches drops them to 10th, four points clear of bottom club Hearts.
The hosts were indebted to goalkeeper Vaclav Hladky for keeping the score down with several impressive saves before grabbing a consolation their perseverance merited.
Celtic quality shines through
With Celtic having narrowly avoided a shock slip-up at home to Hamilton prior to the last Old firm derby, Lennon was at pains to avoid the looming visit of Rangers clouding his players' thoughts here.
They were never given a moment's peace by a St Mirren side full of endeavour but the gulf of quality proved telling.
The Paisley club have gone just shy of a decade since their last league win over Celtic, and even a goal had proved beyond them in the sides' last five top-flight meetings until MacPherson's deflected free-kick ended that trend.
Jim Goodwin's men hassled, harried and looked sprightly going forward in the opening stages. But just as they began to dare to believe, their hopes were crushed by two quick goals that left the outcome in little doubt.
Celtic's threat had been restricted to plonking the ball on to the head of Kris Ajer at set-pieces before Odsonne Edouard went on the gallop to help fashion a breakthough.
The French striker raced ominously into the box before his heavy touch gave St Mirren the chance to mop up. Instead, they made a mess of it as Paul McGinn and goalkeeper Hladky left the ball to each other, McGregor nipped in and hit the post before tapping in the rebound.
If the first goal was a calamity from St Mirren, the second was a counter-attack of sheer quality from Celtic, who wore black armbands in memory of former captain Duncan MacKay, who has died at age 82.
Edouard beat the offside trap as he raced from inside his own half on to Forrest's pass, before playing in the Scotland winner on the edge of the box. There was still work to do as Forrest rounded Hladky and finished smartly for his first goal in eight matches and 14th of the season.
Forrest almost sniffed out a third early in the second half, with Hladky superbly denying him and Jeremie Frimpong in quick succession.
The Czech goalkeeper showed why he has attracted interest from the likes of Houston Dynamo with a showreel performance that also saw Boli Bolingoli and Ntcham foiled.
Edouard had a goal ruled out in a tight offside call as St Mirren continued to ride their luck. But the hosts kept striving for a goal and their improved second-half performance saw Ryan Flynn sidefoot a glorious chance wide from six yards before Jon Obika pounced on slackness from Christopher Jullien to bring a save from Fraser Forster.
They finally got their reward with MacPherson's free-kick in the final minute and although Goodwin's men slip a place in the table, defeat for the bottom two means no real damage is done.
Celtic, meanwhile, go into the second Old Firm derby of the Premiership season in high spirits and guaranteed to end 2019 in top spot.
Man of the Match - Odsonne Edouard
BBC Scotland's Jonathan Sutherland at the Simple Digital Arena
Celtic's main man up front didn't get on the scoresheet but was at the heart of all things dangerous for the champions.
The French Under-21 striker cuts a languid figure at times but it is deceptive as he has that extra gear and touch of quality that can make all the difference in the final third.
Rarely at full throttle, he did what was required to help give Celtic the advantage here as he limbered up for the huge showdown with Rangers.
'Frustrating to lose cheap goals' - reaction
St Mirren manager Jim Goodwin: "The manner of the goals we lost is more frustrating than anything else. We had good possession on both occasions and gave it away really cheaply. Celtic really hurt us.
"We asked for a reaction and we got it. For large spells in the second half I thought we were the better team, but the goal came too late for us."
Celtic manager Neil Lennon: "It should have been more comprehensive. Our play at times on the counter-attack was spectacular.
"We had chances to put the game beyond St Mirren and their goalkeeper made some fantastic saves. The overriding emotion is satisfaction with the way we're playing and the wins keep coming."
- 2McGinnBooked at 85mins
- 19MoriasSubstituted forCookeat 82'minutes
- 11DurmusSubstituted forAndreuat 65'minutes
- 2JullienBooked at 88mins
- 49ForrestSubstituted forJohnstonat 69'minutes
- 22EdouardSubstituted forGriffithsat 87'minutes
- William Collum
- Shots on Target
Second Half ends, St. Mirren 1, Celtic 2.
Scott Brown (Celtic) wins a free kick in the defensive half.
Foul by Cody Cooke (St. Mirren).
Goal! St. Mirren 1, Celtic 2. Cameron MacPherson (St. Mirren) from a free kick with a right footed shot to the high centre of the goal.
Christopher Jullien (Celtic) is shown the yellow card for a bad foul.
Foul by Christopher Jullien (Celtic).
Jonathan Obika (St. Mirren) wins a free kick in the attacking half.
Substitution, Celtic. Leigh Griffiths replaces Odsonne Edouard.
Attempt blocked. Michael Johnston (Celtic) right footed shot from outside the box is blocked. Assisted by Boli Bolingoli-Mbombo.
Paul McGinn (St. Mirren) is shown the yellow card for a bad foul.
Michael Johnston (Celtic) wins a free kick on the left wing.
Foul by Paul McGinn (St. Mirren).
Attempt blocked. Cody Cooke (St. Mirren) left footed shot from outside the box is blocked. Assisted by Tony Andreu.
Substitution, St. Mirren. Cody Cooke replaces Junior Morias.
Attempt missed. Olivier Ntcham (Celtic) right footed shot from outside the box is close, but misses to the left. Assisted by Scott Brown.
Attempt saved. Boli Bolingoli-Mbombo (Celtic) left footed shot from the left side of the box is saved in the top left corner. Assisted by Ryan Christie with a cross.
Attempt blocked. Ryan Christie (Celtic) left footed shot from the right side of the box is blocked. Assisted by Olivier Ntcham.
Offside, Celtic. Olivier Ntcham tries a through ball, but Odsonne Edouard is caught offside.
Attempt saved. Olivier Ntcham (Celtic) right footed shot from outside the box is saved in the centre of the goal.