Luis Suarez scored twice as Barcelona won at Real Madrid in a smash-and-grab El Clasico to reach a sixth consecutive Copa del Rey final.
Real dominated with 14 shots to Barca’s four but the visitors were clinical when it mattered.
Suarez smashed home Ousmane Dembele’s cross before Raphael Varane’s own goal put Barca in control.
An audacious chipped penalty from Suarez after he was fouled by Casemiro put the game beyond any doubt.
Both sides – who had drawn the first leg 1-1 – meet again at the Bernabeu on Saturday in La Liga.
The Copa del Rey final takes place on 25 May, when Barcelona will face either Real Betis or Valencia, with that tie to be settled on Thursday after the first leg finished 2-2.
Clinical Barca leave Real reeling
Suarez scored a hat-trick as Barca hammered Real Madrid 5-1 in El Clasico back in October, a result which cost Julen Lopetegui his job.
While this was another thrashing, the scoreline was not an indication of how the game went.
Ernesto Valverde’s side rode their luck at the Bernabeu to reach the final again as they look to win an unprecedented fifth successive Copa del Rey.
Marc-Andre ter Stegen made several fine stops to keep out Real before Barca scored with their first shot on target.
Suarez netted his 10th Clasico goal as he blasted home from 14 yards and he was involved in their second as Varane put Dembele’s cross into his own net in a desperate bid to stop the ball reaching the Uruguayan.
And Suarez scored again – with a Panenka penalty, a technique associated with Real captain Sergio Ramos this season – after he had won the spot-kick himself.
It was a relatively quiet night for Lionel Messi, who had scored a hat-trick in Saturday’s 4-2 win over Sevilla.
Now over to Saturday’s Clasico back in Madrid, with Barcelona looking to expand their seven-point lead at the top over Atletico Madrid.
Frustrating night for Real
Real Madrid knew a goalless draw would take them to a first Copa del Rey final since 2013-14 because of their away goal in the 1-1 first-leg draw at the Nou Camp.
But they played like the team who wanted to score, with teenager Vinicius Jr in explosive form, especially in the first half.
The Brazilian, who has been one of his team’s stars under Santiago Solari, caused defender Semedo numerous problems and had five of the seven shots in the first half – as well as a strong penalty appeal turned down.
His best chance came when Ter Stegen denied him from close range, while he also lashed over twice from inside the box.
Real continued to push after Suarez’s opener as they searched for the goal which would force extra-time.
Another youngster, left-back Sergio Reguilon, had their best chance with a wonderful diving header which Ter Stegen expertly saved. The other full-back, Dani Carvajal, also had a fierce drive saved by the keeper.
Gareth Bale came on moments before Varane’s own goal which killed the tie and rarely had a chance as the flow of the game had changed in Barca’s favour.
Now Solari faces a big test to lift his players for the repeat fixture on Saturday evening (19:45 GMT).
Defeat in that would see Real – who have already lost seven La Liga games this season – slip 12 points behind the champions. But there is no suggestion Solari’s job is under threat, with Madrid having won eight of their previous 10 games in all competitions.