The stage was characterised by numerous early breakaway attempts, all foiled by the peloton. With almost 50 kilometres gone, a 26-man group, including Spaniard Herrada, made the break which counted.
The main contenders for the overall lead all came in almost six minutes behind the winner. American Sepp Kuss retained the leader's red jersey.
The main bunch, controlled by the Soudal-Quickstep team near the end, were happy to allow the final breakaway group to extend the gap to over five minutes, with no threat to the overall leaders.
"Today can go in all directions but for us today we hope it's a breakaway stage so we can save something for tomorrow," last year's winner Remco Evenepoel said before the start.
After a mostly flat ride, the stage ended with a category-one climb for the final 6.5 kilometres. Before hitting the slope Julius Johansen twice attempted to get away but to no avail.
Paul Ourselin (TotalEnergies) then tried the same move but shortly into the final climb, Ganna set the pace and after passing Ourselin the leading group was down to nine riders.
Ganna had done all the hard work but his team-mate Thomas was unable to take advantage.
"I felt that I had no real gas at the end. Bit limited, but we gave everything and that’s what we had on the day," Thomas said.
"But the final climb was too steep. I couldn’t quite finish it off but we’ll keep trying," added the Welshman who had to be content with a fifth-place finish.
Jonathan Caicedo tried to break for home and held the lead with 300 metres to go, but was passed by Kron, Gregoire and Herrada who made the final telling break to snatch his third career stage win at La Vuelta.
The top five in the general classification all came in five minutes 50 seconds down on the stage winner. Kuss still holds a 26-second lead over Marc Soler, with Evenepoel in third place and Primoz Roglic in fourth.
Herrada's stage win sees the Cofidis rider take over as leader in the mountains classification, ahead of Eduardo Sepulveda and Evenepoel.
Thursday's stage 12 is a flat 151-kilometre ride from Olvega to Zaragoza.