Belkov, who rides for Katusha, won in a time of 4 hours, 31 minutes and 31 seconds, beating Carlos Betancur by 44 seconds following a long solo escape on the wet and hilly 170km ride from San Sepolcro to Florence. Jarlinson Pantano was third, 46 seconds behind Belkov.
The 28-year-old Belkov attacked 50km from the finish and maintained his advantage for his first Grand Tour stage victory.
Nibali finished 10th on the stage to retain the overall leader's pink jersey. Defending champion Ryder Hesjedal has dropped out of the top 10 and is now more than three minutes behind Nibali.
Results from the ninth stage of the Giro d'Italia, a 170km run from Sansepolcro to Florence:
Stage
1. Maxim Belkov (RUS/KAT) 4hr 31min 31sec, 2. Carlos Betancur (COL/ALM) at 44sec, 3. Jarlinson Pantano (COL/COL) 46, 4. Tobias Ludvingsson (SWE/ARG) 54, 5. Cadel Evans (AUS/BMC) 1:03, 6. Benat Intxausti (ESP/MOV) s.t., 7. Danilo Di Luca (ITA/VIN) s.t., 8. Mauro Santambrogio (ITA/VIN) s.t., 9. Damiano Caruso (ITA/CAN) s.t., 10. Vincenzo Nibali (ITA/AST) 1:03.
Selected: 24. Bradley Wiggins (GBR/SKY) s.t., 43. Ryder Hesjedal (CAN/GRM) 2:09
General classification
1. Vincenzo Nibali (ITA/ASt) 34hr 19min 31sec, 2. Cadel Evans (AUS/BMC) at 29sec, 3. Robert Gesink (NED/BLA) 1:15, 4. Bradley Wiggins (GBR/SKY) 1:16, 5. Michele Scarponi (ITA/LAM) 1:24, 6. Sergio Henao (COL/SKY) 2:11, 7. Mauro Santambrogio (ITA/FAR) 2:43, 8. Przemyslaw Niemiec (POL/LAM) 2:44, 9. Rigoberto Uran (COL/SKY) 2:49, 10. Tanel Kangert (EST/AST) 3:02
Selected:
11. Ryder Hesjedal (CAN/GRM) 3:11