St Johnstone manager Tommy Wright promised it would be a “tough night” for Rangers in Perth and so it proved.
The Ibrox men took the lead on 23 minutes through Barrie McKay but the lead didn’t last long – five minutes to be precise – as Steven MacLean pulled the hosts level when he pounced on a stray passback.
Despite the visitors enjoying plenty of the ball they couldn’t shake off Saints, who fully deserved the point that sets them up nicely for the Hogmanay trip to Dundee.
St Johnstone made three changes to the side that got that valuable away win down at Kilmarnock last Friday night.
Back into the starting line-up came strike duo MacLean and Graham Cummins, while star turn Danny Swanson and Chris Kane sat on the bench.
There was also no Murray Davidson because of suspension and his place in the middle of the park was taken by Paul Paton.
The bad news for the visitors was that skipper Lee Wallace was out injured, while Martyn Waghorn and Lee Hodson also dropped out. Danny Wilson, Josh Windass and Kenny Miller came in to take their places.
There was a pyrotechnic contraption sending smoke billowing out of the away end as the teams prepared for kick-off but it had been dealt with by the time the game got under way.
A neat move from Rangers on seven minutes saw Windass ride a challenge or two, burst towards the edge of the box then pull his shot wide.
On 14 minutes, the Ibrox men swept forward once again and this time it took a strong right hand from Saints keeper Zander Clark to keep out a drive from Miller.
It was all about the Light Blues – playing in red and white – thus far and they were the width of the woodwork away from opening the scoring four minutes later when James Tavernier struck a combination of bar and post with a strike from 25 yards.
Miller had another go on 19 minutes but his shot was too high but it looked only a matter of time before they edged ahead.
Rangers’ goal duly arrived four minutes later and from a home perspective it was a terrible one to lose.
Joe Garner’s initial shot was blocked and should have been booted clear by Saints defender Joe Shaughnessy. However, he slipped and fell, leaving McKay free to shoot low past Clark.
Rob Kiernan, who had appeared to raise his hands at Steven Anderson, was lucky not to concede a penalty when he executed what looked very much like a rugby tackle on Shaughnessy inside the visitors’ box.
The Light Blues’ lead only lasted five minutes, with the hapless Kiernan gifting a passback to MacLean as he tried to find goalie Foderingham.
The St Johnstone frontman slid in and kept his composure to step around Foderingham and stroke the ball into the empty net.
David Wotherspoon tried his luck with a shot on 34 minutes, while at the other end Garner, Miller and Windass all had efforts for Rangers.
Saints made a change just before half-time when they brought on Tam Scobbie for the injured Blair Alston then Jason Holt headed wide for the visitors.
The first decent chance of the second period fell to Rangers on 56 minutes, with Windass trying to squeeze a shot in at the back post only for Saints’ Steven Anderson to get in the road.
Up at the other end, Cummins flicked a header just wide after Shaughnessy’s cross had picked him out.
Then came a stramash in front of the main stand that ended up with Richard Foster of Saints and Rangers’ Andy Halliday being shown yellow cards for brandishing their handbags.
Cummins tried again with a header for the Perth men but couldn’t find the target before they brought on Swanson with 12 minutes remaining.
Rangers, who also made their final substitution when they brought on former Saint Michael O’Halloran, pushed as hard as they could – the pick of the late efforts being one from sub Waghorn that flew just wide in stoppage-time.
However, Saints never looked in serious trouble in the closing stages and they can now look forward to Dens on Saturday and the final match of the year.
Attendance: 7,979.
St Johnstone: Clark, Foster, Easton, Anderson, Shaughnessy, Wotherspoon (Swanson 78), Alston (Scobbie 44), Millar (Craig 69), Paton, MacLean, Cummins. Subs not used: Mannus, Watson, Kane, Craig, Hunter.
Rangers: Foderingham, Tavernier, Hill (Hodson 66), Kiernan, Wilson, Garner (Waghorn 62), Miller (O’Halloran 81), McKay, Windass, Halliday, Holt. Subs not used: Gilks, Forrester, Crooks, Senderos.
Referee: Crawford Allan.