Match ends, Rangers 0, Celtic 2.
Celtic ended Rangers' 12-game unbeaten run and moved three points clear at the top of the Scottish Premiership with victory in a frantic Old Firm contest.
Neil Lennon's side had lost their past two derbies at Ibrox, but a makeshift defence thwarted Rangers' attempts to win for a third time in four meetings.
Odsonne Edouard netted his fifth goal in seven games against Rangers just after the half-hour, then Jonny Hayes rolled in after a stoppage-time counter-attack before Jordan Jones was sent off for a lunge on Moritz Bauer.
It was just a second defeat in 19 games for Steven Gerrard's side and the first time in six Old Firm games that the home side have failed to win.
For Celtic, it is a fifth consecutive league victory since their loss at Ibrox in May as they attempt to win a ninth title in a row.
- Celtic 'sent message' to detractors - Lennon
- 'I'm part of why we lost' - Gerrard
- What were the factors behind Celtic's win?
Meek Rangers bossed by composed Celtic
Rangers had won both of last season's Old Firm fixtures at Ibrox by pressing Celtic so high and so energetically that the champions buckled. But the opposite was true on this occasion as Lennon's side bossed the midfield battle and remained steadfast and composed in defence, nullifying the threat from their hosts.
In truth, there was little to commend the game until Edouard burst into life to open the scoring.
Connor Goldson was guilty of an awful pass forward, gifting possession to Michael Johnston, who still had plenty to do, driving towards the Rangers penalty area before slipping the ball to the Frenchman. He showed trademark composure to slide the ball under the advancing Rangers goalkeeper and send the 800 or so visiting fans into raptures.
The goal was the game's first effort on target but it took Rangers almost an hour to mount a meaningful response as half-time substitute Sheyi Ojo forced Fraser Forster to turn the ball around a post.
Rangers threw on Alfredo Morelos and Jones in an effort to rescue at least a point but it was Allan McGregor in the home goal who had to look lively to keep close-range efforts from Hatem Elhamed and Christopher Jullien out with his feet in quick succession.
The home side forced a series of corners but could not test Forster again - meekly slipping to a first defeat since the final day of last season.
If that result had been in any doubt, Hayes' late strike ended it. Edouard and Olivier Ntcham combined to release the substitute, who was denied at first by McGregor only to hammer in the rebound with the keeper grounded.
Rangers' misery was compounded by Jones' late red card for scything down debutant Bauer - a reckless, ill-disciplined act from the winger.
Until then referee Bobby Madden had showed great leniency, letting Callum McGregor and Ryan Jack off with bad challenges as well as a incidence of simulation from McGregor. Indeed, it took until 90th minute for the official to show a card. Scott Arfield and Hayes went into the book for late infringements, but controversy - like quality football - was largely absent.
Celtic, though, underlined their determination to make it nine in a row, comfortably seeing off their closest rivals.
Man of the match - Odsonne Edouard
He loves this fixture and his decisive strike - his fifth in seven Old Firm games - was a masterclass in cool finishing, having peeled off his marker to collect Johnston's pass.
He kept Goldson and Nikola Katic occupied throughout and had his say in the build-up to the second goal as well.
'Celtic deserved to win' - analysis
Former Celtic goalkeeper Pat Bonner on Sportsound
I thought Celtic handled the game very well. Rangers took the game to them, but Celtic defended very well. I thought Jullien was immense and even contributed to the second goal.
Former Rangers striker Billy Dodds on Sportsound
Celtic deserved to win. Rangers did everything they could. The effort was there, but their quality didn't show up at key times. You could see Scott Brown had a point to prove and he did that.
- 18KamaraSubstituted forOjoat 45'minutes
- 37ArfieldBooked at 90mins
- 9DefoeSubstituted forMorelosat 60'minutes
- 17AriboSubstituted forJonesat 70'minutesBooked at 90mins
- 6BittonSubstituted forBauerat 66'minutes
- 49ForrestSubstituted forNtchamat 66'minutes
- 19JohnstonSubstituted forHayesat 85'minutesBooked at 90mins
- Bobby Madden
- Shots on Target
Second Half ends, Rangers 0, Celtic 2.
Moritz Bauer (Celtic) wins a free kick on the right wing.
Jordan Jones (Rangers) is shown the red card.
Foul by Jordan Jones (Rangers).
Attempt missed. Alfredo Morelos (Rangers) right footed shot from the right side of the box is close, but misses to the right.
Goal! Rangers 0, Celtic 2. Jonny Hayes (Celtic) right footed shot from the centre of the box to the centre of the goal following a fast break.
Attempt saved. Jonny Hayes (Celtic) right footed shot from the centre of the box is saved in the centre of the goal.
Delay over. They are ready to continue.
Delay in match because of an injury Boli Bolingoli-Mbombo (Celtic).
Jonny Hayes (Celtic) is shown the yellow card.
Foul by Hatem Elhamed (Celtic).
Alfredo Morelos (Rangers) wins a free kick in the defensive half.
Olivier Ntcham (Celtic) wins a free kick in the attacking half.
Scott Arfield (Rangers) is shown the yellow card for a bad foul.
Foul by Scott Arfield (Rangers).
Corner, Celtic. Conceded by Connor Goldson.
Attempt missed. Connor Goldson (Rangers) header from the centre of the box is close, but misses the top left corner following a set piece situation.
Foul by Scott Brown (Celtic).
Steven Davis (Rangers) wins a free kick in the defensive half.