St Johnstone gave their all to try to stay in the cup but they were finally worn down by Leigh Griffiths.
They are not the first team that has happened to and they won’t be the last.
The Celtic striker pounced on a loose ball with just six minutes left to book the Hoops’ place in the last four of the Betfred Cup against Hearts.
This was a home display full of determination and courage, though. There is no disgrace in losing so narrowly to the champions and Saints can take a lot of positives out of it.
Saints made just one change to the line-up that kicked off the heavy loss to Rangers at Ibrox on Sunday, with Ross Callachan coming in for Matty Kennedy.
Celtic didn’t mess about with their selection, making no fewer than six alterations to the side beaten at Kilmarnock.
Out went goalkeeper Craig Gordon, Jack Hendry, Youssouf Mulumbu, Scott Sinclair and Ryan Christie and Mikey Johnston. Scott Bain was between the posts, while Kristoffer Ajer, James Forrest, Olivier Ntcham, Callum McGregor and Odsonne Edouard also made it.
Hoops boss Brendan Rodgers, who confirmed pre-match that he turned down a chance to move to China in the summer, was looking for a vast improvement from his players after that defeat at Rugby Park.
The tie didn’t warm up until the eighth minute when Forrest burst up the right and squared to Ntcham, whose shot was deflected away for a corner.
It was cagey stuff early on, perhaps unsurprisingly so from two sides recovering from bad results.
The home team’s first decent attempt on goal came on 18 minutes when David Wotherspoon teed up Liam Craig from a freekick 25 yards out but the shot was never going to trouble Bain.
The visitors were seeing plenty of the ball but it was mainly tippy-tappy stuff. Saints went direct on 26 minutes when Drey Wright showed a terrific turn of pace to race up the right but the move petered out.
The Perth men looked comfortable but the Hoops should have been ahead just three minutes later. With defender Joe Shaughnessy sleeping, Saints had goalie Zander Clark to thank for a fine save with his legs but Griffiths should have scored with his header at the back post.
The Parkhead side made an enforced change on 34 minutes when an injured Ajer made way for former Dundee centre-half Hendry.
Blair Alston shot from just outside the box as half-time neared but then the visitors raced up to the other end of the park and almost made grabbed the lead.
Every Saints fan held his or her breath as McGregor slid his low shot inches past the far post after being sent clear by a Ntcham through ball. It was a bad miss by the Scotland man.
Saints made a surprising substitution at the break, with frontman Tony Watt going off and Chris Kane replacing him.
McGregor’s toe poke that was saved down low by Clark was the first opportunity of the second half, then the Saints goalie rode to the rescue again on 49 minutes as he pushed away a curling shot from Ntcham.
Celtic were pinning their opponents back now and first Dedryck Boyata headed over the bar from close range then Griffiths pulled his drive wide.
Alston shot too straight at Bain on 52 minutes as the home team looked for a breather. The same player found space for another strike from the edge of the box on 61 minutes but this time pulled the ball wide.
The hosts brought on Danny Swanson for a tiring Wright, while the Hoops replaced Edouard with Lewis Morgan.
Home hearts were in mouths when Griffiths wriggled clear of Shaughnessy and found himself with a clear strike on goal from 12 yards. However, Clark stuck out a leg again to make the save.
Having survived that scare, Saints had an excellent chance themselves through Wotherspoon on 73 minutes but his curling left-foot shot cleared the far post.
The visitors brought on Tom Rogic for McGregor before Griffiths flashed a header across the face of the St Johnstone goal.
Saints’ resistance was finally overcome on 84 minutes.
Kieran Tierney delivered the scooped cross to Forrest and the header struck Scott Tanser on the line. There were claims for a penalty but referee John Beaton let play go on and the loose ball was slammed into the net by Griffiths with his weaker right foot.
Saints had to go for it now and they even put skipper Shaughnessy up front.
The visitors were reduced to 10 men in the first minute of added time when Boyata was given a straight red for what appeared to be dissent.
The final chance fell to the home team but new striker Shaughnessy could only head wide.
Attendance: 5,635.
St Johnstone: Clark, Tanser, Alston, Shaughnessy, Wright (Swanson 66), Wotherspoon, Kerr, Foster, Craig (McMillan 85), Callachan, Watt (Kane 46). Subs not used: Mitchell, Anderson, Nydam, Kennedy.
Celtic: Bain, Forrest, Lustig, Boyata, Ajer (Hendry 34), Tierney, Brown, McGregor (Rogic 75), Ntcham, Griffiths, Edouard (Morgan 66). Subs not used: Gordon, Mulumbu, Christie, Sinclair.
Referee: John Beaton.