Elfsborg Larsson played for
Kinna IF until 2005 when he left the club for
IF Elfsborg. He played for the youth teams and also won the Swedish Championship for juniors. He made his first team debut on 15 March 2010 in Elfsborg's 0–0 draw away against
Gefle IF. He scored two goals in the next game at home to
Halmstads BK. During the
2013 Allsvenskan season, Larsson made all appearances. On 27 February 2014, he extended his contract with Elfsborg until 2016.
Brøndby On 2 February 2015, Larsson transferred to Danish club
Brøndby IF on a four-year contract. He was given the shirt number 13. He permanently replaced the retiring
Thomas Kahlenberg as
club captain in the summer of 2017, after having captained the team for most of the
2016–17 season due to an injury to the latter. On 10 May 2018, he captained Brøndby as they beat
Silkeborg IF 3–1 in the
2017–18 Danish Cup final.
Guingamp On 23 December 2018, Larsson signed as a free agent for
Ligue 1 side
En Avant de Guingamp. His stay in France was not successful, playing only 1 league match and making 3 cup appearances for the Guingamp, as they ended the
2018–19 season in relegation to the
Ligue 2. After relegation became a fact, Larsson was released from his contract by mutual consent on 24 June 2019.
Return to Brøndby On 27 August 2019, Larsson signed a six-month contract with his former club Brøndby IF. He also stated that he did not regret his decision to join Guingamp half a year before. On 1 September, Larsson made his official comeback in 1–0 loss against
FC Midtjylland. Despite the loss, he was praised for his promising return. His contract expired at the end of the year and was not extended. He made 10 appearances during his second stint in Brøndby.
Return to Elfsborg On 26 February 2020, Larsson signed a two-year contract with IF Elfsborg, a little more than five years after leaving the club for the first time. On 14 June, he made his first appearance upon returning to
Borås in a 0–1 away win over
IFK Göteborg, where he played the entire match at right back. He scored his first goal in a home game against
Falkenbergs FF on 13 August, as Elfsborg won 4–2. ==International career==