Williams began his career as a trainee at Blackburn Rovers in 1997 and had loan spells at Queens Park Rangers, Macclesfield Town, Huddersfield Town, Bristol Rovers and Gillingham in three seasons but made no appearances for Blackburn.
Hartlepool United
Williams joined Hartlepool United on a free transfer in June 2000 and started 131 league games in four seasons at Victoria Park, helping Hartlepool to the Division Three play-off semi-final in the 2000–01 and 2001–02 seasons, and to promotion in the 2002–03 season. He lost his place in the first-team to Jim Provett at the start of the 2003–04 season and had loan spells with Swansea City and Stockport County. At the end of the season, his contract was not renewed and he was released by Hartlepool.
Grimsby Town
Williams joined Grimsby Town where he was an ever-present in the 2004–05 season but rejected the offer of a new contract at the end of the season.
Carlisle United
Instead he joined Carlisle United. At the start of the 2005–06 season he was the first choice goalkeeper but lost his place to Keiren Westwood and joined Bury on a short loan spell in January 2006 before joining Wrexham on loan in March 2007 until the end of the 2006–07 season.
Wrexham
Williams joined Wrexham on a permanent basis in May 2007, signing a two-year contract, after impressing during his loan spell at the club when he kept five clean sheets in nine games. Following Wrexham's relegation to the Football Conference in May 2008, he was transfer listed by the club, but stayed with the side until the end of the season before being released.
Neath
On 1 June 2009, Williams signed for Welsh Premier league side Neath, making twenty appearances before being released at the end of the season.
Coaching career
On 24 June 2011, Williams was named as goalkeeping coach at Bury. He returned to the playing ranks in January 2012 when back up keeper Ritchie Branagan suffered an injury resulting in Williams being given a squad number. He joined Crawley Town as assistant manager, with Richie Barker in August 2012. In November 2013, Williams had his contract terminated at the club following the departure of manager Richie Barker. On 17 December 2013, Williams was appointed goalkeeper coach as well as assistant manager at Portsmouth, he was appointed by his old manager at Crawley, Richie Barker. On 27 March 2014, Williams was sacked by Portsmouth