The Tories have held on to Boris Johnson’s former seat in a blow to Labour leader Sir Keir Starmer.
Labour had hoped to take Uxbridge and South Ruislip, which the former prime minister held with a majority of 7,210 in 2019, but Tory Steve Tuckwell managed to retain it for Rishi Sunak’s party.
The Conservative victory means that Mr Sunak has been spared the prospect of being the first prime minister since 1968 to lose three by-elections on the same day.
The failure to overturn the Tory majority in the seat was dubbed “Uloss” by a party insider in a sign of the unease at Mr Khan’s plan.
In public, senior Labour figures acknowledged Ulez had been a factor in the vote.
Shadow justice secretary Steve Reed told the PA news agency: “I think there’s been a number of issues at play, but there has certainly been a number of voters who have said to us that they are very concerned about Ulez.
“Everyone wants to see clean air. But for some people, I think, given the chaos that there is in the economy, because the Conservatives have crashed it and the cost-of-living crisis that they fuelled, that this is the wrong time to introduce a charge for Ulez.”
In his victory speech, new MP Mr Tuckwell said Mr Khan had cost Labour the seat.
“It was his damaging and costly Ulez policy that lost them this election,” he said.
“This wasn’t the campaign Labour expected and Keir Starmer and his mayor Sadiq Khan need to sit up and listen to the Uxbridge and South Ruislip residents.”