Verstappen beat McLaren’s Lando Norris and the Mercedes of Lewis Hamilton in the 66-lap race.
George Russell (Mercedes) led for a couple of laps at the start after a brave move around the outside of Verstappen and Norris, who ran wheel-to-wheel from the start on the long run to Turn 1.
But Verstappen passed Russell to take the lead as soon as DRS became available, while Norris opted to run long on the soft tyres that he started on, giving up his track position for a tyre delta advantage.
Norris had a great battle with Russell for second just after half distance and spent his final stint chasing Verstappen home.
2024 F1 Spanish Grand Prix results
2024 F1 Spanish Grand Prix report
Polesitter Norris led the charge to Turn 1 and although the faster-starting Verstappen had the inside line, after Norris squeezed him towards the grass away from the startline, a bold Russell swept around both to lead thanks to a powerful double slipstream from the cars in front.
Verstappen held second, with Norris falling from first to third. Hamilton ran fourth from the Ferraris of Charles Leclerc and Carlos Sainz, who were followed by Pierre Gasly (Alpine) and Oscar Piastri (McLaren).
Sainz passed Leclerc at Turn 1 for fifth after a brush of wheels that caused Sainz to use the run-off.
Verstappen used his DRS to get a great run on Russell at the start of lap three, and battled his way past around the outside of Turn 1 as Russell opted to go to the inside to defend.
Verstappen extended his lead to 4.5s over Russell ahead of the first round of pitstops, despite a moment at Turn 8 on lap 12.
Russell was the first of the top six to stop on lap 16, but suffered a slow right-rear change, and rejoined just ahead of Sainz. That released Norris to close slightly on Verstappen, whose response was to pit on lap 18, putting Norris back into the lead.
Hamilton passed Sainz for sixth with a tight move at Turn 1 on lap 19 and immediately set fastest lap. Verstappen lost time passing Piastri at Turn 7, who then pitted from fourth.
Norris ran even longer to lap 23, rejoining in sixth on fresh mediums. Leclerc led for a lap before making his first stop, which handed the lead back to Verstappen, who was 5s clear of Russell, Hamilton, Sainz and Norris.
Norris set fastest lap and passed Sainz for fourth on lap 27. Piastri, who was on a similar strategy, proved the McLaren could pass a Red Bull by DRS-ing past Sergio Perez for ninth.
Norris DRS-ed past Hamilton on lap 32, elevating him to third, while team-mate Piastri made similar progress and moved up to seventh by half distance.
Norris pulled a great move on Russell for second at Turn 3, but Russell regained his advantage around the outside of Turn 4, before Norris made the move stick at Turn 7. Russell pitted on lap 37 for hards.
Verstappen’s lead over Norris diminished from over 9s to 4.4s during this stint, as Hamilton was the next frontrunner to make his second and final stop, switching to softs.
Verstappen also opted for softs when he stopped on lap 45, putting Norris into the lead with 21 laps to go. Norris pitted for softs a couple of laps later, just rejoining ahead of Russell in second with an 8s gap to Verstappen.
Norris pushed hard from the start of his final stint, taking 2s out of him in three laps, forcing Verstappen to respond by raising his pace. The gap stabilised at 5s as the laps ticked down, and Norris was left to rue the track position he lost at the start after starting from pole.
Despite a final push by Norris, Verstappen won by 2.2s. Hamilton passed Russell for third on lap 52.
Leclerc (on softs) passed Sainz (on hards) for fifth with 11 laps remaining but Leclerc just fell short in his pursuit of Russell by 0.3s at the finish.
Piastri finished seventh ahead of a three-stopping Perez, who passed Gasly in the final stages, the latter doing well to recover from a slow first stop. Esteban Ocon’s Alpine rounded out the point scorers.