On lap 10 Hamilton set the fastest lap, with Red Bull telling its Dutch ace it believed the Mercedes driver was going for a two-stop approach.
The Aston Martin of Sebastian Vettel pitted on the very next lap, whilst Perez indicated his new set of mediums had pace by setting fastest lap himself.
Norris told his McLaren team he could find 3sec if he had clean air – the Brit was at that point mired in 13th.
Lance Stroll was close behind Russell, but the lack of overtaking spots meant the Canadian couldn’t find a way through.
Nicholas Latifi proved you could pass at Zandvoort on lap 15 though, the Williams sweeping round the outside of Mazepin at Turn 1 to valiantly claim 16th.
Perez behind might have been watching, for he passed the Haas at the chicane the next time round.
On lap 18 Bottas was then told by Mercedes “At this pace, we will not be interacting with the leaders” – a thinly veiled message to hurry up.
On the next lap Perez went round the outside of Latifi’s Williams in to the chicane, the Mexican methodically making his way through the field.
Perez then took Alfa stand-in Robert Kubica on lap 21, as Hamilton came in to put on a quarum of mediums, but a sticking right front meant a slow stop.
Verstappen came in next time round, also suffering an uncharacteristically slow pit visit from Red Bull, Hamilton closing the gap to 2sec.
The Silver Arrows driver set the fastest lap on lap 23 as he hunted down the orange army’s darling.
Yuki Tsunoda was Perez’s next victim, again the Mexican getting by at the chicane and now in 14th.
Gasly came in for new tyres on lap 25, emerging seventh. Hamilton now had the gap to Verstappen down to 1.5sec.
Mercedes decided to put its Finnish man on a one-stop, making the second car a convenient Bottas buffer to back the home hero towards the seven-time champion – the gap was 0.7sec by lap 29.
Russell emerged from his pits on the same lap, almost beating Giovinazzi out of his box in the fight for tenth.
Verstappen finally got past Bottas on the pit straight at the start of lap 30, Hamilton following through one corner later. The Dutchman proved he still had the legs though, extending his lead to 1.6sec by the time they came onto the pit straight again.
Russell then rounded Kubica on the outside of Turn One on lap 33, before Giovinazzi pitted again this time for hard tyres – elevating the Williams to 12th.
Norris was on a long run, and by lap 36 up to seventh.
Bottas was told to use his tyres up in an attempt to bring him into play, the Finn beginning to close the gap to the leaders – he was 22sec behind by lap 37.
Sebastian Vettel than span into Turn Five to bring out double-waved yellows in Sector One, losing Bottas 1.5sec who had to lock-up and take avoiding action.
Hamilton then pitted on lap 40, taking his second stop early to use his extra set of medium tyres over Verstappen.
Hamilton came out in lapped traffic though, so that when the Red Bull driver strapped on a set of hards on the following tour, it remained as you were in the running order.
The chasing Mercedes set a fastest lap of 1min 13.292sec, whilst Verstappen voiced his concern over the pace of the hard tyres.
Meanwhile, Belgian GP fastest-lap setter Mazepin was brought in to retire by his team on lap 44.
Ocon reported there was debris in one of his front brake ducts on lap 47, whilst McLaren told Ricciardo to let Norris, who had now pitted, into the final points-paying position.
Perez bailed out from his epic stint on lap 49, emerging just behind Russell, who scythed in front of him to defend 11th – however, Perez dived down the inside at the chicane to take the place as he beat a path to catch the McLarens.
The sole remaining Haas of Schumacher went into the gravel at the chicane, running a lonely race in eighteenth as Tsunoda retired on the same lap with a technical issue on lap 51.