Sergio Perez slotted into third with the Mercedes drivers trailing in fourth and fifth after they were unable to improve on their final Q3 laps.
As was the case in last weekend’s Styrian GP, Verstappen set pole on his first run in the final part of qualifying – a 1m03.720s.
He led the pack for the final fliers but was down throughout the opening two sectors and despite setting a purple third sector Verstappen ended up fractionally down on his best time.
Norris had been second after the opening Q3 runs and held onto to take his best F1 career qualifying spot, just 0.048s down on Verstappen after recording the fastest time in the first sector on his final flying lap.
Perez jumped to third with his final lap, which bumped Hamilton and Bottas down, as neither Black Arrows driver went faster on their second attempts in Q3.
They were followed by AlphaTauri pair Pierre Gasly and Yuki Tsunoda, with Sebastian Vettel taking eighth but now faces a post-qualifying investigation for appearing to impede Fernando Alonso at the end of Q2.
George Russell took a sensational ninth for Williams in his first Q3 appearance for the team, which got a car through to the final part of qualifying for the first time since the 2018 Italian GP.
Russell only had one attempt in Q3, but managed to beat Lance Stroll to ninth place.
The Ferrari duo stayed on the medium tyres throughout Q2 but were knocked out by Russell’s final effort, as the Williams driver made it through to the final segment on the yellow-walled tyre along with the Red Bull and Mercedes drivers and Norris.
Carlos Sainz Jr led Charles Leclerc in 11th-12th, with Daniel Ricciardo unable to find enough time on his final run after switching from the mediums to the softs to avoid elimination in 13th.
Alonso ended up 14th after his final Q2 lap was spoiled by encountering Vettel going slowly on the racing line ahead of the last corner as the Alpine approached at high-speed.
Vettel appeared to step on the gas when Alonso came up behind him but the damage to the Spaniard’s lap was done as he had to lift off heading through the fast right-hander.
The drivers had been warned ahead of FP3 not to drive slowly between the final two corners via an update to race director Michael Masi’s event notes, with Vettel therefore likely to take a penalty over the incident, which infuriated Alonso, who gestured angrily at the Aston Martin driver after passing by on the pit straight, with Vettel – who was left without enough time to start a final flying lap in Q2 – waving back in apology as they went through Turn 1.
Antonio Giovinazzi could not replicate his strong FP3 form and finished 15th after progressing through from Q1.
In the opening segment, Russell’s last-gasp improvement to continue his 100% record of progressing to Q2 in 2021 knocked out Kimi Raikkonen, who set his personal best lap on his final lap but did not improve enough to go through.
Esteban Ocon had been at risk of elimination throughout the first phase of qualifying and while the Alpine driver did find time on his final Q1 run he was shuffled down the order as others improved at the end and the Alpine driver ended up 17th.
Nicholas Latifi took 18th for Williams, ahead of Haas pair Mick Schumacher and Nikita Mazepin.