Zukanović came through youth academy of his hometown club Željezničar. He made his professional debut in 2005. After leaving Željezničar, he had short spells with mostly lower-league teams like Austria Lustenau II, Velež, FC Sulzberg and Uerdingen. In January 2009, he joined Belgian side Dender. On 7 March, he scored his first professional goal against Genk. In July 2010, he went to Eupen. In June 2011, he was transferred to Kortrijk. In January 2013, he moved to Gent.
Chievo
On 20 June 2014, Zukanović was sent on a season-long loan to Italian team Chievo, with an option to make the transfer permanent. He made his official debut for the club on 24 September. On 26 October, he scored his first goal for Chievo in an away loss to Genoa. On 12 June 2015, Chievo exercised their buy option and signed Zukanović permanently.
Sampdoria
Just a month later, Zukanović was transferred to Sampdoria for a fee of €3 million plus Fabrizio Cacciatore. He made his competitive debut for the club in UEFA Europa League qualifier against Vojvodina on 30 July. A month later, he made his league debut against Napoli. On 25 October, Zukanović netted his first goal for Sampdoria.
Roma
On 29 January 2016, Zukanović completed his move to Roma, who paid €1.5 million for the initial loan, with buy option set at €2.5 million. He joined fellow Bosnian internationals Edin Džeko and Miralem Pjanić, who were at the time playing for Roman club. The following day, he debuted for Roma, providing an assist in a win over Frosinone. A month later, Roma effectuated their buy clause and signed Zukanović on a contract expiring in June 2019. On 8 March, he made his UEFA Champions League debut, in a loss to Real Madrid. In July 2016, Zukanović was loaned to Atalanta until the end of season.
Genoa
On 12 July 2017, Zukanović joined Genoa on loan, with an obligation to buy after certain conditions are met. He debuted in a home loss to Lazio on 17 September, and provided an assist for one of the goals. In June 2018, Genoa signed Zukanović on a three-year contract.
Al-Ahli
In August 2019, Zukanović signed a two-year contract with Saudi Arabian outfit Al-Ahli. He made his official debut for the team against Al-Adalah on 22 August.
SPAL
On 31 January 2020, Zukanović signed a contract with SPAL until the end of season, with an option to extend it for another year. Two days later, he debuted for the club in a loss to Lazio.
International career
In October 2012, Zukanović received his first senior call-up to Bosnia and Herzegovina, for 2014 FIFA World Cup qualifiers against Greece and Lithuania. He debuted in a home win over latter on 16 October. Zukanović was selected in Bosnia and Herzegovina's preliminary squad for the 2014 FIFA World Cup. He failed to join the team, which had a training camp in the United States, due to visa problems. However, Zukanović later blamed the Bosnian FA, which subsequently got him dropped from the squad. After the firing of Safet Sušić, Zukanović was re-selected by new coach Mehmed Baždarević in March 2015. He made his return in UEFA Euro 2016 qualifier against Andorra on 28 March.