Ben Stokes posted England's third century of the innings as the tourists racked up a teatime 537 all out on day two against India in Rajkot.

Moeen Ali (117) needed just a single to add his hundred to Joe Root's the previous day, and duly scampered it from the third ball of the morning.

Then Stokes (128), who shared a damaging sixth-wicket stand of 99 in just 21.1 overs with Jonny Bairstow, rode his luck to ensure England consolidated their strong position in this first Test of five.

It was only the second time England have had three individual hundreds in the same innings in Asia, the previous in Kanpur in 1961, and not since Cardiff in May 2011 against Sri Lanka have they managed the feat anywhere.

Stokes' previous three Test innings against India were all ducks, but it was a case of zero to hero at his fourth attempt as he reached three figures from 173 balls, having hit 12 fours and a six.

Moeen counted nine fours in his four-hour milestone, and in the next over from Umesh Yadav he added three more in four balls - twice helped by unimpressive work in the field.

He was to pay for a misjudgment against Mohammad Shami, though, getting his angles wrong and leaving one from round the wicket which knocked out off-stump.

After a fifth-wicket stand of 62 with Moeen, Stokes' new partner Bairstow soon announced his intent by hitting leg-spinner Amit Mishra straight for six.

Moeen Ali made his 100 in the morning session (AP)

There were two escapes in successive Yadav overs for Stokes, on 60 and 61, when wicketkeeper Wriddhiman Saha failed to hold diving chances - the second easier than the first - after the left-hander toe-ended attempted cuts at wide deliveries.

That took India's tally of missed catches in the innings to five - four of them off Yadav - but Saha did take his next chance when Bairstow went after another wide one from Shami to depart for a rapid 46, having struck five fours and two sixes.

Chris Woakes then fell in the first over after lunch for four, to a thin edge behind as Ravindra Jadeja (three for 86) found some turn, and Adil Rashid picked out mid-on off the slow left-armer having made five.

Stokes was fortunate that his mistimed slog-sweep at the same bowler swirled high between fielders in the leg-side ring, but it was then off Jadeja too that he made room to cut the boundary which brought up his fourth Test hundred.

Murali Vijay could not hold on at long-on off Mishra, without toppling over the boundary, as Stokes doubled his six tally on 110 and England ploughed on past 500 - the first visiting team to do so in India since their own 523 in Kolkata on their last successful visit in 2012.