Mercedes driver Lewis Hamilton kept Ferrari rival Sebastian Vettel at bay throughout the Belgian Grand Prix to record his fifth victory of the season and move to within seven points of the championship lead.
Hamilton led away from pole position and survived an initial attack from Vettel along the Kemmel straight on the first lap, before settling into a rhythm and edging clear.
His race was almost derailed by a late collision between the Force India drivers, which brought out the Safety Car, and gave Vettel another run in the tow.
But the Briton defended expertly once more to hold top spot, and he rebuilt a solid, albeit not fully comfortable lead over the remaining laps en route to a crucial win.
Vettel came home second, his title advantage cut in half, as Daniel Ricciardo rounded out the podium, with Red Bull team-mate Max Verstappen retiring early on, amid a loss of power.
As the lights went out at an overcast but dry Spa-Francorchamps, Hamilton made a clean getaway to maintain position, with no changes among the frontrunners.
Vettel got a run on Hamilton exiting the Eau Rouge/Raidillon section, and threatened with a look around the outside, but was not quite close enough to pull a move.
Hamilton gradually stretched out a lead over Vettel after this, as Valtteri Bottas held third position, from Kimi Räikkönen and the Red Bull pair Max Verstappen and Ricciardo.
Verstappen, though, only experienced a handful of laps in front of thousands of Dutch fans, as he lost power and suffered his sixth retirement of 2017.
Given he previous engine-related retirements this season, Verstappen shouted "I can't believe this" over the team radio, as he ground to a halt in front of a packed grass bank.
Up front, Hamilton and Vettel remained closely matched after swapping Ultra Softs for Softs in the pits, before the Force India drivers came together and littered debris over the track.
Esteban Ocon lost out to Sergio Pérez as they both made second stops for Super Softs, and tried to reclaim the place with an ambitious move exiting La Source, which resulted in contact.
Ocon lost part of his front wing, while Pérez suffered a puncture, before the pair banged wheels again at Eau Rouge, forcing the deployment of the Safety Car.
Although the frontrunners pitted without changes to the order, Hamilton's lead was wiped out, with Vettel handed another chance to potentially snatch the lead.
In addition, Mercedes had to put its drivers on Softs, as it did not have any fresh Ultra Softs, which both Ferrari drivers and Ricciardo took on again.
Vettel ran with Hamilton at the restart and duly got a run along the Kemmel straight, but Hamilton again positioned his car well, forcing Vettel to the outside, where he could not pass.
Hamilton edged away from Vettel as the laps ticked by and duly triumphed, 2.3 seconds up on Vettel, while Ricciardo took a sixth podium in eight races.
Bottas had held third until the restart, when Ricciardo and Räikkönen pounced, the latter recovering from a 10-second penalty for failing to slow sufficiently under yellow flags.
Nico Hülkenberg led the battle behind the top three teams, giving Renault another sixth-place finish, ahead of Haas' Romain Grosjean and Williams' Felipe Massa, who enjoyed a much stronger race day.
Ocon salvaged ninth for Force India, which retired Pérez's car with a couple of laps remaining, as Toro Rosso's Carlos Sainz Jr. completed the points.
Lance Stroll (Williams) and Daniil Kvyat (Toro Rosso) were unable to join their team-mates in the points, taking 11th and 12th, ahead of Jolyon Palmer, who started and finished in the midfield after a gearbox change.
McLaren-Honda endured another tough race, as a fast-starting Fernando Alonso retired after a spirited attempt to keep rivals at bay, and Stoffel Vandoorne took a lowly 14th.
Haas' Kevin Magnussen – who ran off track at high speed as the race restarted – and Sauber's Marcus Ericsson were the final drivers to take the chequered flag.
Pascal Wehrlein was the other driver to retire, pitting his car early on, amid technical trouble.