Manchester City missed their chance to go six points clear at the top of the Premier League as they were held by a resilient Crystal Palace at Selhurst Park.
City dominated proceedings, twice hitting the woodwork, while defender Aymeric Laporte failed to find the net with the goal at his mercy in the first half.
The result means Liverpool can cut City's lead to one point by beating Arsenal on Wednesday.
In front of a boisterous crowd, Palace frustrated their opponents although they created little themselves going forward.
A point keeps them 11th as they boosted their own hopes of a top-half finish.
A good night for fans of Palace - and Liverpool
Eight weeks ago, Manchester City's lead at the top of the Premier League was 13 points - although Liverpool, in third at the time, had two games in hand. After this draw in south London, the gap is now four points.
Liverpool have one game in hand over their rivals, with the pair still to play each other at Etihad Stadium in April.
Pep Guardiola's side were motivated from the off against Palace, with Joao Cancelo striking the post from range after 30 minutes and Laporte firing the rebound off target with the goal at his mercy.
Captain Kevin de Bruyne struck the base of the post midway through the second half, while Riyad Mahrez forced Palace keeper Vicente Guaita into a fine one-handed save on the follow-up.
And Bernardo Silva also failed to convert a fruitful opening late on, poking Jack Grealish's pass across goal narrowly wide on an off-night for City's forwards.
It was just the second time City have failed to score in the league this season - the first since they lost 2-0 to Palace in the reverse fixture in October.
The champions, who came in to this match having won 16 of their past 18 games, were made to rue their missed chances, and their players cut frustrated figures at the full-time whistle.
Eagles rise to the occasion
Palace are now unbeaten in their past five matches and go to within one point of 10th-placed Southampton as they continue to push for the top half.
Patrick Vieira's team were happy to sit back at Selhurst Park, and had a number of half-chances on the break, through Wilfried Zaha and Michael Olise in the first half and Conor Gallagher after the restart.
Coming into this fixture, the hosts had picked up only one point from a possible 12 across their four home league fixtures in 2022.
But they were encouraged by their loud support and rode their luck at times, holding on against a usually ruthless Manchester City side.
Both sides now turn their attention to the FA Cup quarter-finals next Sunday as Palace host Everton and City visit Southampton.
Player of the match
GallagherConor Gallagher
Crystal Palace
Squad number23Player nameGallagher
Squad number3Player nameMitchell
Squad number13Player nameGuaita
Squad number8Player nameKouyaté
Squad number6Player nameGuéhi
Squad number11Player nameZaha
Squad number22Player nameÉdouard
Squad number7Player nameOlise
Squad number9Player nameJ Ayew
Squad number16Player nameAndersen
Squad number14Player nameMateta
Squad number17Player nameClyne
Squad number15Player nameSchlupp
Line-ups
Crystal Palace
Formation 4-2-3-1
13Guaita
17Clyne16Andersen6Guéhi3Mitchell
8Kouyaté15Schlupp
7Olise23Gallagher11Zaha
14Mateta
13Guaita17Clyne16Andersen6Guéhi3Mitchell8KouyatéBooked at 44mins15Schlupp7OliseSubstituted forJ Ayewat 65'minutes23GallagherBooked at 83mins11Zaha14MatetaSubstituted forÉdouardat 65'minutesBooked at 90minsSubstitutes
1Butland2Ward5Tomkins9J Ayew10Eze19Matthews20Benteke22Édouard44RiedewaldMan City
Formation 4-3-3
31Ederson
2Walker5Stones14Laporte27Cancelo
17De Bruyne16Rodri20Bernardo Silva
26Mahrez47Foden10Grealish
31Ederson2Walker5Stones14Laporte27Cancelo17De Bruyne16Rodri20Bernardo Silva26Mahrez47Foden10GrealishBooked at 54minsSubstitutes
6Aké7Sterling8Gündogan9Gabriel Jesus11Zinchenko13Steffen25Fernandinho33Carson79MbeteReferee:Martin AtkinsonAttendance:25,309Live Text
Match ends, Crystal Palace 0, Manchester City 0.
Second Half ends, Crystal Palace 0, Manchester City 0.
Attempt missed. Conor Gallagher (Crystal Palace) right footed shot from the right side of the box is too high.
Attempt missed. Aymeric Laporte (Manchester City) header from the centre of the box misses to the right. Assisted by Kevin De Bruyne with a cross following a set piece situation.
Odsonne Édouard (Crystal Palace) is shown the yellow card for a bad foul.
Kyle Walker (Manchester City) wins a free kick on the right wing.
Foul by Odsonne Édouard (Crystal Palace).
Foul by Kevin De Bruyne (Manchester City).
Nathaniel Clyne (Crystal Palace) wins a free kick on the right wing.
Attempt saved. Wilfried Zaha (Crystal Palace) right footed shot from the left side of the box is saved in the centre of the goal. Assisted by Odsonne Édouard.
Conor Gallagher (Crystal Palace) is shown the yellow card for a bad foul.
João Cancelo (Manchester City) wins a free kick in the defensive half.
Foul by Conor Gallagher (Crystal Palace).
Attempt blocked. Odsonne Édouard (Crystal Palace) right footed shot from the centre of the box is blocked. Assisted by Cheikhou Kouyaté.
Foul by Rodri (Manchester City).
Wilfried Zaha (Crystal Palace) wins a free kick in the defensive half.
Corner, Manchester City. Conceded by Joachim Andersen.
Attempt blocked. Jack Grealish (Manchester City) left footed shot from the left side of the box is blocked. Assisted by Kevin De Bruyne.
Foul by João Cancelo (Manchester City).
Wilfried Zaha (Crystal Palace) wins a free kick in the defensive half.
Our coverage of your Premier League club is bigger and better than ever before - here's everything you need to know to make sure you never miss a moment