Rangers extended their lead at the top of the league to three points as the visitors recorded their first victory at Celtic Park for nearly five years.
The Rangers victory owed much to a terrible blunder by Celtic keeper Rab Douglas as he allowed a speculative 25-yard effort from Gregory Vignal to bounce over his shoulder into the roof of the net with 19 minutes remaining.
This break inspired Rangers to add a second when Nacho Novo latched on to Fernando Ricksen's through ball before lobbing Douglas from the edge of the area.
Celtic still have a game in hand, but it certainly sets up the SPL title race for a thrilling run-in.
Parkhead officials however, will be concerned after Fernando Ricksen appeared to be struck by a coin when he took a corner late in the game in front of the Celtic crowd.
Rangers applied some early pressure, forcing three corners without threatening the Celtic goal. Gradually the home side came more into the game and Craig Bellamy on his home debut spurned a wonderful chance to open his account.
John Hartson dispossessed Sotirios Kyrgiakos before releasing Bellamy, but the striker's shot was blocked by Ronald Waterreus diving to his right.
This was the first in a series of fine saves by the Dutch keeper which kept his side in the game.
Waterrrerus again kept out a powerful Hartson volley with a close-range parry after Stilian Petrov had teed up the chance.
Rangers came more into the match before half-time with Alan Hutton shooting over, but it was Celtic who would be disappointed that they did not take one of their chances.
Rangers posed far more threat at the start of the second half and Dado Prso's shot was deflected for a corner.
Bobo Balde was booked for a bad tackle on Ricksen before Barry Ferguson's pass released Novo whose cut-back resulted in Vignal shooting wide.
A skillful run by Thomas Buffel ended with Prso stepping inside Neil Lennon before unleashing a powerful shot which Douglas did well to parry.
Marvin Andrews did well to beat Hartson to an Alan Thompson free-kick, heading clear under pressure from the Welshman.
Celtic had pushed Chris Sutton upfront and Waterreus again did well to parry a powerful shot from Hartson before Rangers took the lead.
Ferguson's header was nodded down by Ricksen to Vignal whose shot bounced in front of Douglas and off the keeper's shoulder into the roof of the net. Certainly the Celtic keeper appeared guilty of not getting his body behind the ball.
Rangers wrapped up the game with a second goal eight minutes from time. A long ball from Ricksen led to a race between Ulrik Laursen and Novo and as the Danish defender stumbled, Novo lobbed the ball over Douglas into the net.