A late double from Ilkay Gundogan and Kevin de Bruyne saw Manchester City into their third successive FA Cup semi-final, a feat the club last achieved in 1934, after overcoming a dogged and determined Everton side.
For a long time, it appeared the Merseysiders would hold off the waves of City attacks, but the pressure eventually told for the opener before the win was sealed with a last minute counterattack.
As a spectacle, the game struggled to live up to pre-match expectation. In truth, the first half was insipid at best.
Everton were content to keep their defence and midfield as a pack on the edge of the box, with City failing to cut through the lines with any sort of regularity.
Phil Foden had a long range effort deflect away off the head of Yerry Mina, while Raheem Sterling sent a freekick from a similar position well over following a foul on the excellent Fernandinho.
Virginia in the Everton goal had one save to make, catching a 25 yard drive from Sterling, but his midfield and defence protected him excellently from City’s swarming attack.
Everton actually had the best chance of the half, as a Mina header from a corner was cleared off the line by Oleksandr Zinchenko. Set pieces were Everton’s only threat all half, and they were so close here to making it count on the stroke of halftime.
Half time: Everton 0-0 Manchester City
The second half continued in a similar pattern, with City monopolising possession as Everton continued sending long, hopeful balls in the direction of the isolated Dominic Calvert-Lewin and Richarlison.
Once again, however, Everton were denying City the space to operate in front of the goal, and the frustration was clearly growing for Pep Guardiola.
Then, on 58 minutes, City finally created a chance.
It was not from brilliant passing, or from an attacker’s clever play. Instead, it was Fernandinho who seized the initiative, driving through the lines and cutting the ball back to Sterling on the penalty spot.
Once more, the England forward’s finishing failed him. Although the shot was in a corner, and required a good save from Virginia, it was scuffed into the ground with little power. A clean contact would surely have resulted in the opener.
Foden was City’s brightest attacking spark, and he almost made the difference again with half an hour to play, as he turned brilliantly on the edge of the box before hammering a shot just wide of the far post.
Everton did finally manage a shot shortly afterwards, as Andre Gomes cracked a shot narrowly over from a corner, but Everton were sinking deeper and deeper in defence.
On 81 minutes, Foden drove straight at Virginia from the edge of the box, as Everton and Allan in particular were noticeably flagging. The lack of Abdoulaye Doucoure on the bench perhaps the reason Carlo Ancelotti resisted any changes.
Just three minutes later, the pressure finally told.
Substitute de Bruyne made it, as he held off several tackles in the D of the box before playing in, of all people, Aymeric Laporte on his right foot to strike at goal. Virginia made a fantastic fingertip save to divert the shot onto the bar, but Gundogan was there to stoop and head into the open net.
The home side suddenly had to abandon their game plan, and on the 90 mark de Bruyne made the game safe in emphatic style.
After running into the box from Rodri’s pass, he cut onto his left foot and gave Virginia the eyes before lashing the ball inside the near post to end the game.
City could have added extra gloss in additional time, as Foden was just beaten to the ball by Virginia and Fernandinho poked narrowly wide, but by then passage to Wembley was once again secured.
At full time, Everton were left to rue another year without a trophy, while City’s march on four fronts continues.
Full time: Everton 0-2 Manchester City
Man of the Match: Phil Foden
Just shading the timeless brilliance of Fernandinho, the youngster was once again excellent and at the heart of almost every City move. Not afraid to shoot or to try and beat his man- which he invariably did- he was a large part of wearing down the home defence.