Hannah was born in Sheffield, South Yorkshire. After playing youth football with both Sheffield Wednesday and Sheffield United, Hannah spent his early senior career in non-League football, playing for Worksop Town, Stocksbridge Park Steels, Gainsborough Trinity, Belper Town, Hednesford Town, and Matlock Town.
Matlock Town
At Matlock, Hannah won the Northern Premier League Golden Boot award during the 2009–10 season, scoring 37 goals in all competitions. Hannah signed a new one-year contract with Matlock in May 2010. He won both the Evo-Stik League Golden Boot and the Non-League Golden Boot awards for the 2010–11 season, having scored 52 goals in all competitions, in a season which saw him beat Matlock's club goal-scoring record. Hannah won Matlock's Player of the Year award in all three seasons he spent with the club, and was also top scorer in all three seasons. Between 2009 and 2011, Hannah scored 90 goals for Matlock.
Bradford City
Hannah moved to Bradford City in May 2011, on a free transfer, two days before his 25th birthday. It was Hannah's first professional contract. Hannah made his debut for Bradford as an 84th-minute substitute for Chris Mitchell in a League Cup match against Leeds United. His first goal for the club came in the following match in a 1–1 draw against Oxford United. His third goal for Bradford came in a 3–1 win against AFC Wimbledon in the FA Cup, earning Bradford a place in the third round for the first time in seven years. He signed a one-year contract extension on 9 March 2012, exercising a clause in his original one-year contract, which was due to expire at the end of the season. Manager Phil Parkinson said that Hannah had "earned" the contract and that "there is more to come from Ross in the future". He joined Conference Premier club F.C. Halifax Town on loan in March 2012.
Grimsby Town
Hannah joined Conference Premier club Grimsby Town on 20 September 2012 on a three-month loan, and scored on his debut in a 4–1 victory against Luton Town. Hannah went on to score nine goals in 14 league appearances before his loan came to an end in December 2012. On 29 December 2012, Grimsby boss Rob Scott announced that Bradford were mulling over a bid from Grimsby to sign Hannah permanently. On 1 January 2013, Grimsby announced that a deal was close to being finalised but an injury crisis at Bradford had stalled the move with Hannah currently being used by Bradford. On 7 January 2013, Grimsby boss Rob Scott admitted that there was a sticking point on the financial side of the Ross Hannah deal, despite Grimsby and Bradford agreeing fees, as Hannah had stalled on personal terms. Hannah completed his move to Grimsby on 10 January 2013, signing a two-and-a-half-year contract for an undisclosed fee.
Later career
Following two seasons with Grimsby, Hannah signed for National League club Chester on a one-year contract. He signed for Chester's National League rivals Barrow on 16 May 2016 on a two-year contract. On 31 May 2017, Hannah re-signed for Chester on a two-year contract, turning down offers from Wrexham and F.C. Halifax Town in the process. He moved on loan to Southport in March 2018. Hannah completed a move back to Gainsborough Trinity on 10 July 2018. In March 2019 he began working as caretaker manager, alongside Liam King. Their appointment was made permanent at the end of the season. He stepped down in October 2019 after Curtis Woodhouse became manager; Hannah remained at the club as a player. On 4 February 2020, Hannah joined Cleethorpes Town on loan.