Jurgen Klopp’s side were rocked by Pablo Fornals’ early strike at Anfield as the West Ham midfielder punished a poor header from Joe Gomez in the 10th minute.
The Reds drew level in the 42nd minute when Mohamed Salah was fouled by Arthur Masuaku and the Egyptian stepped up to convert the penalty for his eighth goal of the season.
Liverpool thought they had claimed the lead with just over 10 minutes remaining when substitute Jota turned in a loose ball.
Jota had pounced after Lukasz Fabianski saved Sadio Mane’s shot but after a lengthy delay that saw referee Kevin Friend make use of the pitchside monitor, the goal was ruled out for a foul by the Senegal winger.
In the 85th minute, Jota ran onto Xherdan Shaqiri’s pass to score his fourth goal since joining from Wolves in September.
It was Liverpool’s fourth successive victory since influential defender Virgil van Dijk was sidelined for several months with a serious knee injury suffered against Everton.
Despite their defensive issues this term, Liverpool have opened up a three-point lead over second placed Everton, with their Merseyside rivals in action at Newcastle on Sunday.
“It’s not about shining, or flying, or whatever, it’s about hard work. That was absolutely necessary against this opponent,” Klopp said after Liverpool equalled their club record of 63 home league games unbeaten.
“We had a lot of good football, not 500 chances or whatever but enough. I want to see us dig in and we did that, and I’m so happy.”
While Liverpool were completing their win, government officials confirmed the Premier League could continue despite a new national lockdown that will last until at least December.
“The world is in a difficult place and we are happy to be allowed to play football,” Klopp said.
Title rivals City have yet to hit the free-scoring form of Pep Guardiola’s side at their best, as for the third consecutive league game they were held to a solitary goal.
But Kyle Walker’s long-range strike against his former club was good enough to earn a 1-0 win at goal-shy Sheffield United.
It was his first goal for a year in his 100th Premier League appearance for City.
A fourth win in five games in all competition edges City up to eighth, five points behind Liverpool.
And there was another boost for City after the game as Guardiola ruled out a return to Barcelona despite interest from presidential candidates at the Catalan giants to bring the club’s most successful ever coach back to the Camp Nou.
“I said many times, my period as a manager in Barcelona is over,” said Guardiola, whose contract at the Etihad expires at the end of the season.
“I am incredibly happy here, still I have the desire to do well and this is the most important thing.”
– Chelsea hit their stride –
Chelsea are also finding their form after a slow start to the season as Frank Lampard’s men ran out 3-0 winners at Burnley to stretch their unbeaten run to nine games.
Hakim Ziyech was handed his first Premier League start after scoring in a 4-0 Champions League win away to Krasnodar in midweek and the Moroccan’s shot wrong-footed Nick Pope to open the floodgates for the visitors on 26 minutes.
Kurt Zouma’s bullet header then doubled Chelsea’s advantage from Mason Mount’s corner just after the hour mark.
Timo Werner was due to be rested until an injury in the warm-up to Christian Pulisic forced the German international into Lampard’s line-up.
And Werner rounded off an excellent second-half performance from the Blues with a fine finish from Ziyech’s pass.
After much criticism of his side’s defending, Lampard will be equally delighted at a fourth straight clean sheet as Chelsea moved up to fourth place.