Bernardo Silva pushed Manchester City back into the FA Cup final with his late goal securing the holders' 1-0 victory against Chelsea at Wembley on Saturday.
Pep Guardiola’s team were not as good for most of the semi-final, but Chelsea missed several chances before Silva scored with six minutes left.
Affected by their Champions League quarter-final loss against Real Madrid on penalties earlier in the week, it took City some time to recover from the disappointment of their treble bid coming to an end.
They were hindered by the absence of Norway striker Erling Haaland, who got injured against Real. Julian Alvarez, his replacement, couldn't make an impact.
City were saved by Chelsea striker Nicolas Jackson's wastefulness, and Guardiola will hope this hard-fought success gives them a much-needed boost as they pursue the Premier League and FA Cup double.
City will play Manchester United or Coventry in the final on May 25 and will keep the Premier League title if they win their last six games.
This will be City's 13th final in the competition and could potentially be a repeat of last year's 2-1 win over United in the Wembley Manchester derby.
Chelsea's quest to win their first domestic trophy since the 2018 FA Cup continues after being defeated by Liverpool in the League Cup final in February.
Blues boss Mauricio Pochettino suffered a bitter blow as he endures a tough first season in charge and remains without silverware in England.
The semi-final was seen as in-form Chelsea forward Cole Palmer's opportunity to punish his former club for selling him to the Blues in September.
Guardiola revealed that Palmer was asked to leave City for two years before eventually joining Chelsea, where he has scored 23 goals in all competitions this season, including 11 in his last six games.
Palmer, who scored four times in Monday’s 6-0 rout of Everton, was a constant threat for Chelsea, but ultimately it was his team's lack of killer instinct that proved decisive.
– Guardiola relief –
Palmer's precise pass sent Jackson sprinting into the City area early on, but his shot lacked the accuracy to beat Stefan Ortega in a miss that predicted Chelsea’s fate.
Jackson wasted a great opportunity to give Chelsea the goal they deserved for their dominance.
Enzo Fernandez's pass split the City defence, but Jackson chose to go around Ortega instead of shooting, and the chance was gone as Nathan Ake hurried back to clear.
Playing with more purpose and quality than City, Pochettino’s team threatened again as Palmer cleverly moved past Rodri for a low shot from 12 yards, which Ortega saved well.
It was the first time City had failed to produce a first-half shot on target since a game against Everton in February.
Jackson, having a poor debut season, was put clean through on goal by Conor Gallagher right after the interval.
But the much-criticized striker's shot was saved by Ortega, who also blocked a close-range header from Jackson seconds later.
City finally tested Djordje Petrovic with Phil Foden’s quick shot, but the Serbian goalkeeper managed to save his powerful strike.
Chelsea asked for a penalty when Jack Grealish’s arm blocked Palmer’s free-kick, but Moises Caicedo was lucky to avoid a second booking for a hard tackle that caused Grealish to leave the game with a limp.
Grealish’s substitute Jeremy Doku immediately forced Petrovic to make a save with a shot towards the near post.
Doku’s presence lifted City and the Belgian played a role in their last-minute victory in the 84th minute.
Moving purposefully towards the Chelsea area, Doku passed to Kevin de Bruyne, whose low cross was saved by Petrovic, and then picked up by Silva for a close-range finish that deflected home as Guardiola expressed relief.
AFP