St Johnstone’s seven-match unbeaten run was brought to an end at the home of runaway league leaders Rangers.
The Glasgow side notched up their 13th straight home victory in the Premiership thanks to Ianis Hagi’s 52nd-minute strike earning a 1-0 success.
Saints held their own for much of the contest and will have felt things could have been different had Kemar Roofe been shown a red card for a horror tackle on Murray Davidson.
Chances in both halves for midfielder Craig Bryson also went begging with Allan McGregor pulling off good saves.
Saints boss Callum Davidson made four changes to the side that came from behind to win at Kilmarnock.
In came Stevie May, Craig Conway, Craig Bryson and there was a debut for James Brown, who joined on loan from Millwall at the start of January. Forwards Chris Kane and Guy Melamed dropped to the bench as did defender Shaun Rooney while David Wotherspoon missed out completely two days after signing a new two-year deal.
Steven Gerrard made two changes for Rangers as Kemar Roofe and Ianis Hagi came in for the suspended Alfredo Morelos and benched Glen Kamara. New signing Scott Wright had to settle for a place on the subs bench.
Saints made a positive start in a 5-2-3 formation that saw Ali McCann and Craig Conway support striker May from wide in attack.
After three minutes, May sclaffed an effort wide and they kept the home side quiet in the opening stages.
But they breathed a sigh of relief after 12 minutes as Rangers were inches from opening the scoring after Joe Aribo found Ryan Kent in the area only for the former Liverpool man to smash wide from 14 yards.
Five minutes later Saints tested Allan McGregor with May causing trouble for Filip Helander, allowing Craig Bryson to steal the ball in the area but his effort from an angle was saved by the goalie’s feet.
Shortly after Roofe was very lucky to stay on the pitch after a late tackle on Murray Davidson that caught the midfielder high on his shin. Referee David Munro, though, only produced a yellow card.
And the striker went close on the half-hour mark, smashing an Aribo cross well over from eight yards.
Seven minutes before the break, Rangers had another chance to break the deadlock with Connor Goldson this time passing up the opportunity from a James Tavernier free-kick.
The home side were creating chances but St Johnstone were holding their own and went in at the break level.
Rangers were on the attack quickly after the restart with Zander Clark in action twice in a minute.
First, Hagi turned in the area but didn’t get hold of his effort before Tavernier fired a dangerous ball across goal with the goalie beating the ball out.
On 52 minutes the league leaders did find a way past Clark as Hagi cut in from the right wing and fired a fine low shot from 25 yards into the bottom corner.
Steven Gerrard’s side had stepped up a level in the second half and Saints were finding it increasingly difficult to get any sort of possession.
But they had the chance to equalise on 71 minutes after taking advantage of some slack play from Tavernier.
First, McCann laid the ball back to Bryson 25 yards out and his fierce effort gave McGregor trouble.
Seconds later and those two went head to head once more, this time with Bryson inside the area and aiming for the far corner.
The veteran goalie, though, was equal to the effort with a smart save down low to his left.
St Johnstone had weathered the pressure early in the half and the additions of Rooney and Kane off the bench had brought renewed energy to their forward play.
However, they couldn’t force another chance as the league leaders held on for a 1-0 victory.
Rangers: McGregor, Tavernier, Helander, Goldson, Hagi (Kamara 81), Jack, Davis, Kent, Ayodele-Aribo, Roofe (Itten 66), Barisic.
Subs not used: McLaughlin, Bassey, Zungu, Patterson, Wright, Stewart, Balogun.
St Johnstone: Clark, Brown (Rooney 66), Kerr, Gordon, McCart, Tanser, Davidson (Craig 36), McCann, Conway (Melamed 81), Bryson, May (Kane 66).
Subs not used: Parish, Booth, O’Halloran, Gilmour.
Referee: David Munro