Udoh was born in Lagos, Nigeria, then came to England with his family at the age of nine, and as a teenager joined the Luton Town development squad. He later moved on to the Stevenage Academy on a two-year scholarship. He was called up to the Nigeria under-17 squad, however Stevenage were concerned that he spent too much time on international duty and released him. He signed on non-contract terms alongside former teammate Harold Joseph with Kidderminster Harriers. Kidderminster loaned him out to Worcester City, Wingate & Finchley and Grays Athletic, but he became frustrated by a lack of match time. He was invited to a trial at Ilkeston by manager Gavin Strachan, and impressed in pre-season enough to earn a one-year contract in 2015. He remained a first team regular after Andy Watson replaced Strachan as manager in October, forming a successful partnership with Lee Ndlovu.
He was signed for an undisclosed fee by League One side Crewe Alexandra on 21 March 2016 after being spotted by head of recruitment Neil Baker. He made his first team debut seven days later, in a 1–0 defeat to Bradford City at Gresty Road, coming on as a 70th-minute substitute for Lauri Dalla Valle, and started the next game, at Port Vale, on 9 April 2016. He scored his first senior goal on his 20th birthday in a 3–0 win at Accrington Stanley in a Football League Trophy tie on 30 August 2016. In early 2017, Udoh spent a loan period at Solihull Moors. On 1 September 2017, Udoh signed for Northern Premier League team Halesowen Town on a two-month loan deal. The loan was extended by a further month in early November. He subsequently went on loan to Chester and to Leamington. Having played no first-team games for Crewe in the previous season, on 9 May 2018, Crewe manager David Artell announced Udoh would not be offered a new contract at the club.
On 31 May 2019, it was announced that Udoh had signed for local rivals Shrewsbury Town on a 2-year deal for an undisclosed fee. He made his league debut for the club on 20 August, coming on as a 79th-minute substitute and scoring an 89th-minute winner in a 2–3 away win at Accrington Stanley.