Celtic recovered from a shock early deficit to edge past St Mirren and close to within three points of Scottish Premiership leaders Rangers.
The hosts stunned the champions in the third minute with Lee Erwin marking his first start with a maiden goal.
But Celtic led at half-time thanks to headers from Shane Duffy – his second in as many games – and James Forrest.
Emergency St Mirren loan signing Zdenek Zlamal, on his second appearance, then saved an Odsonne Edouard penalty.
Neil Lennon’s side overtake Hibernian in second on goal difference, with a game in hand on Rangers, while St Mirren remain seventh.
Celtic were rarely troubled after repairing the damage of their sloppy start, but it was far from a vintage performance as they struggled to kill off a stubborn home side.
St Mirren – who last beat Celtic 10-and-a-half years ago – were still without their first and second-choice keepers after a torrid week of coronavirus controversy. To his credit, Zlamal – preferred to raw 20-year-old Peter Urminsky – excelled with several fine stops.
Few gave Jim Goodwin’s men a hope, but they stunned the champions just three minutes in. Celtic switched off as Jamie McGrath swung in a corner, Joe Shaughnessy glanced it on and Erwin scrambled home from a couple of yards.
Celtic were reeling, with St Mirren comfortably protecting the lead. Edouard fired a warning on the 20-minute mark, heading narrowly wide after Forrest stood up a cross to the back post.
But two goals in a 15-minute spell – both crafted by Ryan Christie – turned the game around. Duffy’s aerial prowess is hardly a secret weapon, yet the Ireland centre-back was left unmarked six yards out to plant a header beyond Zlamal from an inswinging free-kick.
Christie’s next assist was superb, arcing a deep cross from the left and perfectly on to the head of Forrest to flash inside the keeper’s right-hand post.
St Mirren had a penalty shout ignored when a free-kick struck Duffy’s arm, and Erwin sent a dipping second-half drive narrowly over the bar.
But while Celtic finished with 77% possession, they couldn’t find the comfort of a third goal. Edouard should have provided it after Christie was felled by McGrath, but his poor spot-kick was too close to Zlamal, who got down smartly.
The French striker also had a free-kick parried clear by the Czech keeper, whose final act was to deny Christie’s thumping effort as St Mirren battled to the bitter end.
Man of the match – Ryan Christie
What did we learn?
This was Patryk Klimala’s big chance to impress for Celtic, but he failed to impress. The Polish striker, who scored as a substitute at the weekend, was handed his first start of the season but was largely anonymous before being replaced after 66 minutes.
His lack of striking impact was in stark contrast to on-loan Brighton centre-back Duffy, who followed up his debut goal with another key header. Duffy is already integral to Lennon’s team.
If this was Zlamal’s last appearance for St Mirren, he can return to Hearts with his head held high. The 34-year-old could have buckled after his baptism of fire against Hibs, having signed just hours before Saturday’s 3-0 defeat, but was in inspired form here and kept St Mirren in the game.
What did they say?
Celtic manager Neil Lennon: “We had a poor start, conceding from a set-play is always disappointing. But our reaction was excellent, we played with real intensity and thoroughly deserved to go into half-time with the lead.
“Overall I’m delighted. We’ve closed the gap, it’s a great win, and we’ve made use of the extra game.”
Celtic can go top – for 24 hours at least – with victory at home to Livingston on Saturday, while St Mirren are away to Dundee United.
- 22FraserBooked at 34mins
- 2TaitBooked at 86mins
- 25ErhahonBooked at 83mins
- 19MoriasSubstituted forObikaat 80′minutes
- 16FoleySubstituted forDurmusat 90′minutes
- 21ConnollySubstituted forMcAllisterat 64′minutes
- 49ForrestSubstituted forFrimpongat 80′minutes
- 8BrownBooked at 45mins
- 11KlimalaSubstituted forAjetiat 66′minutes
- 22EdouardSubstituted forNtchamat 80′minutes
Match ends, St. Mirren 1, Celtic 2.
Second Half ends, St. Mirren 1, Celtic 2.
Foul by Albian Ajeti (Celtic).
Joe Shaughnessy (St. Mirren) wins a free kick in the defensive half.
Attempt saved. Ryan Christie (Celtic) left footed shot from outside the box is saved in the bottom right corner. Assisted by Albian Ajeti.
Hatem Elhamed (Celtic) wins a free kick in the defensive half.
Foul by Lee Erwin (St. Mirren).
Substitution, St. Mirren. Ilkay Durmus replaces Sam Foley.
Foul by Scott Brown (Celtic).
Marcus Fraser (St. Mirren) wins a free kick in the defensive half.
Albian Ajeti (Celtic) wins a free kick in the defensive half.
Foul by Sam Foley (St. Mirren).
Attempt blocked. Jamie McGrath (St. Mirren) right footed shot from outside the box is blocked.
Richard Tait (St. Mirren) is shown the yellow card for a bad foul.
Jeremie Frimpong (Celtic) wins a free kick on the right wing.
Foul by Richard Tait (St. Mirren).
Jeremie Frimpong (Celtic) wins a free kick in the defensive half.
Foul by Kyle McAllister (St. Mirren).
Attempt blocked. Sam Foley (St. Mirren) right footed shot from outside the box is blocked.
Foul by Ryan Christie (Celtic).