Valtteri Bottas dominated the Austrian Grand Prix to take his second victory of the year ahead of Sebastian Vettel as Lewis Hamilton recovered to fourth.
Hamilton started eighth after a poor qualifying performance and a five-place grid penalty, and is 20 points behind Ferrari driver Vettel in the championship.
The Mercedes driver will be keen to start eating into Vettel's advantage at the British Grand Prix next weekend.
A largely soporific race came alive in the closing laps as Vettel closed on Bottas for the lead and Hamilton did the same to Red Bull's Daniel Ricciardo for the final podium place, but the Finn and the Australian both just hung on.
Best result Hamilton could hope for
From Hamilton's point of view, team-mate Bottas' accomplished victory at least limited the damage Vettel was able to wreak after a difficult weekend for the Briton.
The slow-burning race, perhaps the first of the year devoid of pretty much any excitement, meant the tension in the title fight never came into the equation.
This was the first race since Vettel deliberately drove into Hamilton in Azerbaijan.
But after a tense news conference on Thursday, in which the German apologised publicly and accepted Hamilton had done nothing wrong, and a minor kerfuffle over the Briton's refusal of an invitation to shake Vettel's hand for the cameras after qualifying - because he had already done so off-camera - the simmering battle between the two was fought in effectively separate dimensions.
Vettel knew he needed to take advantage of Hamilton's grid penalty by winning. Hamilton knew he had to carefully balance aggression and caution as he sought to recover from his lowly grid position.
In the context of the weekend, arguably Hamilton lost the least, dropping only a further six points to Vettel when it would have been considerably worse had the Ferrari driver won.
A controlled fightback
Hamilton made up one place at the start after a poor getaway by Red Bull's Max Verstappen, who was then taken out after Toro Rosso's Daniil Kvyat misjudged his braking and hit Fernando Alonso's McLaren, pushing it into the teenager's car.
The Briton then picked his way past Force India's Sergio Perez on lap six and Haas' Romain Grosjean on lap eight, before setting about closing on Ferrari's Kimi Raikkonen.
Hamilton was on the Finn's tail by lap 19, having closed a 4.5-second gap in 10 laps, but could not pass.
An earlier pit stop on lap 31 enabled him to jump ahead of the Ferrari, but it meant Hamilton, who was already struggling with blistering rear tyres, had to do the remaining 40 laps on a set of the softest ultra-soft tyres.
The hope was that he could attack Red Bull's Ricciardo in third place but that faded as Hamilton was soon complaining that the grip was going away, and Mercedes said they would look at options.
Another stop would have meant a fall down the field, so Hamilton had to soldier on and it was stalemate from there to the end.
He closed up on Ricciardo to within just over a second in the closing stages, setting a couple of fastest laps.
Hamilton tried around the outside of Turn Four on the penultimate lap, but the Australian fended him off.
Bottas' inch-perfect start
Bottas' only concern was an investigation for a potential jumped start after he made a flying getaway, with clear air between him and Vettel as they went up the hill to Turn One.
But his reaction time of 0.201 seconds was well within that acceptable range and the Finn drove away serenely at the front.
His lead over Vettel was eight seconds by the time the German stopped on lap 34. Bottas waited another seven laps, which meant his advantage was cut to 2.8 seconds when he returned to the track.
He came out behind Raikkonen, who had yet to stop, but was soon past and controlled the race to the end.
There was tension in the last three laps, with Vettel closing to within just 1.2 seconds as Bottas struggled with rear-tyre blisters but the Mercedes driver was always in control.
The win means Bottas is only 15 points behind Hamilton as the season approaches its halfway mark.
Ricciardo's third place was his fifth podium finish in a row.
Renault's Jolyon Palmer just missed out on the final point, finishing 0.5secs behind Williams driver Lance Stroll in 11th place.
Driver of the day
The British Grand Prix is next weekend. Hamilton has won the last three races at Silverstone and he really needs a fourth in a row to start clawing back Vettel's points lead. The Mercedes should be very strong around the fast sweeps there, and Hamilton needs to put together a good weekend - which he has not done too often this year.
What they said
Race winner Valtteri Bottas: "I had a bit of deja vu in the end from Russia. Vettel was catching up but the problem was I had a massive [tyre] blister.
"At the beginning, I could control the race but it was trickier towards the end.
"I'm really happy. It's only the second win in my career. I think that was the start of my life."
Championship leader Sebastian Vettel: "How would you feel if you were just shy of half a second behind the winner? It was very close.
"I was very happy in the second stint of the race. As soon as we put on the super-soft tyre, the car came alive. I think I needed one more lap because Bottas was really struggling to get up the hill."
Third-placed Daniel Ricciardo, who took his fifth consecutive podium finish: "It was a fun race. There were some decisive moments at the start and then it was about defending the last couple of laps.
"But I stuck to my breaking points and held off. Max Verstappen got the home podium last year and I was a bit envious, so it's nice to be up.
"The second last lap was the tightest and Hamilton got close but I was very pleased to see the chequered flag."