Op clubniveau was Spahić actief voor de Russische club Krylja Sovetov Samara in de Premjer-Liga. In de loop van zijn carrière heeft hij ook gespeeld voor de Russische club Torpedo Moskou, Sjinnik Jaroslavl en Lokomotiv Moskou evenals voor het Kroatische NK Zagreb en het Franse Montpellier HSC. In 2011 werd hij gecontracteerd door het Spaanse Sevilla FC, dat hem in 2013 uitleende aan Anzji Machatsjkala. Na de verhuurperiode vertrok hij naar Bayer 04 Leverkusen in Duitsland. Daar werd zijn contract op 12 april 2015 per direct ontbonden, nadat hij een kopstoot had gegeven aan een steward.[1] Spahić bleef desondanks toch actief in de Bundesliga, want op 5 juli 2015 tekende hij een contract tot in eerste instantie medio 2016 bij Hamburger SV.[2] Hij speelde hier tot en met december 2016. De club ontbond in januari 2017 zijn contract omdat hij niet meer voorkwam in de plannen van trainer Markus Gisdol.
Spahić maakte zijn eerste doelpunt als international in een 2-2 gelijkspel met Japan op 28 februari 2006 in het Signal Iduna Park stadion in Dortmund, Duitsland. Hij maakte als aanvoerder deel uit van de ploeg die zich op dinsdag 15 oktober 2013 plaatste voor het WK voetbal 2014 in Brazilië. Bosnië en Herzegovina won die dag in het afsluitende WK-kwalificatiewedstrijd met 1-0 van gastland Litouwen in Kaunas, waardoor de selectie van voormalig bondscoach Safet Sušić zich voor het eerst in de geschiedenis kwalificeerde voor een WK-eindronde. De enige treffer in die wedstrijd kwam in de 68ste minuut op naam van aanvaller Vedad Ibišević van VfB Stuttgart.
Nadat de Bosniak met zijn land deelnam aan het WK 2014, stopte hij in augustus 2014 als international. Een maand later stelde hij zich op verzoek van voormalig bondscoach Safet Sušić toch weer beschikbaar. Op 28 mei 2018 speelde hij zijn laatste interland tegen Montenegro.