Chelsea ended Manchester City's quadruple bid as Hakim Ziyech's goal secured a 1-0 win at Wembley to send Thomas Tuchel's side through to the FA Cup final.
Ziyech converted Timo Werner's squared pass after Chelsea sprang the Manchester City offside trap 10 minutes into the second half and the goal proved decisive in a game of few chances.
City could yet face Chelsea again in the Champions League final after both sides advanced in Europe earlier this week, but they were well below par at Wembley and their problems were compounded by an apparent ankle injury to Kevin De Bruyne.
The Belgian was forced off early in the second half following a collision with N'Golo Kante, making him a doubt for next weekend's Carabao Cup final against Tottenham, and Pep Guardiola's side were unable to muster a response after Ziyech's strike despite dominating possession.
Gabriel Jesus fired wastefully over from close range with their best chance, while Rodri was denied by Kepa Arrizabalaga from a City corner in stoppage time.
- Get Sky Sports | Get a Sky Sports Pass
- How the teams lined up | Match stats
- Winner to face Leicester or Saints
- FA Cup final to be played on May 15
Chelsea defended resolutely, clinching their 14th clean sheet in 19 games under Tuchel, and thought they had scored a late second before substitute Christian Pulisic's strike was ruled out for offside.
Ziyech's goal proved sufficient, though, and the Blues will now be favourites to go on and lift the trophy when they face either Leicester or Southampton in next month's final.
Chelsea: Kepa (7), Azpilicueta (7), Thiago Silva (8), Rudiger (7), James (7), Jorginho (7), Kante (7), Chilwell (7), Mount (7), Ziyech (8), Werner (7).
Subs: Pulisic (6), Havertz (6), Emerson (6), Zouma (n/a).
Man City: Steffen (6), Cancelo (6), Dias (6), Laporte (6), Mendy (6), Rodri (7), Fernandinho (6), De Bruyne (6), Torres (5), Sterling (6), Jesus (5).
Subs: Foden (6), Gundogan (6)
Man of the match: Hakim Ziyech.
How Chelsea claimed deserved win
Guardiola freshened up his Manchester City side following the midweek win over Borussia Dortmund, making eight changes to Chelsea's three, but it was Tuchel's team who started brightest.
Most of their attacks were directed down the flanks, with wing-backs Ben Chilwell and Reece James bombing forward at every opportunity and finding plenty of space to run into.
There was an early warning for City when Ziyech put the ball in the net from a Werner cross following a break, but the goal was ruled out for offside.
Chelsea's wing-backs then combined for the best chance of the first half, with James latching onto a Ziyech pass and launching a deep cross to the far post, where the unmarked Chilwell screwed his volley wide of Zack Steffen's right-hand post.
Chelsea were dominating possession at that point, a rarity for any side against Manchester City, and they went close again when James flashed a first-time shot a few yards wide from 25 yards out following a corner.
City grew into the game as the half wore on but lacked their usual incisiveness in possession and could only muster a couple of half-chances.
- Mateo Kovacic and Andreas Christensen missed out for Chelsea due to muscle injuries, while Tammy Abraham was left out of the squad. Thiago Silva returned to the defence while Kepa Arrizabalaga got the nod in goal.
- Sergio Aguero was the only absentee for Man City, with Gabriel Jesus starting up front, as Pep Guardiola made eight changes from the midweek win over Borussia Dortmund.
Jesus curled their only shot on target of the half straight into the arms of Kepa, who got the nod in goal for Chelsea ahead of usual first-choice Edouard Mendy, while Fernandinho headed wide from a Raheem Sterling delivery.
Chelsea were proving difficult to break down and City's task became harder when De Bruyne limped off just three minutes after the break, the Belgian's fitness immediately becoming a major worry for Guardiola ahead of the Carabao Cup final.
Phil Foden was the chosen replacement and almost made an immediate impact when his deep cross was headed dangerously across goal by Jesus, but Chelsea's breakthrough arrived just a few minutes later.
Werner had been threatening to exploit City's high line all afternoon and he finally sprang the offside trap to collect Chilwell's through-ball and square for Ziyech to finish into the empty net.
It was a carbon copy of the goal they had disallowed in the early stages of the game and Chelsea were in again a few minutes later, with Steffen denying Ziyech a second after Ruben Dias had failed to cut out a long pass.
Dias did recover in time to block Werner's effort from the follow-up but City continued to lack cutting edge at the other end.
Dias nodded over after Rodri had headed a corner back across goal, and Chelsea continued to threaten on the break, with Pulisic getting in behind again, only to shoot tamely at Steffen.
City then finally created a clear opportunity when the ball fell kindly to Gabriel Jesus, who was starting in place of the injured Sergio Aguero, but Guardiola was left with his head in his hands as the Brazilian blazed over from eight yards out.
Pulisic seemed to have made the game safe when he fired across Steffen and into the corner in the third minute of stoppage time, but the assistant raised his flag again, giving City one last chance to equalise when Rodri's header was pushed around the post by Kepa.
Tuchel's decision to play Kepa ahead of Mendy was viewed as a gamble ahead of kick-off, but it is Guardiola who may rue his changes. City's quadruple hopes are over but they must pick themselves up quickly. A return to Wembley is only eight days away.
What the managers said...
Thomas Tuchel: "I am very, very happy and proud with the performance of our team because we played with a lot of courage, we were very self-confident and played very brave with the ball and against the ball."
"If you play against Pep you know that you play against the highest level of Europe because wherever he was at the sideline - Barcelona, Bayern (Munich) and now Man City - for years he was the benchmark with his teams.
"And he is again. You can see that with the Premier League. Our target was to close the gap for the 90 minutes because it's possible in football, if you arrive in good momentum, to make this happen."
Pep Guardiola: "We played a good last 15 minutes. We had struggled to find our place in the pockets but congratulations to Chelsea in a tight game.
"We arrived sometimes in that position but after that we didn't create. We conceded the goal but after we reacted well, especially after Phil Foden and Ilkay Gundogan came on.
"The team that defends with eight players in the final third it is not easy. This type of game the margin is so tight. In general we controlled well. We didn't create many clear-cut chances but we arrived more than them."
Opta stats - Chelsea's defensive prowess
- Chelsea have reached the FA Cup final in four of the last five seasons - only Arsenal (21) and Manchester United (20) have reached the competition's showcase on more occasions than Chelsea (15).
- Chelsea boss Thomas Tuchel has become the first ever German manager to reach the English FA Cup final.
- Manchester City have now been eliminated at the semi-final stage in three of their five seasons under Pep Guardiola, with the team knocking them out the other two times going on to win the competition (Arsenal in both 2017 and 2020).
- Since Thomas Tuchel's first game in charge of Chelsea in January, the Blues have kept more clean sheets in all competitions than any other side in the top five European leagues (14).
- Chelsea have kept 14 clean sheets in 19 games in all competitions under Thomas Tuchel, one more than they did under Frank Lampard in 29 matches this season.
- Four of Hakim Ziyech's five goals for Chelsea have come in cup competition, while three of his five strikes for the Blues have been assisted by Timo Werner.
- Timo Werner has been involved in 19 goals in all competitions this season (10 goals, 9 assists), at least three more than any other Chelsea player.
- In his 11th appearance for Man City in all competitions, this was the first time goalkeeper Zack Steffen has ended on the losing side, having won each of his first 10 games for the club.
Both sides resume their Premier League campaigns in midweek. Chelsea host Brighton live on Sky Sports Premier League from 7.30pm on Tuesday, with kick-off at 8pm, while Manchester City are away to Aston Villa on Wednesday, with the game live on Sky Sports Premier League from 8pm ahead of the 8.15pm kick-off.
Chelsea will find out who they face in the FA Cup final when Leicester and Southampton go head to head in the other semi-final on Sunday.