A number of reasons - we probably won't know till a full analysis is done, but it appears to be:
- Low turnout. Partly because the result was "known", and a few % due to the new ID rules.
- People hated the Tories, so their vote was low. You get tipping points with FPTP, and once you get into the 20s, it's MUCH harder to win seats.
- Labour targeted Tory seats, which held down the Labour vote in seats they already held (they've been briefing for the last two yeas that this was the plan), but spread their vote more efficiently. After the last election there was talk that Labour would need a bigger swing than Blair got just to get a majority of 1. That's because in 2019 their vote was concentrated in places they were always going to win.
-Labour made sure they were 'acceptable' to centrist Tories, and Lib Dems. So the Tories were relaxed about switching, not voting, or voting for someone else, and Lib Dems were happy to vote tactically - making that targeting even more ruthless.
There is a huge amount more churn between elections than there used to be. So what seems obvious - Tories down, Reform up, can be a much more complex story. While many 2019 Tories went to Reform, those voters didn't 'belong' to the Tories, and may not have been Tories before 2019. As the polling shows, had Reform not stood, they'd have mostly gone elsewhere or not voted.