Born in York, North Yorkshire, Woods turned down a scholarship from Leeds United to sign for Chelsea. Leeds United chairman Ken Bates accused Chelsea of tapping-up the sixteen-year-old as well as two other academy players. Eventually the two clubs later agreed an out-of-court settlement, with Chelsea paying £5 million in compensation for Woods and Tom Taiwo. After spending time in the reserves, Woods made his first-team debut for Chelsea at Stamford Bridge against Macclesfield Town in the third round of the FA Cup on 6 January 2007, making him the fourth-youngest player to ever play for Chelsea at 16 years and 275 days old. He came on as a substitute for Frank Lampard in the 79th minute. He made two appearances for Chelsea in the FA Cup, but did not play in the Premier League. Although his progress was interrupted by a series of injuries, he was ever-present in the reserves. Woods was released by Chelsea at the end of the 2010–11 season. On 1 November 2010, Woods joined Notts County on loan until January. He made his debut in the second round of the FA Cup, in County's 3–1 win over AFC Bournemouth.
Yeovil Town
Woods went on a trial spell with Aberdeen in July 2011. On 23 February 2012, following a short trial period Woods signed for Yeovil Town on non-contract terms, with Gary Johnson stating that he was very impressed with his attitude. On 29 February 2012, Woods played his first match in Yeovil's Somerset Premier Cup defeat by Clevedon and his performance was impressed by Johnson as Woods looks to win a first-team place. On 24 March 2012, Woods made his debut for Yeovil Town after coming on a 74th minutes for Dominic Blizzard in a 1–0 loss against Hartlepool United on 24 March 2012. After a handful of encouraging substitute appearances, including scoring his first professional goal in a 3–1 win over Rochdale on 7 April 2012, he forced his way into the Yeovil starting XI but was sent off in only his second start against Stevenage. Despite initially impressing Gary Johnson his contract was not renewed at the end of the season.
On 5 October 2012, Woods joined Doncaster Rovers of League One on non-contract terms and was given number eleven shirt. Woods made his debut on 17 November 2012 against Portsmouth, winning the game 1–0. After making one appearance, it announced on 27 December 2012 that Woods would not have his contract renewed.
Following his release from Doncaster, Woods joined Conference North side Harrogate Town on 2 February 2013 on a free transfer. He scored on his debut in Harrogate Town's 2–1 loss against Brackley Town. Woods had an impressive spell at Harrogate Town, making 35 appearance and scoring nine times.
Hartlepool United
After a spell in non-league football, Woods signed for Hartlepool United on 8 August 2014 following a successful trial. He stated that joining Hartlepool United gave him a second chance in professional football. Woods made his Hartlepool United debut, where he made his first start before being substituted in the second half. He scored his first goal for the club, where he "acrobatically volleyed the ball", as Hartlepool United beat Exeter City 2–1 on 11 October 2014.
Second spell at Harrogate
On 19 November 2018, Woods rejoined Harrogate Town.
Dover Athletic
On 31 May 2019, Woods agreed to sign for Dover Athletic on a two-year deal from 1 July 2019.