Edwards was born in Hessle, Humberside, and began his football career as a trainee with Hull City. Primarily a centre back, he made his debut on 28 December 1997 in the Division Three game away to Rotherham United which Hull lost 5–4, but did not turn professional until the end of the 1997–98 season. By the time he left the club in March 2003, he was their longest-serving player, though still only 22 years old, and had played 208 games in all first-team competitions.
Colchester United
Edwards joined Colchester United until the end of the season, but was then released, and then after had a trial for Boston United.
Grimsby Town
Following another trial for Grimsby Town, Edwards signed a one-year deal with Grimsby. He spent the season rotating in the team in the centre half position, partnering Tony Crane, Paul Groves and Simon Ford. Following the club's relegation from the Second Division he was not offered a fresh contract and departed the club in May 2004.
Edwards was signed by Notts County in May 2004 on a free transfer from Grimsby Town by Gary Mills. He played just 10 games until cruciate ligament damage sustained during a League Cup first round tie away against West Ham United ruled him out for the rest of the season. Under new manager Gudjon Thordarson, Edwards made a remarkable comeback to play in all 50 league and cup games in the 2005–06 campaign, demonstrating his versatility by operating in central midfield for most of that season. He slotted back into defence after the departure of Kelvin Wilson towards the end of the season putting in consistent and impressive performances. Edwards scored seven times proving a menace to the opposition at set plays. Edwards signed a new contract in May 2006 taking him through until May 2008. He won the club's Player of the Season award for 2006–07, and before the following season was made club captain. Only weeks later, in a pre-season fixture against St Blazey, he suffered a badly-broken leg and was out of the side until January 2008. He renewed his contract for a further two years in June 2008. He was a regular in the Notts County starting 11 in 2010–2011 season. He made his 300th appearance for the club in the 2011–12 season in a 0–0 draw against Scunthorpe United.
Carlisle United
On 11 June 2012, he signed a two-year deal with Carlisle United. Edwards was limited to 24 appearances in two seasons with the club, this eventually led to his release at the end of the 2013–14 season. In July 2014 he returned to Notts County and played in their pre-season warm up match with Carlton Town, however this was only done as a favour to the player to keep up his fitness levels before the new season.
Return to Notts County
In August 2014 Edwards signed a contract at Notts County as a Conditioning Coach and player until January 2015. Edwards scored his first goal since re-signing for Notts against Sheffield United in a 1–1 draw on 28 November. He was released by Notts County at the end of the 2017–18 season and retired shortly after.