India, who dismissed England for 255 in the first innings, were 98 for three at stumps with Kohli (56) and Ajinkya Rahane (22) at the crease.
With the hosts having stretched their second innings lead to a formidable 298, it will be an uphill battle for England from here on.
It was off-spinner Ravichandran Ashwin's five-wicket haul that helped India bowl out England shortly before tea and gain a crucial 200-run lead.
England seamers came back roaring as Stuart Broad, who underwent a scan on his right foot after Friday's play, sent the Indian openers trudging back to the pavilion early in their second essay.
Murali Vijay (3) was caught at gully while Lokesh Rahul (10) was plucked behind as England successfully used the review system on both occasions after the on-field umpire had adjudged the batsmen not out.
Senior pacer James Anderson also swung into action to clean up first innings centurion Cheteshwar Pujara for one, reducing the hosts to 40 for three.
Kohli and Rahane then got together to put up an unbeaten 58-run stand and thwart the persistent bowling attack in the final hour of play.
Kohli, who led from the front with a sparkling 167 in the first innings, recorded his 13th Test half-century as he raised his bat to an applauding home crowd.
Rahane played the supporting role to perfection with his patient 54-ball knock.
England skipper Alastair Cook juggled with his seam and spin options but failed to make any more headway into the Indian batting.
Earlier Ben Stokes, who top-scored with 70, and Jonny Bairstow struck gritty half-centuries to revive England after they resumed on the overnight 103 for five.
Bairstow's knock was cut short just before lunch when Umesh Yadav castled the wicketkeeper-batsman for 53.
Bairstow's departure ended a 110-run sixth-wicket partnership between him and his overnight partner Stokes who carried on the good work into the post lunch session.
Ashwin finally trapped Stokes lbw and even though the batsman reviewed the decision, the on-field call was upheld by the third umpire.
Adil Rashid scored an unbeaten 32 as Broad also came out to bat with purpose even as English batting struggled to get close to India's 455.
Ashwin, who recorded his 22nd Test five-wicket haul, got Broad (13) and Anderson (0) off consecutive deliveries as the visitors fell one run short of avoiding the follow-on.
The tourists, who gave India a run for their money in the drawn Test in Rajkot, have struggled.
Original source: Kohli fifty puts India in the pound seats