Spaniard Jorge Lorenzo won the Aragon GP in his home country to narrow the gap on title rival and Yamaha team-mate Valentino Rossi to 14 points.
Lorenzo eased to victory after overtaking world champion and pole sitter Marc Marquez at the start.
Honda's Marquez crashed out on lap two as he chased the fellow Spaniard, while Rossi was third behind Dani Pedrosa.
In the Moto3 race, Britain's Danny Kent failed to finish but still holds a 55-points lead in the riders' standings.
Kent is hoping to be the first British champion in any class since Barry Sheene in 1977.
Lorenzo might have had a comfortable time in securing his sixth win of 2015 but the battle for second behind him made for an enthralling spectacle.
Rossi made his move with five laps to go, but each time he overtook Pedrosa his rival would immediately regain his position.
On the last lap, it appeared Rossi might have made a move that would count, but Pedrosa again came back to move second and, despite making a mistake, held on.
"I tried everything but Dani was able to overtake me in the next corner and come back," said Rossi.
Pedrosa added: "It was really hard to focus on keeping my lap times and closing the door. It was really hard in the last 10 laps.
"I tried to fight and stay in front. I lost a little grip and could feel his engine behind me. It was a good battle and it was nice to race to the end."
There are four races to go in the championship and reigning champion Marquez's hopes appear to be over as he is 79 points behind Rossi.
"I made a good start as usual," said Lorenzo.
"My strategy was to race at the maximum and it worked quite well as Marquez had to race at the maximum to catch me, but I never expected him to crash."
Rossi is aiming for his first title since 2009 and added: "I'm not happy as I needed those five extra points for second place."
Aragon MotoGP results:
1. Jorge Lorenzo (Spain) Yamaha 41 minutes 44.933 seconds
2. Dani Pedrosa (Spain) Honda 41:47.616
3. Valentino Rossi (Italy) Yamaha 41:47.706
4. Andrea Iannone (Italy) Ducati 41:52.791
5. Andrea Dovizioso (Italy) Ducati 42:09.255
6. Aleix Espargaro (Spain) Suzuki 42:09.762
7. Cal Crutchlow (Britain) Honda 42:10.300
8. Bradley Smith (Britain) Yamaha 42:10.436
9. Pol Espargaro (Spain) Yamaha 42:11.385
10. Yonny Hernandez (Colombia) Ducati 42:28.822
11. Maverick Vinales (Spain) Suzuki 42:29.188
12. Scott Redding (Britain) Honda 42:33.109
13. Alvaro Bautista (Spain) Aprilia 42:34.688
14. Eugene Laverty (Ireland) Honda 42:35.204
15. Nicky Hayden (U.S.) Honda 42:35.297
MotoGP Standings after race 14 of 18:
1. Valentino Rossi (Italy) Yamaha 263
2. Jorge Lorenzo (Spain) Yamaha 249
3. Marc Marquez (Spain) Honda 184
4. Andrea Iannone (Italy) Ducati 172
5. Bradley Smith (Britain) Yamaha 143
6. Andrea Dovizioso (Italy) Ducati 139
7. Dani Pedrosa (Spain) Honda 129
8. Danilo Petrucci (Italy) Ducati 93
9. Cal Crutchlow (Britain) Honda 88
10. Pol Espargaro (Spain) Yamaha 88
11. Aleix Espargaro (Spain) Suzuki 76
11. Maverick Vinales (Spain) Suzuki 74
13. Scott Redding (Britain) Honda 67
14. Yonny Hernandez (Colombia) Ducati 47
15. Loris Baz (France) Forward 28