Rangers cruised to a comfortable Scottish Premiership victory at Livingston to continue Philippe Clement's unbeaten start as manager.
Cyriel Dessers put the visitors 1-0 up after James Tavernier's penalty miss, but the Rangers captain did score from the spot in the second half to put the game to bed.
It could have been more for Rangers, who had two goals disallowed in a game dominated by VAR, but the result was never in doubt against a Livingston side that created precious little.
Clement's side move within five points of leaders Celtic, who host Aberdeen later on Sunday, while David Martindale's men stay bottom on goal difference.
Keep up to date with LivingstonThe latest news and analysis from RangersClement made four changes to the side that beat Sparta Prague in the Europa League on Thursday, but it didn't seem to upset Rangers' rhythm or cohesion in West Lothian.
Connor Goldson tapped in after Shamal George failed to collect a Tavernier free-kick cleanly, but a VAR check saw the goal chalked off, with the offside Dessers judged to have affected the goalkeeper's line of sight.
Ross McCausland, making his first Rangers start, won his side a spot-kick after going down under the slightest of contacts from George. However, the usually reliable Tavernier put his penalty wide of the right-hand post.
Livingston may well have thought that justice had been served, but they found themselves behind less than three minutes later.
Tom Lawrence played Dessers in on goal with a delightful through ball and the Nigeria international's shot trundled slowly over the line having taken a nick off defender Sean Kelly.
The bright McCausland then thought he had his first Rangers goal after an excellent first-time finish found the top corner, but referee Steven McLean blew for a foul by Abdallah Sima in the build-up and the decision was upheld by VAR.
Livingston's only effort on target in the whole game came just before the break, as Cristian Montano's curling shot was easily held by Jack Butland.
The second half saw a drop-off in tempo with Rangers content to keep possession and bide their time, and after yet another VAR intervention they did double their lead.
Mikey Devlin handled as he looked to challenge for the ball in the air, and Tavernier dispatched the resulting penalty to atone for his earlier miss and wrap up all three points.
Player of the Match - Tom Lawrence
The Welsh attacking midfielder showed superb vision to set up the opening goal and created five chances, more than any other player.Clement and Rangers roll on as Livi woes continue - analysis
It's now four league wins from four for Clement as the Belgian manager continues to impress.
It would have been easy for his side to become frustrated in a game where they missed from the penalty spot and had two goals chalked off. Instead, they continued to play their football, picking Livingston apart and creating chances almost at will.
Clement spoke about wanting to get his whole squad up to speed before the hectic winter period, and there was a tick in the box for Lawrence who showed his creative qualities to set up the opening goal. Dessers getting on the scoresheet again can only help his confidence after a rough start to life in Glasgow.
For Livingston, games against Rangers won't define their season, but they were desperately poor.
Martindale spoke pre-match about needing to pose an attacking threat, but they only had nine touches in Rangers' box and registered just one shot on target. They have failed to score in their last four outings, have the second worst attacking record in the league and the joint-worst defensive record.
Martindale and Livingston have punched above their weight for so long, but something has to change quickly if they are to avoid a relegation battle this season.
What's next?
Livingston are away to St Mirren after the international break on 25 November (15:00), while Rangers are away to Aberdeen the following day (12:00).
Line-ups
Livingston
Formation 3-4-1-2
1George3MontañoBooked at 82minsSubstituted forBrandonat 83'minutes5Devlin24Kelly23de LucasSubstituted forParkesat 69'minutes22Shinnie20SangareSubstituted forHoltat 45'minutes29Penrice8Pittman19NoubleSubstituted forGuthrieat 78'minutes9AndersonSubstitutes
4Parkes10Kelly12Brandon14Welch-Hayes16Bradley18Holt25Lloyd-McGoldrick28Guthrie32HamiltonRangers
Formation 4-2-3-1
1Butland2Tavernier6Goldson27Balogun31Barisic8JackSubstituted forCifuentesat 89'minutes4Lundstram45McCauslandSubstituted forCantwellat 78'minutesBooked at 84mins11LawrenceSubstituted forLammersat 78'minutes19SimaSubstituted forYilmazat 89'minutes9DessersSubstituted forPereira da Silvaat 61'minutesSubstitutes
3Yilmaz13Cantwell14Lammers15Cifuentes21Sterling25Roofe26Davies28McCrorie99Pereira da SilvaLive Text
Match ends, Livingston 0, Rangers 2.
Second Half ends, Livingston 0, Rangers 2.
Attempt missed. Connor Goldson (Rangers) right footed shot from the centre of the box is high and wide to the right. Assisted by Danilo following a corner.
Corner, Rangers. Conceded by Shamal George.
Attempt saved. Danilo (Rangers) right footed shot from the centre of the box is saved in the bottom right corner. Assisted by José Cifuentes with a cross.
Attempt missed. Leon Balogun (Rangers) header from the centre of the box is high and wide to the right. Assisted by James Tavernier with a cross following a corner.
Corner, Rangers. Conceded by Michael Devlin.
Corner, Rangers. Conceded by Tom Parkes.
Ridvan Yilmaz (Rangers) wins a free kick in the attacking half.
Foul by Scott Pittman (Livingston).
Todd Cantwell (Rangers) wins a free kick on the right wing.
Foul by Bruce Anderson (Livingston).
Leon Balogun (Rangers) wins a free kick in the defensive half.
Foul by Kurtis Guthrie (Livingston).
Substitution, Rangers. José Cifuentes replaces Ryan Jack.
Substitution, Rangers. Ridvan Yilmaz replaces Abdallah Sima.
Attempt missed. Danilo (Rangers) right footed shot from outside the box is too high. Assisted by James Tavernier.
Connor Goldson (Rangers) wins a free kick in the defensive half.
Foul by Kurtis Guthrie (Livingston).
Foul by Borna Barisic (Rangers).
Player of the match
ParkesTom Parkes
with an average of 8.76
Livingston
Squad number4Player nameParkes
Squad number18Player nameHolt
Squad number28Player nameGuthrie
Squad number12Player nameBrandon
Squad number5Player nameDevlin
Squad number23Player namede Lucas
Squad number22Player nameShinnie
Squad number3Player nameCristian Montaño
Squad number20Player nameSangare
Squad number8Player namePittman
Squad number24Player nameKelly
Squad number19Player nameNouble
Squad number9Player nameAnderson
Squad number1Player nameGeorge
Squad number29Player namePenrice
Rangers
Squad number45Player nameMcCausland
Squad number27Player nameBalogun
Squad number8Player nameJack
Squad number31Player nameBarisic
Squad number4Player nameLundstram
Squad number11Player nameLawrence
Squad number6Player nameGoldson
Squad number1Player nameButland
Squad number19Player nameSima
Squad number9Player nameDessers
Squad number2Player nameTavernier
Squad number3Player nameYilmaz
Squad number13Player nameCantwell
Squad number99Player nameDanilo
Squad number14Player nameLammers
Squad number15Player nameCifuentes