Keane has represented the Republic of Ireland at under-17 and under-19 levels and England at under-19, under-20, under-21 and senior levels. He was named as Manchester United's Reserve Player of the Year in 2012.
Keane was born in Stockport, Greater Manchester, and played for South Manchester in nearby Cheadle, before joining Manchester United as an academy scholar in 2009 at the age of 16. Keane signed his first professional contract with the club on his 18th birthday on 11 January 2011. He made his first-team debut in the League Cup on 25 October 2011, coming on as a substitute in the 70th minute in United's fourth round victory over Aldershot Town. On 28 January 2012, he was again named on the bench, this time against rivals Liverpool in the FA Cup; however, he was an unused substitute and the match finished 2–1 to Liverpool.
Keane started a first-team match for the first time against Newcastle United in the League Cup on 26 September 2012, playing alongside Scott Wootton as a centre back. Following the match, teammate Darren Fletcher praised him for being "fantastic".
Keane won the award for the Denzil Haroun Reserve Player of the Year in 2012. He was the clear winner with 60% of the votes, beating Jesse Lingard (24%) and Larnell Cole (16%). He made 27 appearances in all competitions for the reserve team in the 2011–12 season, during which he scored five goals. The reserve team won the Reserve League North and the national play-off final that season. Keane told MUTV: "I was surprised but really pleased to win the award. It's great to know that it's been voted for by the fans, because they come to watch us and follow us throughout the season."
On 6 November 2012, Keane alongside his teammate Jesse Lingard joined Leicester City on loan until 3 December 2012. This was later extended to 2 January 2013. Keane made his debut for Leicester City on 6 November 2012, in a 0–0 draw away to Bolton Wanderers. On 4 January 2013, Keane extended his stay at Leicester until the end of January and was given permission by United to play in the FA Cup for Leicester. On 24 January 2013, Keane extended his stay at Leicester until the end of the season. On 12 February, Keane scored his first goal, in a 2–1 defeat to Huddersfield Town in the fourth round of the FA Cup. On 5 March, he scored a 90th-minute header against Leeds United to gain Leicester a point in a 1–1 draw.
On 28 November 2013, after receiving offers from Charlton Athletic, Derby County, Middlesbrough and Millwall, Keane opted to join Derby County on loan until 2 January 2014. He made his debut for Derby on 7 December 2013, coming on in the 73rd minute of a 5–1 win against Blackpool. He almost scored with a header from a corner in the 92nd minute but his effort was saved and Richard Keogh headed in the rebound. The loan deal was extended by a further month on 2 January 2014, with Keane now able to play for Derby in the FA Cup. On 30 January 2014, Derby County sent him back to Manchester United after signing George Thorne on loan from West Bromwich Albion.
On 7 March 2014, Keane joined Championship club Blackburn Rovers on loan for the remainder of the 2013–14 season. Keane was handed the number 16 shirt number for his time at Ewood Park. He made his debut for the club on 9 March, playing the full 90 minutes in a 2–1 defeat at home to local rivals Burnley. Keane returned to Old Trafford on the completion of the Championship season and was named on the bench for Manchester United's last home match of the season against Hull City.
Keane made his first league appearance for Manchester United squad on 24 August 2014 against Sunderland replacing Chris Smalling in the 43rd minute. Two days later, Keane would start for United in the League Cup against Milton Keynes Dons of League One; the Dons would win 4–0.
On 2 September 2014, Keane completed a loan move to Burnley until January 2015. Keane made his Burnley debut against Leicester City. The loan was made permanent on 8 January 2015 for an undisclosed fee, with Keane signing a three-and-a-half-year contract.
Keane started his first full season at Turf Moor brightly, scoring twice in the opening month of the season. He scored five times in total: his last goal of the season was against Middlesbrough in a top-of-the-table clash on 19 April; less than a month later both Burnley and Middlesbrough would be celebrating promotion back to the Premier League.
On 3 July 2017, Keane signed for Premier League club Everton on a five-year contract, for an initial fee of £25 million that could rise to £30 million. Keane made his league debut for Everton on 12 August 2017, when his club beat Stoke City 1–0 at Goodison Park. Keane scored his first goal for Everton on 17 August 2017 in the UEFA Europa League play-off round first leg against Hajduk Split. Keane had risen highest at the far post to head in Leighton Baines' left-wing cross. His towering header gave Everton the lead in the 30th minute and the match ended with Everton winning the match by 2–0.
Although he was born in England, Keane is of Irish ancestry, which made him eligible to play for the Republic of Ireland national team. He represented Ireland at under-17 and under-19 levels, but expressed his desire to play for the England under-19 team and hoped to be included in the squad for the friendly against the Czech Republic in February 2012. He made his debut for the under-19 team on 25 May 2012, in a 5–0 win against Slovenia during which his twin brother Will scored twice. He was named in manager Noel Blake's squad for the 2012 UEFA European Under-19 Championship, and helped England reach the semi-finals. On 25 March 2013, Keane made his debut for the England under-21 team, replacing Andre Wisdom in the 77th minute of a 4–0 win against Austria at the Falmer Stadium.
On 14 November 2013, Keane opened the scoring in the England Under-21s' 3–0 win over Finland, putting in James Ward-Prowse's free-kick after 21 minutes. Keane repeated the feat for the second match in a row five days later, heading in Tom Ince's corner in the 13th minute. The England U21 team went on to beat the San Marino U21 team 9–0, a record win.
On 4 October 2016, he was called into the full England squad, as a replacement for the injured Glen Johnson, by interim manager Gareth Southgate for the 2018 World Cup qualifying matches against Malta on 8 October and Slovenia three days later. Keane made his debut on 22 March 2017, playing the full 90 minutes in a friendly defeat to Germany.
- As of match played 2 December 2017
|Club||Season||League||FA Cup||League Cup||Other||Total|
|Manchester United||2011–12||Premier League||0||0||0||0||1||0||0||0||1||0|
|Leicester City (loan)||2012–13||Championship||22||2||3||1||—||2||0||27||3|
|Derby County (loan)||2013–14||Championship||7||0||1||0||—||—||8||0|
|Blackburn Rovers (loan)||2013–14||Championship||13||3||—||—||—||13||3|
- As of match played 8 October 2017