Max Verstappen will start third for Red Bull, while Nico Hulkenberg was knocked out in Q2 – as was Alex Albon for the second race in a row – on his F1 qualifying return in place of Sergio Perez at Racing Point.
Hamilton spun his Mercedes at the exit of Luffield on his first run on medium tyres in Q2, scattering gravel across the track, which caused the middle segment of qualifying to be suspended.
The world champion rejoined on the same medium rubber – which he, Bottas, Verstappen, Charles Leclerc and Lance Stroll will start the race on – but ended up behind his teammate as Q2 ended.
But Hamilton hit back immediately with a 1m24.616s on the first runs in Q3, with Bottas trailing by 0.150s and Verstappen over a second adrift in third.
Bottas then set an identical time on the final runs, but Hamilton had already moved a further 0.313s clear with a 1m24.303s to seal his seventh F1 pole at Silverstone.
Verstappen improved his personal best but stayed third, still over a second behind Hamilton.
Leclerc finished as the lead Ferrari in fourth, ahead of McLaren's Lando Norris and Lance Stroll, who did not improve on his final run in Q3.
Carlos Sainz took seventh ahead of Daniel Ricciardo and Esteban Ocon, with Sebastian Vettel rounding out the top 10.
Vettel will start on softs as he did not improve his best time in Q3 after switching to the more-durable mediums.
Leclerc, Stroll and Ricciardo are under investigation for a pitlane incident at the start of Q3 where the Ferrari was released into the path of the Racing Point, which braked hard and Ricciardo nipped by on the inside.
Pierre Gasly just missed out on a second consecutive Q3 appearance as he set an identical time to Stroll – a 1m26.501s – in the final seconds of Q3, but because the Racing Point's time came from his first run on the medium tyres before the red flag the AlphaTauri ended up 11th and out.
Albon took 12th as he was knocked out in Q2 for the second race in a row, which followed his FP2 crash and missing most of final practice to an electrical problem, which required Red Bull to fit a new energy store on his RB16.
He set a personal best time after switching from the mediums to softs for his final run but could not do enough to break into the top 10.
Nico Hulkenberg will start his F1 race return from 13th as like Albon he could not gain enough after switching from the mediums to the softs for his final Q2 run.
Daniil Kvyat finished 14th but will drop five places on the grid for taking a new gearbox, while George Russell again reached Q2 but faces a post-qualifying investigation (at 3.30pm local time) for failing to slow for yellow flags in Q1.
In Q1, Magnussen ended up 16th as he could not find a way to break into the 1m26 barrier, with Alfa Romeo pair Antonio Giovinazzi and Kimi Raikkonen lining up behind him on the grid.
Romain Grosjean ended up P19 in the second Haas, but he lost his best lap of Q1 (which was topped by Bottas), a 1m27.317s for a track limits infringement at Copse.
Nicholas Latifi finished last in Q1 after spinning his Williams on his final flying lap.
Russell came across the incident at the exit of Luffield shortly after Latifi had lost the rear of his FW43 as he accelerated away from the long-speed, slow right-hander and gone backwards into the gravel on the outside.
Russell said over his team radio that he "definitely backed off" and he was "well in control".