The Briton held off strong pressure from his Ferrari rival to prevail at Spa Francorchamps and pick up his fifth win of 2017.
Lewis Hamilton wins Belgian Grand Prix to cut Sebastian Vettel's lead to seven points in F1 drivers' championship
Lewis Hamilton held off Sebastian Vettel's Ferrari to win the Belgian Grand Prix and halve his deficit in the drivers' championship to his German title rival in the process.
The Mercedes-GP driver twice had to rebuff passing moves from Vettel as the Ferrari man was never more than three seconds behind the Briton throughout the 44-lap race at Spa-Francorchamps.
But Hamilton held his nerve, even when the field was bunched up with 14 laps to go following a safety car period as the two Force Indias of Sergio Perez and Esteban Ocon collided, to win by 2.3 seconds for the fifth time in 2017 and move to seven points of Vettel in the drivers' standings, having started the day 14 behind.
Daniel Ricciardo picked up his sixth podium of the season as he took third in his Red Bull Racing car, ahead of Ferrari's Kimi Raikkonen, who bounced back from receiving a 10-second penalty for ignoring yellow flags, and the second Mercedes of Valtteri Bottas.
There was disappointment, however, for Red Bull's Max Verstappen, who was supported by a huge crowd of Dutch supporters, as a mechanical failure stopped his car on track, giving him his sixth retirement in 12 races.
He had been running in fifth place, ahead of Ricciardo, at the time of the problem hitting.
Nico Hulkenberg's Renault was sixth, with Romain Grosjean in seventh in his Haas ahead of the Williams of Felipe Massa.
Ocon recovered to finish ninth with Carlos Sainz Jr completing the top 10 and the final points scoring position.
The F1 fraternity now head to the Italian Grand Prix at Monza next Sunday, with the race at 4pm UAE time.