St Johnstone tried their best to halt Celtic’s unbeaten run but were blown off course by a controversial penalty award to the Hoops.
With the Perth men 2-1 up and looking good for the lead, the visitors were gifted a penalty that should not have been given to draw them level just after the hour-mark.
Kieran Tierney’s cross may have hit Saints defender Keith Watson but there was no way it could reasonably be considered a handball offence.
It was a shocking decision from referee Craig Thomson, who earlier had ignored the claims of Danny Swanson after he was taken down in the other box by Hoops skipper Scott Brown.
Deflated by losing the lead in such cruel fashion, Saints went on to concede another three goals.
Sub Moussa Dembele, who had scored from the spot with his first touch, made it 3-2 with a fine strike on 75 minutes then Scott Sinclair added a fourth with nine minutes to go.
To add insult to injury, Dembele grabbed his hat-trick with five minutes left.
St Johnstone had been the last side to beat Celtic in domestic competition – a 2-1 victory at home on May 11 – but they had to watch as the Hoops’ record stretched to 29 matches.
The visitors had taken the lead on just six minutes when Liam Henderson sent a well-placed strike into the top corner of the net.
The hosts hit back on 31 minutes, however, when Watson headed home from a corner.
Saints then went ahead with just two minutes of the first half remaining when Dedryck Boyata headed into his own net.
Both of the Saints’ goals were made by Danny Swanson.
Before kick-off, there was some shock team news for Saints supporters to digest as they took their seats.
Firstly, there was the absence of experienced defender Steven Anderson because of tonsillitis.
Secondly, there was no place in the side for striker Steven MacLean, the man who scored the acrobatic winning goal against Partick Thistle at Firhill on Wednesday night.
In total, the Perth men made four changes.
Watson and Tam Scobbie came into a three-man central defence alongside Joe Shaughnessy, while Paul Paton and David Wotherspoon started in midfield.
That meant no places for Anderson, Liam Craig, Chris Millar and MacLean.
The Hoops handed Gary Mackay-Steven a rare start along with Henderson, with Callum McGregor and James Forrest dropping to the bench.
Eric Sviatchenko was in defence in place of Jozo Simunovic, while star of the transfer window Dembele only made the bench.
Saints went on the offensive on three minutes and Boyata had to stretch to head away Paton’s freekick.
Home keeper Zander Clark was called into action when Patrick Roberts played in Mackay-Steven, the goalie producing a terrific point-blank save.
However, Clark was beaten on six minutes as Henderson opened the scoring for the visitors.
The McDiarmid keeper did really well to save from Roberts but the ball broke back to Henderson and he tucked his left-foot shot into the top corner.
With 10 minutes gone, Henderson had another go but his strike was blocked and Saints breathed a sigh of relief.
The home team had to get up the park and they did just that on 13 minutes, with Swanson trying his luck with a snap-shot from outside the box that flew past Craig Gordon’s right-hand post.
St Johnstone created a golden chance on 18 minutes when a fabulous pass from Swanson cut through the Hoops’ defence and sent Foster clear. However, his shot was smothered by the advancing Gordon.
Just four minutes later, it should have been 2-0 to the Parkhead men when Mackay-Steven was sent away by a Scott Sinclair pass. He raced in on goal but could only hit his shot straight at Clark.
On 31 minutes, Wotherspoon went on a mazy run in from the right and his cutback was blocked for a corner – a crucial one as it turned out.
Swanson trotted over to take it and when he swung the ball to the back post, Watson climbed to power a header into the opposite corner of the net.
It was the former Dundee United player’s first goal for Saints on only his fourth appearance for the Perth men.
With five minutes to go to half-time, it was nearly 2-1 to Saints.
A sweeping move saw Swanson run up the right before sending over a great ball that was nodded just a few inches wide of the post by Wotherspoon.
That was one that got away but, much to their fans’ delight, they did get a second on 43 minutes.
Swanson sent another ball into the goalmouth – this time from the left. Under pressure from Wotherspoon, the ball struck Celtic’s Boyata’s head and spun into the net.
On 54 minutes, there was a strong claim for a penalty from the St Johnstone players  – turned down by ref Thomson –  when Swanson was tackled by Brown inside the box.
Perhaps a sign of Celtic concern, they brought on Dembele just before the hour for Mackay-Steven.
Concern or not, he scored within two minutes, converting a controversial penalty on 61 minutes.
Having just denied Saints a spotkick, ref Thomson was happier to say yes this time when Tierney’s cross hit Watson on the side of his body. The ball travelled up to strike his elbow but his arms were not in an unnatural position.
Dembele may have happily scored with his first touch but it was an injustice of an award and the home team had every right to be furious.
Saints then had to suffer as Dembele shot home for his second on 75 minutes; Sinclair fired home on 81 minutes with a terrific strike; and Dembele bagged his hat-trick with just five minutes left.
It was a sorry ending to the match for Saints after they had looked to be in such a strong position.
Attendance: 6,548.
St Johnstone: Clark, Scobbie, Davidson, Wotherspoon (Alston 70), Swanson (Craig 86), Shaughnessy, Paton, Foster (MacLean 78), Watson, Easton, Cummins. Subs not used: Mannus, Millar, Smith, Thomson.
Celtic: Gordon, Bitton, Sinclair, Brown, Mackay-Steven (Dembele 59), Lustig, Roberts (Ciftci 86), Sviatchenko, Boyata, Henderson (McGregor 71), Tierney. Subs not used: De Vries, Simunovic, Forrest.
Referee: Craig Thomson.