The 70th-minute shot was Liverpool's first on target but was enough to settle matters.
"These games, they are not all beauties and you have to work hard for the results," Liverpool manager Jurgen Klopp said. "They threw everything at us, they worked incredibly hard, they were a real threat. I am fine with the game, not overly happy, but it happens. We didn't play our best football but there we are."
Liverpool's win put the pressure on City as they visited Goodison Park in the day's late match.
The champions took a first-half lead through Gabriel Jesus, only for Dominic Calvert-Lewin to equalise before the break. But Riyad Mahrez re-established the lead with a 71st-minute free kick and Raheem Sterling's late goal clinched victory.
"We deserved the win," Mahrez said. "We could've killed the game in the first half, we had four or five chances. We managed the game well, and soon enough, we scored two goals and won the game."
Ten-man Tottenham Hotspur beat Southampton 2-1 to move into the Champions League places.
Tanguy Ndombele gave Spurs a first-half lead before Serge Aurier was sent off after half an hour.
A blunder by keeper Hugo Lloris allowed Danny Ings to level but Harry Kane scored two minutes before the break. The hosts then doggedly dug in to see out the match.
Frank Lampard finally tasted victory as a manager at Stamford Bridge in the league as Chelsea beat Brighton 2-0 with goals from Jorginho and Willian. It was the Blues' ninth win in nine league games against the Seagulls, an English record for most games won against a single opponent without a loss.
Matt Doherty's goal and Daryl Janmaat's own goal gave Wolves their first win and kept Watford bottom of the table on two points.
Luka Milivojevic and Andros Townsend gave Crystal Palace a 2-0 win over Norwich City and Aaron Creswell's late goal earned West Ham a 2-2 draw at Bournemouth.