Labour council seats in London and several heartland areas in England fell last night, with the far-right British National party making big gains in areas it targeted.

Results bore out defence secretary John Reid's prediction of a "very bad night for us", with Labour hurt by the revived popularity of the Conservatives under David Cameron and 10 days of dismal headlines over foreign prisoners, rebellious nurses and John Prescott's affair with his secretary.

"In the last fortnight we have seen a lot of good campaigning damaged pretty badly," Mr Reid said.

Labour lost control of Bolton, Derby, Stoke-on-Trent and Newcastle-under-Lyme. In Stoke, the defeated council leader, Mick Salih, said he would leave the Labour party because it had become "a Tory party in disguise".

Conservative and Liberal Democrat gains were solid, though seldom spectacular. The Lib Dems said the Tories were failing to make inroads in the north. The Conservatives yet again won no council seats in Newcastle, Liverpool - where Mr Cameron sent the whole shadow cabinet - or Manchester, where he had held a glitzy spring conference. That will disappoint the modernisers who believe Mr Cameron can reach the parts other leaders could not. The party remained without any seats in Oxford, either.

But the Conservatives achieved their ambition of winning control of Coventry - not to do so would have been a disaster - and took control of Bassetlaw in Nottinghamshire and Crawley in West Sussex, both for the first time. They also won Hastings in Kent. In Ipswich, the Conservatives became the largest party with 19 seats, but its gain of three seats was less dramatic than it would have hoped.

But the Conservatives were counterattacking by picking off seats from the Lib Dems in several boroughs in the south. They picked up five seats from the Lib Dems in David Cameron's home district of West Oxfordshire. The Tories also took six seats from the Lib Dems in Brentwood to strengthen their dominance there, and won two in Colchester.

Lord Razzall, the Lib Dem campaign chief, told Sky News the party was making up the ground it had lost during the messy coup against Charles Kennedy. "Our opinion poll ratings have gone back to more or less the level they were at the last general election ... we're back to three-party politics as usual." The party took St Albans and South Lakeland, both previously hung councils.

The BNP had made 15 gains by 2.30am, including three in Stoke-on-Trent, three in Sandwell, one in Solihull, and four in two wards in Barking and Dagenham.

Labour activists accused the employment minister, Margaret Hodge, MP for Barking, of generating hundreds of extra votes for the BNP with her "naive" public comments about the popularity of the far-right party. The Guardian has learned that angry members of the local Labour party have privately begun discussing the possibility of a move to try to deselect the Blairite minister.

They are furious about her comments last month claiming that eight out of 10 voters in her constituency were thinking of voting BNP. Party organisers say the comments were ill-judged and disastrously timed. "They were little more than an advertisement for the BNP," said one. "If I were Nick Griffin and I had a baby girl, I would be calling it Margaret."

Even before the result was known, a senior official publicly broke ranks to castigate the MP. Liam Smith, the Labour agent for Barking and Dagenham, said: "She has given the BNP the best PR they have had in years. They were in fact running quite a limited campaign but she said what she said and the BNP campaign took off.

"As someone who is a minister and comes from a local government background she should have known better. There have got to be questions asked and the people responsible must be held to account."

The divisions were exacerbated by comments from the BNP itself. Richard Barnbrook, one of the far-right candidates and the BNP's London spokesman, said: "If I had paid her a million pounds I couldn't have asked her to do more."

There were reports from polling stations of voters writing the letters BNP on ballot forms where no BNP candidate was listed. Some apparently screwed up their ballot papers in disgust.

Mr Smith said a key issue distorted and exploited by the BNP was housing. "Social housing is a huge issue across London and a huge issue here and we simply have to address it. There are huge social issues we have to deal with and housing is the main one. That is what the BNP are tapping into."

In Bristol, the Greens pipped Labour by seven votes in Southville ward to take their first seat on the city council. The Lib Dems picked up just one seat, a disappointment for them, and the council stayed under no overall control. Labour lost four seats.

The Greens also picked up one seat in Sheffield and one in Stroud. "We look set to do very well across the country," said the party's principal speaker, Caroline Lucas, predicting a handful of gains in Norwich alone. The Greens were aiming to increase their seats from 72 to three figures nationally.

In Oxford, Labour lost a seat to the Independent Working Class Association.