Craig Morgan was born on 16 June 1985 in St Asapa and began his career as a youth player at Wrexham He made his professional debut at the end of the 2001/02 as a substitute during a 5-0 win over Cambridge at the age of 16, a game which confirmed Wrexham's relegation to Division Three. Earlier in the season Morgan had made his debut for the Wales under 17s side on 24 September 2001 in a 2-0 friendly win over Scotland, going on to win 6 caps for the side before moving up to both under 19 and 21 levels.
The following season, Morgan scored his first professional goal during his first appearance of the season on 5 October 2002 in a 2-2 draw with Cambridge United., making seven appearances in all competitions as Wrexham gained promotion back into Division Two at the first attempt.
The 2003/04 season saw Morgan begin to establish himself in the Wrexham first team and in 2004/05 he played in all six of the team's matches as they won the Football League Trophy with a 2-0 victory over Southend in the final at the Millennium Stadium. However the season ended in disappointment for the team as they were relegated back into Division Three after being docked ten points due to entering administration.
Morgan was out of contract with the club and rejected the first offer made by Wrexham stating. After previously been warned by Wrexham boss Denis Smith over their attempts to sign him, Morgan joined Milton Keynes Dons for an undisclosed five-figure transfer fee in July 2005.
He made his debut for MK Dons on 6 August 2005, the opening day of the 2005/06 season, in a 2-2 draw with Bournemouth and appeared in 47 games during the season which ended in relegation from Division Two. After starting the next season in the first-team, Morgan fell out of favour and was allowed to return to his first club Wrexham on a one-month loan deal, one week after making his debut for the Wales senior side on 11 October 2006 in a 3-1 win over Cyprus during the Euro 2008 qualifiers, becoming the first Milton Keynes Dons player to win an international cap since the team's relocation.
Morgan went on loan to Peterborough on 23 November 2006, and made his debut on 2 December 2006 in a 2-1 FA Cup win against Tranmere as an 85th minute substitute for Shane Huke. After impressing during his initial loan spell, having made seven appearances, his move was made permanent on 2 January on a free transfer. He quickly established himself in the first team and scored his first goal for the club in a 2-0 victory over Notts County on 3 March 2007.
In the 2007/08 season he made 41 league appearances, as well as signing a new three-year contract in February 2008, as the club won promotion to League One by finishing as runners-up to his former club Milton Keynes Dons.
Prior to the start of the 2008/09 Morgan was handed the captaincy of the team at the age of just 23, taking over from Micah Hyde. However on 29 September he was replaced as captain by Russell Martin, less than two months later. Peterborough Manager Darren Ferguson put the decision down to Morgan's involvement with the Welsh national team, which often saw him miss games while on international duty Despite losing the captaincy, he remained a regular first-team player and helped the side to their second consecutive promotion finishing as runners-up to and reaching the second tier. During the summer break after the 2008/09 season, Morgan became Peterborough's all-time record international appearance maker by winning his 14th cap for Wales in a friendly against Estonia.
Morgan made 27 league appearances for the Posh as they were relegated back to League One to take his tally to 125 league appearances with 4 goals.
On 6 July 2010, Morgan joined Preston for a fee of £400,000 increasing to £650,000 depending on conditions with a 25% clause if resold.