Liverpool saw their lead at the top of the Premier League cut to four points after suffering their first defeat of the season against closest challengers Manchester City.
The Reds nearly took the lead when Sadio Mane's shot bounced off the post, before John Stones' clearance deflected off Ederson and forced the England defender into a desperate clearance, with goal line technology showing that the ball came within millimetres of crossing the line.
The enormity of the occasion seemed to have an effect on the players. Alisson looked nervous with a couple of misplaced passes, Dejan Lovren went in the book for a rash tackle, and even Vincent Kompany made a mistake and went flying in with a reckless challenge that merited a yellow card.
Sergio Aguero was the man who broke the deadlock with City's first clear-cut chance. He latched onto Aymeric Laporte's cross and lashed the ball into the top corner from a tight angle, keeping up his run of scoring in every Premier League home game against Liverpool.
City took a firm control of the match in the second half, but they couldn't add a second and were made to pay. Trent Alexander-Arnold's cross found Andy Robertson and his deft pass reached the head of Roberto Firmino, who couldn't miss with the goal gaping.
Just as Liverpool were thinking about going for the three points, City restored their advantage thanks to Leroy Sane. The Germany international fired the ball into the bottom corner of Alisson's goal, making this the first time Liverpool have conceded more than once in a Premier League game this season.
Aguero could have wrapped it up on the break but was foiled by Alisson as he attempted to take the ball round the goalkeeper. At the other end, Salah was denied an equaliser by a smart save from Ederson.
In five minutes of injury time, Liverpool finally showed the urgency which had been lacking from their performance, but their balls into the box were easily defended by City. The champions held on to swing the title race momentum in their favour with a deserved victory.
Key Talking Points
Manchester City needed a performance after their uncharacteristically indifferent form in December and they rose to the occasion. They didn't create much until Aguero's goal but they kept up constant pressure on Liverpool, cutting off supply lines to the Reds' front three.
City's recent slump in form was blamed on the absence of Fernandinho and the Brazilian proved his worth once again with an incredible performance. He broke up Liverpool's play and showed composure in his passing, helping City to win the decisive midfield battle.
In contrast to Liverpool's muffled attacking threat, City's forward trio enjoyed more attacking freedom than they might have expected, with Leroy Sane having a particularly excellent game. As for Sergio Aguero, there's nobody you'd rather have in front of goal.
There is still work to be done if City are to retain their title, but Liverpool showed tonight that nerves can get the better of them. If City keep up the pressure, the Reds might just crack under the strain.
Starting XI: Ederson (6), Danilo (7), Kompany (6), Stones (7), Laporte (7), Bernardo Silva (8), Fernandinho (9), David Silva (7), Sterling (7), Aguero (8), Sane (8).
Substitutes: Gundogan (6), Walker (N/A).
Fernandinho showed why he is irreplaceable with an absolute masterclass of a performance. With the help of the two Silvas, he blocked off everything Liverpool threw at him and launched attacks from deep. If Fernandinho stays fit, City win the title.
Nope. City needed a big performance and they got one. No worst player today.
Key Talking Points
Every title-winning season has at least one moment where the manager must prove that he is worthy to be called a champion. For Jurgen Klopp, that moment is now. The momentum of Liverpool's nine-match winning run is over, and building that momentum up again will be Klopp's greatest challenge of the campaign.
Klopp has often had the upper hand on Guardiola throughout their respective careers, but he lost the tactical battle on Thursday. The decision to choose Jordan Henderson in midfield backfired as he struggled against City's relentless pressing, and Georginio Wijnaldum - one of Liverpool's best players this season - met his match in Fernandinho.
Guardiola used Klopp's own tactics against him. Liverpool players were given no time on the ball and their attempts to build from the back often ended with giving the ball away and being forced to retreat once again. In the latter stages, when greater urgency was called for, they should have been more willing to go direct.
If you had asked a Liverpool fan at the start of December if they would take a four-point lead at the top after this match, they would have snapped your hand off. But...top at Christmas, only to slip up in at the beginning of 2019...it's an all too familiar feeling.
Starting XI: Alisson (6), Alexander-Arnold (6), Van Dijk (7), Lovren (4), Robertson (7), Wijnaldum (5), Henderson (5), Milner (6), Salah (6), Firmino (7), Mane (6).
Substitutes: Fabinho (6), Shaqiri (6), Sturridge (N/A).
The relentless Robertson didn't have his best game in a red shirt, but he kept running all night, won his defensive battle with Raheem Sterling and provided the assist for Firmino's equaliser.
2018 was a year of big improvement for Dejan Lovren, but this was an untimely reminder of the Croatian's limitations. He was walking a tightrope for most of the game after an early yellow card, he was caught on his heels for Aguero's goal, and he made several other mistakes which went unpunished. Hurry back, Joe Gomez.
The FA Cup provides some respite from league action as Manchester City host Rotherham on Sunday before Liverpool travel to Wolves on Monday.
Liverpool are next in Premier League action on 12 January when they face Brighton at the Amex Stadium, hoping to re-establish their seven point lead before City play Wolves two days later.