
Alfredo Morelos scored his 100th Rangers goal as the Scottish Premiership champions roared back from behind to beat St Mirren in Paisley.
Steven Gerrard's side returned to the top of the table, but initially trailed after Connor Ronan's stunning strike gave St Mirren a shock lead.
Kemar Roofe levelled with a 42nd-minute penalty after Ianis Hagi was tripped.
And just moments later Morelos headed home to spark wild celebrations for the goal that would prove the winner.
The victory moves Rangers three points above Hearts, who dropped points on Saturday at home to Dundee.
St Mirren, who were targeting a place in the top six, remain seventh as their three-game winning streak came to a halt.
And there was a further blow with Republic of Ireland midfielder Jamie McGrath stretchered off late on.
Jim Goodwin had spoken pre-match about the confidence in the home side, but they now had to "show people what they are made of".
It took them just four minutes. Ronan stepped away from John Lundstram, freed up some space and let fly with an unstoppable 30-yard shot that swerved in the wind and nestled into the top corner.
And the Buddies' dominance continued as they knocked the ball around like a side comfortable at the top end of the table.
It took Rangers a quarter of an hour to get to their box and another 10 minutes before their first threat.
Connor Goldson sent two identical headers into the hands of goalkeeper Jak Alnwick and Hagi threatened twice with efforts that were deflected just past both posts.
St Mirren were hanging on, but just as half-time approached the champions stung them twice.
Hagi skipped past Alan Power who caught the winger just inside the box. Alnwick guessed the right way at the spot-kick, but Roofe's strike was hard and low enough to find the bottom right-hand corner.
Just over a minute later, with Saints still reeling, James Tavernier found breathing space down the right, swung a ball into the middle which defender Conor McCarthy missed and Morelos knocked into an empty net.
From being on top, St Mirren were all over the place. Rangers went looking for a third and Hagi had a shot tipped away by the goalkeeper.
Tavernier had an early second-half header saved and Morelos went close again,, but it was a quiet start from both compared to the high tempo the first 45 minutes had served up.
St Mirren then had McGrath taken off on a stretcher, leaving them to play the final 10 minutes with 10 men having used up their substitutes.
Borna Barisic's free-kick was deflected just past a post as Rangers held on, and the closest St Mirren came was a late header wide from a crowded penalty box in added time.
Man of the match - Ianis Hagi

What did we learn?
St Mirren began the game at a pace that Rangers couldn't match and, for 25 minutes, they were excellent. But they were undone by slackness at the back and ultimately a nightmare two-minute spell turned the game on its head.
Gerrard has been calling for a 90-minute performance from Rangers and his frustration was evident as they started sluggishly.
But while this season hasn't matched the standards they set last time, they showed they still have the quality to see them through tough fixtures.
What did they say?
St Mirren manager Jim Goodwin: "I thought we were the better team for 25-30 minutes and it was a brilliant goal for Connor Ronan.
"I'm extremely disappointed with the goals we've conceded. The penalty is a bit of a daft one and the second is really poor - it needs to be cut out at the near post."
Rangers manager Steven Gerrard (to Sky Sports): "Pleased with the result but it took us 25 minutes to get going.
"After a game in Europe, away from home, we've got to come out the blocks sharper than we did today. But, you've got to have trust and belief in your players they can turn it around."
What's next?
St Mirren travel to Motherwell in the Scottish Premiership on Wednesday (19:45 BST), while Rangers are at home to Aberdeen at the same time.
Player of the match
HagiIanis Hagi
St Mirren
Avg
- Squad number43Player nameRonanAverage rating
6.67
- Squad number4Player nameShaughnessyAverage rating
6.38
- Squad number7Player nameMcGrathAverage rating
6.28
- Squad number9Player nameBrophyAverage rating
6.14
- Squad number44Player nameMillarAverage rating
6.13
- Squad number1Player nameAlnwickAverage rating
6.08
- Squad number3Player nameTanserAverage rating
5.99
- Squad number5Player nameMcCarthyAverage rating
5.96
- Squad number16Player nameErhahonAverage rating
5.84
- Squad number6Player namePowerAverage rating
5.72
- Squad number8Player nameFlynnAverage rating
5.70
- Squad number10Player nameMainAverage rating
5.54
- Squad number2Player nameTaitAverage rating
5.53
- Squad number22Player nameFraserAverage rating
5.53
Rangers
Avg
- Squad number7Player nameHagiAverage rating
6.82
- Squad number25Player nameRoofeAverage rating
6.67
- Squad number16Player namePattersonAverage rating
6.58
- Squad number17Player nameAriboAverage rating
6.36
- Squad number20Player nameMorelosAverage rating
6.35
- Squad number26Player nameBalogunAverage rating
6.28
- Squad number10Player nameDavisAverage rating
6.11
- Squad number4Player nameLundstramAverage rating
6.09
- Squad number6Player nameGoldsonAverage rating
6.08
- Squad number2Player nameTavernierAverage rating
6.04
- Squad number33Player nameMcLaughlinAverage rating
6.02
- Squad number30Player nameSakalaAverage rating
5.86
- Squad number31Player nameBarisicAverage rating
5.83
- Squad number37Player nameArfieldAverage rating
5.83
Line-ups
St Mirren
Formation 3-4-2-1
- 1Alnwick
- 22FraserBooked at 90mins
- 5McCarthy
- 4Shaughnessy
- 44MillarSubstituted forMainat 76'minutes
- 6Power
- 16ErhahonSubstituted forFlynnat 45'minutes
- 3TanserSubstituted forTaitat 45'minutes
- 7McGrathSubstituted forat 89'minutes
- 43Ronan
- 9Brophy