born Welsh, joined Liverpool at the age of 10. He progressed through the ranks, becoming captain of the Reserve Team in the process. Welsh trained with the Liverpool first team squad at their Melwood training ground from the middle of the 2001–02 season. In the 2002–03 season John Welsh played only one game for the first team – his début match against Ipswich Town on 4 December 2002 in a League Cup fourth round tie at home – when he replaced Vladimír Šmicer in the 83rd minute. Also, John Welsh has been amongst the substitutes for a number of European games. His first game in Premiership was against Arsenal on 4 October 2003, when he replaced Salif Diao in the 82nd minute, but he couldn't help his team avoid defeat – they lost 2–1, and unfortunately for Welsh, his first act was to be booked for a foul on Ray Parlour. Welsh featured in Liverpool's run to the 2005 UEFA Champions League Final, coming on as a substitute in the round of 16 away tie against Bayer Leverkusen. Liverpool would go on to win the trophy but Welsh was left out of the final match day squad.
After three starts and seven substitute appearances in all competitions for Liverpool, in August 2005, John went on a season-long loan to Championship side Hull City. The club were impressed, and in November 2005 agreed a deal which saw Liverpool take promising young winger Paul Anderson in exchange. The swap took place on 4 January 2006. However, three minutes into a match against Preston North End on 10 March 2007, Welsh dived into a tackle with Preston's Neil Mellor, a former Liverpool teammate. Welsh was carried off on a stretcher, and it later transpired that he had broken both the tibia and fibula in his right leg, ruling him out for many months.
Loans away from Hull
On 31 December 2007, Chester City announced they would be signing Welsh on loan when the transfer window reopened the following day. He made his Chester debut on 1 January 2008, in a 2–0 home defeat to Grimsby Town, and spent the rest of the month in Chester's starting line-up before returning to Hull. He joined Carlisle United on 27 October 2008 for an initial one-month loan making his debut against Hartlepool United. In March 2009, he joined Football League Two side Bury on loan and was released from Hull on 2 June 2009.
In July 2009, Welsh signed a deal with League One side Tranmere Rovers. He had a very consistent season for Tranmere, playing the holding midfield role successfully. Welsh also scored four goals in his first season at Prenton Park, including a volley in the 4–2 victory over Gillingham and a 25-yard strike in a 2–1 home victory over Brighton. The club offered him contract terms for the 2012–13 season.
Preston North End
In May 2012, it was announced that Welsh had signed for Preston North End on a two-year contract. He was voted Player of the Year and Players' Player of the Year of Preston North End for the season 2012/13. On 17 December 2013, Welsh extended his contract with Preston for a further twelve months, thus keeping him at the club until the summer of2015. Despite Tom Clarke taking over the captaincy for the 2014–15 season, Welsh still played a major part in getting the club promoted via the play-offs. This form was rewarded with a new two-year contract. At the end of the 2018 season against burton he left Preston North End and was given an award for longest serving Preston player.
Grimsby Town
Welsh signed a two-year contract with League Two club Grimsby Town on 25 June 2018. He was firmly installed as club captain for the 2018–19 season. Welsh left the club by mutual consent on 20 March 2019.
Non-League
In October 2019 he joined Atherton Collieries on a short-term contract.