Williams began his career at
Eastleigh before joining
Winchester City in 2008. However, in November 2008 Williams returned to Eastleigh on loan before signing a new contract in February 2009. In October 2009, Eastleigh received a club record transfer fee from
AFC Totton where he then played for one season before returning to Eastleigh for a third time after a successful one-month-long loan. Williams joined
Championship team
Reading on 18 January on an 18-month contract after a successful trial period which included scoring for the reserves. Reading paid
£50,000 to sign Williams. Other clubs that were rumoured to be interested in signing Williams were
Southampton,
Brighton & Hove Albion and
Wycombe Wanderers. Since then he has gone on to score again and provide an assist in a reserve match against
Crystal Palace. Despite never being named in a squad to face opposition, Williams has travelled with the first team squad including to
Bramall Lane when they played
Sheffield United and could be seen warming up on the field before kick off with teammate
Simon Church. On 22 February 2011, Williams was named on the bench to face
Millwall at the Madejski for the first time. For the 2011–12 season, Williams joined firstly
Rotherham United on loan until January, and then
Northampton Town. He scored his first professional goal for Rotherham in the 2–1 loss to
Crawley Town. In July 2012, Williams joined
St Johnstone on a week's trial with a view to a loan move, though ultimately the club did not follow up their interest. On 7 August he joined
Conference National side
Woking on a season long loan and scored his first goal for the club on 28 August in a 4–1 home defeat to
Braintree Town. He had to wait nearly three months for his second goal, scoring in a 2–1 home defeat to
Alfreton Town on 17 November. Williams returned to Reading at the end of the season having scored four goals in 31 appearances in all competitions. He was released by Reading on 24 May 2013 having never made a first team appearance in his two-and-a-half years with the club. On 8 August, two days before the start of the 2013–14
Conference Premier season, Williams joined
Aldershot Town having trialled with the team during pre-season. Williams was the third highest goalscorer in the Conference Premier in the 2013–14 season with 24 goals, and he remained with Aldershot for the
2014–15 season. On 12 June 2015, Williams joined League Two side
Stevenage. In November 2015, he dropped back down into the
National League, signing for
Forest Green Rovers on a one-month loan. He made his debut as a substitute in a 2–0 home win over
Altrincham on 28 November 2015. He returned to Stevenage at the end of his loan spell, but on 15 January 2016 re-joined Forest Green permanently after Stevenage had agreed to mutually terminate his contract. He went on to appear in the
2015–16 National League play-offs for Forest Green and scored the winning goal in a play-off semi-final first leg away win at
Dover Athletic. He started the
play-off final on 15 May 2016 against
Grimsby Town at
Wembley Stadium but ended up on the losing side. The next day on 16 May 2016 it was confirmed that he had been released. On 4 June 2016 Williams joined National League side
Torquay United after agreeing terms with the club. After a season in which Williams' goals proved vital in saving United from relegation, he left the club and joined National League rivals
Bromley. After spending half of the 2017–18 season at
Bromley, Williams re-signed for
Torquay United on 26 January 2018. In June 2019, Williams joined
Weymouth. In May 2020, he joined
Southern Football League Division One South side
AFC Totton and subsequently joined divisional rivals
Lymington Town on a one-month loan deal in January 2022. In May 2022, Williams was forced to play as an emergency goalkeeper for
AFC Totton due to injuries in the squad. He kept a clean sheet in a 3–0 win over
Folland Sports to win the Southampton Senior Cup at
St Mary's Stadium in his 100th appearance for the club. In November 2022, Williams joined
Gosport Borough. In June 2023, Williams joined
Bashley ahead of the new season. In March 2024, he spent time at
Wessex League side
AFC Portchester. In July 2025, Williams joined Wessex League Premier Division side
AFC Stoneham. ==Personal life==