Bottas held a slender advantage over teammate Lewis Hamilton of just 0.004s after the first runs in Q1, with everyone using the hypersoft Pirellis.
But on the second run, Hamilton was forced to abort his lap after setting the fastest time in the opening sector thanks to running wide in the middle sector.
This gave Bottas a clear run to post a 1m31.387s lap to take pole by 0.145s.
Ferrari’s Sebastian Vettel was third, 0.556s slower than Bottas, and admitted over the radio that there was “one-and-a-half, two tenths, but not enough,” left in the car after making a small mistake.
Kimi Raikkonen had a difficult Q3, complaining on his first run that his set of tyres was not as good as the one used in the previous segment of qualifying, then failing to improve on is second run.
The top four will all start on ultrasoft Pirellis having used them to set their Q2 times, with the rest of the top six starting on hypersofts.
With Red Bull missing from Q3 thanks to penalties, Kevin Magnussen was best of the rest for Haas in fifth place, 1.794s off pole.
That put him comfortably ahead of the Racing Point Force India of Esteban Ocon, who shaded Sauber’s Charles Leclerc for sixth by just 0.006s.
Sergio Perez was eighth, with Romain Grosjean ninth ahead of Sauber’s Marcus Ericsson.
Q2 was rendered an irrelevance because only 10 cars run, inevitably meaning they all reached the final segment of qualifying.
The Red Bulls of Max Verstappen and Daniel Ricciardo sat out the session because they will drop to the back with engine penalties, as will Toro Rosso’s Pierre Gasly.
Renault pairing Carlos Sainz and Nico Hulkenberg also did not run because they are guaranteed to start 11th and 12th with a free tyre choice behind six midfield rivals who will all start on the hypersoft Pirellis.
All five of those who did not take to the track were classified in positions 11th to 15th based on their Q1 pace.
Toro Rosso driver Brendon Hartley was the fastest of those eliminated in Q1 in 16th place.
The New Zealander, who will drop to the back thanks to Honda engine component changes earlier in the weekend, was unable to improve on his second run after backing off for the yellow flag caused by Sergey Sirotkin spinning his Williams at Turn 9.
Fernando Alonso was 17th fastest, almost half-a-second slower than Hartley.
Alonso also has engine-related grid penalties but is not due to start on the back row thanks to his car, driven by Lando Norris, being the first on track in FP1 of the five cars carrying penalties.
Sirotkin’s first-run time was good enough for 18th ahead of the second McLaren of Stoffel Vandoorne, while Lance Stroll was slowest after also encountering yellow flags because of Sirotkin on his final lap.
|6||Esteban Ocon||Force India/Mercedes||1m33.413s||2.026s|
|8||Sergio Perez||Force India/Mercedes||1m33.563s||2.176s|
|17||Daniel Ricciardo||Red Bull/Renault||–||–|
|18||Pierre Gasly||Toro Rosso/Honda||–||–|
|19||Brendon Hartley||Toro Rosso/Honda||1m35.037s||3.650s|
|20||Max Verstappen||Red Bull/Renault||–||–|