Match ends, St. Johnstone 1, Rangers 2.
Manager Steven Gerrard hailed James Tavernier as the "best right-back in Scotland" after his "world class" goal gave Rangers a hard-fought Scottish Premiership win at St Johnstone.
The champions toiled in the first half, and fell behind to Michael O'Halloran's fine strike early in the second period as St Johnstone put in a typically resilient display.
But Kemar Roofe's penalty and Tavernier's sensational 25-yard effort moved Rangers top of the table.
"That's the reason why he's captain," Gerrard told Sky Sports. "Because of his quality, he can step up in big moments and he's got us three points rather than one today.
"There's obviously been a lot of noise around Nathan Patterson, who's a fantastic player and is eventually going to be Rangers' top right-back for a long time. But we have to remember we've got the best right-back in Scotland as well."
The win moves Rangers two points clear of Hibernian and Hearts, who face each other in the first Edinburgh derby of the season on Sunday.
St Johnstone, meanwhile, are still without a league win this season, though they were boosted before the match by news of manager Callum Davidson extending his contract to 2025.
After a stuttering start to the season, Old Firm victory against Celtic before the international break was the spark Rangers were looking for to ignite their campaign.
But a slow, error-strewn first half was a return to previously stilted displays, and it took going behind early in the second half to bring Gerrard's team to life.
St Johnstone - in their first game since losing key players Jason Kerr and Ali McCann on deadline day - were typically excellent without the ball, and O'Halloran provided the perfect sucker punch to match.
Hayden Muller's terrific pass from deep found the former Rangers forward and he controlled the ball and cut inside a flailing Filip Helander before firing past Jon McLaughlin.
The blow seemed to shake Rangers - without self-isolating centre-back Connor Goldson for the first time in 82 games - awake and Ryan Kent, who was again below his best to this point, dribbled into the box, and delayed his shot enough to entice Muller to catch his left leg.
Roofe was emphatic from the spot to level, and the furore after the ball hit the back of the net cranked up the intensity further.
St Johnstone captain Liam Craig tried to wrestle the ball from Roofe, Alfredo Morelos gave him a slight nudge, and then Shaun Rooney got involved in the melee as all four players were booked.
The Rangers fans behind either goal responded to that flurry of action, and their team showed the kind of intensity which had been sorely lacking in the first half.
Tavernier and Kent both flashed shots just over, and Roofe began causing problems for St Johnstone's back three, before the captain stepped up.
The right-back was missing for the win against Celtic due to Covid-19 isolation, and had failed to recapture his incredible form of last season.
But his intervention in Perth was magnificent, as he stepped on to Kent's pass and sent the ball looping over Zander Clark and into the corner to ultimately earn an important three points.
St Johnstone did not fold easily, though, and had efforts themselves, the best of them falling to new signing Ali Crawford, but Tavernier did enough to force him into side-footing over the bar from close range.
Man of the match - James Tavernier
What did we learn?
Like last season, Rangers found a way to win a tough match when not at their best. Until they scored, St Johnstone managed to frustrate their visitors but it was startling how the intensity of the entire match went up in the aftermath of Roofe's equaliser.
The fans roared, Kent came to the party, and Tavernier produced the type of match-winning contribution he delivered regularly last term.
The key for Rangers now is to start producing 90-minute performances, which have so far eluded them. But, while they iron out some creases in their play, finding a way to win is the key and they did that well.
The only negative was an injury to defender Filip Helander, with Gerrard saying afterwards the early signs "don't look good" for the Swede.
St Johnstone, meanwhile, were shorn of Liam Gordon and Murray Davidson, as well as having to cope with the departures of Kerr and McCann. What's key, though, is that whoever steps in, their 5-2-1-2 shape is honed perfectly.
They are incredibly hard to score against, and if they can add a bit more in the final third they will have a fine league campaign once more. Despite a winless start, there will be no panic with Davidson in charge.
What they said
St Johnstone manager Callum Davidson: "There are a lot of things there that were really pleasing. The big disappointment was when we went 1-0 up we went we started making basic mistakes and got out of our shape too easily and allowed Rangers to apply pressure."
Rangers manager Steven Gerrard: "We're champions for a reason. We've got good players but we also know how to win. We've had to go late and deep to find a way against Celtic, we've had to do the same today. That's what gets you there in the end."
Rangers begin their Europa League group stage campaign at home to Lyon on Thursday (20:00 BST), while St Johnstone are back in action at Aberdeen in the Premiership next Saturday (15:00).
- 19RooneyBooked at 59mins
- 16MullerBooked at 41minsSubstituted forVertainenat 83'minutes
- 26CraigBooked at 59mins
- 21CrawfordSubstituted forMayat 85'minutes
- 33McLaughlinBooked at 10mins
- 5HelanderSubstituted forSimpsonat 77'minutes
- 25RoofeBooked at 59mins
- 20MorelosBooked at 59minsSubstituted forSakalaat 79'minutes
- 14KentSubstituted forLundstramat 82'minutes
- William Collum
- Shots on Target
Second Half ends, St. Johnstone 1, Rangers 2.
Corner, St. Johnstone. Conceded by Calvin Bassey.
Offside, Rangers. John Lundstram tries a through ball, but Fashion Sakala is caught offside.
Kemar Roofe (Rangers) wins a free kick in the attacking half.
Foul by Jamie McCart (St. Johnstone).
Joe Aribo (Rangers) wins a free kick in the defensive half.
Foul by Eetu Vertainen (St. Johnstone).
Foul by Steven Davis (Rangers).
Christopher Kane (St. Johnstone) wins a free kick in the attacking half.
Foul by Fashion Sakala (Rangers).
Jamie McCart (St. Johnstone) wins a free kick in the defensive half.
Attempt missed. Eetu Vertainen (St. Johnstone) right footed shot from the left side of the box is close, but misses the top left corner following a set piece situation.
Foul by Calvin Bassey (Rangers).
Christopher Kane (St. Johnstone) wins a free kick on the right wing.
Substitution, St. Johnstone. Stevie May replaces Alister Crawford.
Substitution, St. Johnstone. Eetu Vertainen replaces Hayden Muller.
Substitution, Rangers. John Lundstram replaces Ryan Kent.
Offside, St. Johnstone. Alister Crawford tries a through ball, but Michael O'Halloran is caught offside.
Goal! St. Johnstone 1, Rangers 2. James Tavernier (Rangers) right footed shot from outside the box to the bottom left corner. Assisted by Ryan Kent.