India lead by 298 runs with 7 wickets remaining at stumps on day 3.
Virat Kohli hit a belligerent fifty to consolidate India's position after Ravichandran Ashwin picked up another five-wicket haul to help bundle out England for 255 and give the hosts a first-innings lead of 200 in the second Test on Saturday.
After opting not to enforce the follow on, India lost three quick wickets but captain Kohli and Ajinkya Rahane combined in an unbroken stand of 58 to take the team to 98-3 at the end of the third day, an overall lead of 298.
The 28-year-old Kohli, who hit 167 in the first innings, hit six boundaries in his unbeaten 56 and looked in no trouble on a surface which has tested all other batsmen with the turn and variable bounce on offer.
Stuart Broad dismissed India openers Murali Vijay and Lokesh Rahul cheaply after overturning umpire Rod Tucker's not out decisions on both occasions.
James Anderson, England's most prolific wicket-taker, then got a ball to swing in late to breach first-innings centurion Cheteshwar Pujara's defence, reducing India to 40-3.
Off-spinner Ashwin is the world's top-ranked test bowler at the moment and his 22nd five-wicket haul in only his 41st test earlier helped bring an end to some stout resistance from the tourists.
"I haven't had a five-wicket haul against England. It was at the back of my mind but definitely not something I was worried about," Ashwin said.
"I knew it would come if I stuck to the basics and bowled the way I've been bowling over the last couple of years.
"It's very important to get a rhythm going and I got it today."
Ben Stokes and Bairstow had hit half-centuries and combined in a sixth-wicket stand of 110 to launch England's fightback.
Stokes, who survived a close call on Friday when a delivery from debutant off-spinner Jayant Yadav kissed but did not dislodge his bail, had another slice of luck when wicketkeeper Wriddhiman Saha missed a stumping chance off Ashwin with the batsman on 21.
Batting on 18, Bairstow also saw an edge off Umesh Yadav fly between the first and second slip.
The pair kept the hosts at bay before being separated 10 minutes before lunch when Umesh Yadav finally dismissed Bairstow for 53, the paceman's delivery hitting the batsman's pad before crashing onto the stumps.
Stokes fell for 70 to Ashwin, who had dismissed Joe Root and Ben Duckett on Friday, and the batsman was unable to overturn the umpire's leg before decision on review.
"Very few balls spin on this wicket so you've got to work hard to create the conditions where it might spin," Ashwin said.
"Got one to spin to Stokes this morning but beyond that there's not a lot of spin there."
Ashwin, who has won the man of the series awards in India's last four test series, wrapped up England's innings by dismissing Broad and Anderson lbw in consecutive deliveries.
"It isn't really special until you've seen the game off so I'm not counting the chickens," Ashwin added.
"I thought Virat batted beautifully ... and I think we find ourselves in a good position."