St Mirren came agonisingly close to taking a point at Celtic Park, but a late goal from Luke McCowan saw the home side take the points on the opening day of the season.
Celtic had most of the chances, but Saints defended resolutely and could have grabbed a share of the spoils if not for McCowan's 87th minute deflected strike.
The hosts didn't cause too much trouble in the opening stages despite seeing the majority of the ball. A tame header from Adam Idah was easy for Shamal George in the Saints net, while the striker sent another header over a few minutes later.
Celtic should have taken the lead on 19 minutes when a quick free-kick from Hoops captain Callum McGregor sent Daizen Maeda racing clear on goal. The forward rounded George but couldn't find the target from the angle. A minute later, Celtic threatened again when a dangerous low cross from Alastair Johnston on the right had to be cut out by Jayden Richardson in what a terrific piece of defending by the Saints number two.
The Buddies were certainly in the game and a searching ball over the top from Richard King found Killian Phillips in the Celtic area. The Irishman tried to bring it down to fashion the opportunity but was quickly crowded out by his fellow countryman Liam Scales who denied him the chance to get a shot away.
Mark O'Hara tested Kasper Schmeichel a little after the half hour mark with a curling effort from 20 yards. The Saints skipper took aim for the top corner but saw the Danish goalkeeper at full-stretch to push away. The Hoops were inches away from grabbing the lead in the final moments of the first-half when George made a good save to touch Benjamin Nygren's shot onto the bar before Saints managed to clear.
Stephen Robinson made a change at the interval with the introduction of forward Jonah Ayunga in place of midfielder Fraser Taylor. The Saints striker had a decent chance on the counter 10 minutes after the restart, but his effort was easy for Schmeichel to gather. That came just a few minutes after George got a strong hand to a low shot from McGregor.
The home side almost took the lead in freak circumstances just before the hour mark when a speculative effort from Reo Hatate deflected off Marcus Fraser and almost looped in over George. It came back off the post before striking the Saints goalkeeper and drifting out for a corner.
Saints' resistance was broken when McGregor looked to have given the hosts the lead with around 20 minutes remaining. O'Hara couldn't get the ball clear and that saw McGregor find the ball before drilling into the net from the edge of the area. However, a VAR check disallowed the goal after the ball twice struck the Celtic captain's arm before the strike. Two minutes later, Idah rattled the post as the home side looked to up the intensity heading into the final part of the match.
A triple substitution on 79 minutes saw Tunmise Sobowale, Oisin Smyth and Evan Mooney come on for Saints. And within two minutes of their introduction, the trio combined with Sobowale eventually finding Smyth unmarked in the Celtic box. The midfielder looked poised to put the Buddies ahead, only for his goalbound effort to be blocked by Johnston.
Celtic would nab a winner with just three minutes of normal time remaining. The ball was worked to McCowan who took a touch to steady himself before lashing into the bottom corner with the aid of a deflection off a Saints player. It was a bitter blow given how well Stephen Robinson's men had played, but the overall performance is sure to give the Buddies boss cause for optimism for the season ahead.
Full-Time: Celtic 1-0 St Mirren
St Mirren: George, Fraser, Gogic, King (Dijksteel 90), Richardson (Sobowale 79), Phillips, Taylor (Ayunga 46), O'Hara (c), John, Idowu (Smyth 79), Mandron (Mooney 79)
Subs Not Used: Mullen, Freckleton, McMenamin, Calvin
Celtic: Schmeichel, Johnston, Carter-Vickers, Scales, Tierney (Trusty 65), McGregor (c), Nygren (McCowan 78), Hatate (Engels 78), Yang (Forrest 59), Maeda, Idah (Kenny 78)
Subs Not Used: Sinisalo, Ralston, Bernardo, Yamada
Referee: Don Robertson
Assistant Referee: David Dunne
Assistant Referee: Craig Ferguson
VAR: Greg Aitken