Fernando Alonso started from pit lane as Aston Martin made changes to his car following a nightmare Saturday for the Spaniard.
The top 10 started on mediums, with Perez, Guanyu and Sargeant picking the hards. Pierre Gasly and Fernando Alonso went for softs.
Verstappen and Norris got away very evenly but the Dutchman held the lead. The top 6 stayed in the same positions, with Hamilton and Hülkenberg jumping Tsunoda by turn 2. Perez also overtook Ricciardo as the RBs had a bad start.
Kevin Magnussen jumped both Saubers and Gasly. However, the Alpine came back later in the lap.
Ocon and Stroll went side-by-side in turn 7 but the Frenchman held on around the outside at turn 9.
Alonso pitted at the end of lap 7 for hards as Aston looked to get him in clean air. Albon, Gasly and Bottas all responded on the next lap and had stayed in front.
However, the Thai had to go slowly around the lap as Williams failed to attach the right front wheel properly. He was given a 10-second stop-go penalty later in the race for it.
Verstappen led Norris, Leclerc, Sainz, Piastri, Russell, Hamilton, Hülkenberg, Tsunoda and Perez on lap 10.
In the battle for P12, Lance Stroll managed to overtake Ocon into turn 2.
RB boxed Daniel Ricciardo at the end of lap 11 as they covered off Pierre Gasly, coming out in P16. Tsunoda came in on the following one as they tried to execute the undercut on Nico Hülkenberg.
The German pitted on the following lap but RB got the job done as Tsunoda did a perfect out lap to jump the Haas.
At turn 17 on lap 17, Sergio Perez went deep, locked up and took a trip into the gravel, losing 5 seconds and falling 15s behind Lewis Hamilton in the process.
Verstappen led Norris by 6s on lap 20, with Leclerc, Sainz, Piastri, Russell, Hamilton, Perez, Stroll and Ocon completing the top 10.
Russell came in at the end of lap 21 for the hards and rejoined behind Esteban Ocon in P10. However, he overtook the French driver at the start of the next tour.
From P2, Lando Norris pitted a lap later. Unfortunately for McLaren, Norris came out behind Perez. On much fresher hards, the Brit got the job done by using DRS to cruise by.
Max Verstappen got a black and white flag for track limits as the Dutchman pushed incredibly hard to gap Norris.
Piastri and Verstappen joined the pit stop gang, coming out in P8 and P4 respectively. The Australian immediately cleared Stroll and started pumping in fastest laps.
Leclerc came in at the end of lap 25 and rejoined the track behind Perez. However, he quickly cleared the Mexican at the beginning of lap 27. Piastri also got the job done into the second chicane to take P6.
After getting stuck behind Logan Sargeant for around 10 laps, Yuki Tsunoda made the move on the Williams around the outside into the first chicane, with Hülkenberg getting him into turn 6.
Running in 3rd, Lewis Hamilton ended up in the gravel at turn 12 as he made an unforced error by locking up.
Sainz and Hamilton eventually pitted just before the halfway point, coming out in P6 and P9. The Spaniard was undercut by Oscar Piastri.
As Sergio Perez struggled on his old hards, Sainz and Russell made light work of the Mexican and fell to P7. Hamilton overtook Stroll for P8 behind that battle pack.
Tsunoda continued to clear the cars who had not stopped, passing Guanyu into turn 2 with DRS for P11.
At the halfway point, Verstappen led Norris, Leclerc, Piastri, Sainz, Russell, Perez, Hamilton, Stroll and Magnussen. The Canadian and Danish drivers went long on their mediums and had not pitted.
After getting close on the previous lap, Lewis Hamilton easily cleared Sergio Perez for 7th at the beginning of lap 37.
Perez, Stroll and Magnussen all came in at the end of that one, coming out in P11, P13 and P17 respectively. Tsunoda, Hülkenberg and Ricciardo moved into the points positions.
The Red Bull driver quickly made progress on his fresh mediums as he passed Ricciardo, Hülkenberg and Tsunoda to take P8 by lap 43.
It was the same story for Lance Stroll on his much newer hard tyres. He overtook Bottas, Ricciardo, Hülkenberg and Tsunoda to work his way up to P9.
There was a scare for Charles Leclerc as he cut across the grass at turn 15 as the Ferrari driver was pushing hard to heap pressure on Lando Norris.
Like Perez and Stroll, Magnussen stopping later paid off for him. He passed the Saubers, Ocon and Ricciardo to move into 12th.
From P6, George Russell pitted with 11 laps to go to switch to mediums and fell behind Lewis Hamilton. Despite the Mexican setting fastest lap as the Brit pitted, Russell rejoined ahead.
As the stint went on, Lando Norris continued to pull Max Verstappen in, with the gap dropping to under 2s on lap 57 after the gap was 7s at one stage.
In spite of relentless pressure from the McLaren driver, Max Verstappen fended off Lando Norris to take his fifth victory of the 2024 season. Ferrari’s Charles Leclerc completed the podium positions with a very solid drive to P3.
Piastri, Sainz, Hamilton, Russell, Perez, Stroll and Tsunoda completed the points scorers.