Ryan Tafazolli originally joined the Southampton Academy in 2005. He went on to captain the successful Under-18 youth team and also the reserve team. His first taste of first-team football came after he joined Conference Premier team Salisbury City on a one-month loan starting October 2009, but his professional debut against York City on 10 October 2009 was a disaster, as he was sent off in the second half. Nevertheless, Salisbury City won the match 1–0. Tafazolli later played five league games and one FA Cup fixture before returning to his parent club in December. After still not breaking into the squad at Southampton, he returned to Salisbury in 2011 for three months, playing three times in the FA Trophy. After being released by Southampton, Tafazolli went on trial with Eastleigh and Reading in an effort to win a contract with the club. However, Tafazolli's best efforts to win a contract with these clubs failed. He subsequently joined Isthmian League Premier Division side Concord Rangers, where he had a brief spell. In April 2012, Tafazolli joined Southern Premier League side Cambridge City on a short-term contract. He played six games for City, helping them reach the promotion playoffs.
Tafazolli signed for Conference club Mansfield Town on 20 August 2012. Tafazolli made his Mansfield Town debut on 15 September 2012, in a 2–0 win over Braintree Town. Despite an injured hamstring for most of the campaign, during which time he only picked up five league appearances, at the end of Mansfield's title-winning season he was offered a new contract with the club.
2013–14
At the start of the 2013–14 season, Tafazolli changed his shirt number from 32 to 12. Tafazolli started the season on the bench, making his first start in a 3–0 win over Northampton Town on 21 September 2013. Tafazolli soon suffered a knee injury that kept him out for a month. He made his return on 29 December 2013, when Mansfield Town won 2–1 against Cheltenham Town. From that point on, Tafazolli established himself and joined up with various partners in defence. His first goal for the club came on 8 March 2014 in a 2–1 win over Newport County and he scored another in a 3–0 win over Rochdale a week later. At the end of the 2013–14 season, Tafazolli won three awards; Fans' player of the season, Chairman and Directors' player of the season, and the Stags' Association player of the season despite only making 24 appearances. On 18 June 2014, Tafazolli accepted a new contract offered by the club.
2014–15
In the pre-season of the 2014–15 season, Mansfield turned down a bid from Scottish Professional Football League side Dundee United for Ryan Tafazolli. The club explained their decision on their website. Tafazolli scored his first goal for the club at the start of the season in a 2–1 win over Oxford United. Things went well until he injured a hamstring during a match against Accrington Stanley in early October, which Mansfield Town lost 1–0. This left him on the sidelines until 15 November 2014 in a 2–0 loss against Shrewsbury Town. Tafazolli was sent off after a second bookable offence in a 1–1 draw against Hartlepool United on 26 December 2014. After serving a one-match ban, Tafazolli suffered a virus that kept him out for weeks. He made his return to the first team in a 0–0 draw against Wycombe Wanderers on 24 January 2015. Tafazolli made 42 appearances and scored once in all competitions. At the end of the season, Tafazolli signed a contract with the club.
On 6 June 2016, Tafazolli signed a three-year deal at League One club Peterborough United. He scored his first goal for the club on 18 October 2016 in a 3–0 victory against Northampton Town. Tafazolli was named as Peterborough's best defender for the 2016–17 season in April 2017. In May he was also voted as Peterborough's best player of the 2016–17 season. He was released by Peterborough United at the end of the 2018–19 season.
Hull City
On 18 July 2019, Tafazolli signed a two-year deal with Hull City. Tafazolli made his first appearance for the club in the first match of the 2019–20 season in the 2–1 away defeat to Swansea City, when he came off the bench to replace Jordy de Wijs.
International career
Eligibility
Since Tafazolli has Iranian Citizenship through Jus sanguinis principles, he is eligible to play for Iran. Tafazolli was born in England and is a British citizen; he thus had the choice of either playing for Iran or England. When asked about his choice in a 2016 interview, he stated: