By Tim Donovan
Political Editor, BBC London
For Sadiq Khan the worst fears did not materialise.
His record third mayoral victory came after the threat of a Tory surge in the suburbs simply evaporated. Mr Khan’s winning margin was 275,000 votes and his 44% share equalled what he achieved in 2016.
Yet there was bitterness in his victory speech, condemning the “non-stop negativity” of his Tory opponent. The campaign appears to have taken its toll.
In a contest criticised by some London media as lacklustre and without energy, Mr Khan’s safety-first strategy prevailed.
His promise of a “safer, fairer and greener” capital brought out his own supporters and also looks to have succeeded in persuading Green and Liberal Democrat voters to “lend” their support to him in the mayoralty while voting for their natural choices for the London Assembly.
This was evident in south-west London where the Lib Dems won their first ever constituency Assembly seat – but Mr Khan comfortably out-polled Ms Hall.
There was relief in the Labour camp after a campaign where it did not appear easy for Mr Khan to defend his record.
Official figures published a week from polling day showed knife crime offences in the capital up 20% in the last year. Over eight years the increase was greater still.
Then 48 hours before polling day, there was widespread shock and revulsion at the death of 14-year-old Daniel Anjorin – killed in a sword attack in Hainault.
Some thought it might have an impact on the election.
Among other pledges Mr Khan offered a fresh commitment to build 40,000 new council homes by the end of the decade – note, not the end of the next four-year mayoral term.
There was a big price tag attached to his central “retail” offer.
The government already funds free school lunches for the majority of primary school pupils but Mr Khan’s extension of this to seven-to-11-year-olds not currently entitled for the next four years will cost well over £1bn.
He also decided to freeze many transport fares this year, though with no guarantee beyond that. Voters apparently rejected his opponents’ attempts to present this as an irresponsible pre-election gimmick.
Mr Khan’s victory shows he successfully navigated the biggest controversy of his mayoralty so far – charging the motorists of polluting vehicles through the expanded Ultra Low Emission Zone (Ulez) to cover all of the London boroughs.
In the anti-Ulez heartland of Bexley and Bromley, Ms Hall’s attempt to gain ground were thwarted by nearly 10,000 votes won by Reform UK’s Howard Cox.
A year ago, the mayor published a book heralding his focus on the environment and cleaning up London’s air.
Attending last year’s UN climate conference in New York he claimed to be “educating” people and taking them with him on the journey to Net Zero carbon emissions by 2030.
It looked then as if tackling traffic congestion, air quality and climate change might form the centrepiece of a radical vision of a third term. That seemed clearly to be what he had hoped would be his legacy.
Then the brakes were applied after the dramatic loss of political capital he had experienced over the Ulez expansion.
That was something his own independent experts advised would not shift the dial in terms of improving air quality, and it enraged sections of outer London and led to Labour’s failure to win the Uxbridge and South Ruislip by-election last July.
That setback was not repeated when Londoners were asked to choose this time.
Environmental groups heralded Mr Khan’s win as a victory for clean air. However, he may now be hamstrung by the limited pledges he ended up making.
In his book he talked about pursuing a new system of road-user charging which would take into account the distance, time and emissions of journeys.
Under heavy fire from his Tory opponent, claiming he had secret plans for a “pay-per-mile” hit on the motorist, he rowed back sharply.
At tightly-controlled events on his campaign trail, he was joined by prominent members of the shadow cabinet including Rachel Reeves and Yvette Cooper.
Energy spokesman and former Labour leader Ed Miliband was deployed to attack the Tory candidate over climate change while embattled deputy leader Angela Rayner joined Sadiq Khan to launch his manifesto.
It cemented the idea of future partnership and support, but there was notably no pledge of extra money, pleas for which have been a recurring feature of Sadiq Khan’s mayoralty so far.
Central to Sadiq Khan’s campaign was a claim there was a “moment of maximum opportunity” where Londoners could soon have a Labour mayor and Labour government working in tandem.
The first stage has now happened.
Apparently relaxed about the polling signals and the weakness of his Conservative opponent, he ran a careful campaign.
Keen to avoid the slightest chance of encountering protest or hostility on the street, over the full six weeks Mr Khan had no spontaneous or unplanned interaction with members of the public witnessed by the media.
Towards the end there were signs of nervousness the safety-first strategy may have backfired by failing to energise Labour supporters.
There were further signs of edginess when with days to go he apologised to the Chief Rabbi for an interview – given to a US-based journalist – in which he claimed he was treated differently than Andy Burnham over their stance on a ceasefire because he was Muslim.
Mr Khan is very familiar with his Tory opponent Ms Hall having clashed regularly with the London Assembly member at City Hall over the past eight years.
That may have informed his decision to minimise face-to-face contact during the campaign. He would not say her name.
The pair debated three times in a broadcast studio and only once at a public hustings. Neither attended around a dozen other hustings, to the anger of some of the organisers.
For the first time there was no “second preference” vote for the mayor.
Mr Khan claimed the government had changed to make it easier to dislodge him, but it failed.
Listen to the best of BBC Radio London on Sounds and follow BBC London on Facebook, X and Instagram. Send your story ideas to hello.bbclondon@bbc.co.uk