Spain had the better of the opening exchanges and took advantage of their dominance in the eighth minute.
Jordi Alba struck a shot from range which deflected kindly into the top corner off the right boot of Denis Zakaria. It was later ruled as an own goal.
There wasn’t a whole lot of first-half action outside of the goal. Cesar Azpilicueta headed straight into the arms of Yann Sommer, and Manuel Akanji and Nico Elvedi both missed the target from Xherdan Shaqiri corners.
The whistle went with Luis Enrique’s men 1-0 up. They had enjoyed 71% possession but only managed three attempts to Switzerland’s four.
The Swiss came out in the second half fighting for the equaliser. Zakaria almost atoned for his own goal when he headed wide from Shaqiri’s corner, and Unai Simon had to be at his best to deny Steven Zuber from inside the box.
Eventually, their pressure told in the 68th minute when they grabbed an equaliser. Aymeric Laporte and Pau Torres made a mess of a simple ball over the top, allowing Remo Freuler through on goal. The midfielder picked his head up and teed up Shaqiri to finish into the far corner.
But Switzerland’s momentum was halted ten minutes later when they were reduced to ten men.
Freuler put in a heavy challenge on Gerard Moreno, and Michael Oliver brandished the red card. The decision appeared to divide opinion, with many believing that a yellow card would have sufficed.
Nonetheless, Switzerland managed to hold out for extra time.
La Furia Roja had a glorious chance to go ahead in the second minute of extra time when Alba set up Moreno for a tap in. However, the Villarreal forward somehow placed wide.
The rest of the first half was the Sommer show, as the goalkeeper made three vital saves. He turned Alba’s long-range effort over the bar and denied Moreno after the ball fell kindly for him.
He was at full stretch again just before half time, this time to deny substitute Mikel Oyarzabal. The winger bent a shot towards the far corner, but Sommer palmed it away.
Spain kept pressing but were unable to get a winner, taking the game to a penalty shootout.
Sergio Busquets was the first up, and he got off to the worst possible start by hitting the post. Mario Gavranovic was the next to take, and he emphatically put his side ahead.
It was Dani Olmo’s turn next, and he powered his effort into the top left corner. Fabian Schar was unable to match Olmo, seeing his spot-kick saved by Simon.
Next up was Rodri, who was substituted on specifically for the shootout. This proved to be the wrong choice, as Sommer dived to his left to palm the ball away.
But Manuel Akanji failed to reclaim the advantage for his side when his penalty was saved.
Having missed several chances to win it in extra time, Moreno was on hand to bury his penalty into the top right corner.
The pressure was on Ruben Vargas, and he crumbled, blasting his shot over the crossbar.
Up stepped Oyarzabal with the chance to win it and get his team to the semi-finals. He coolly rolled his effort into the bottom right, sending Sommer the wrong way and knocking Switzerland out.
Spain reached the semi-finals of a major tournament for the first time since 2012. They will face Belgium or Italy at Wembley on Tuesday.
Yann Sommer (9/10) *MOTM* – Utterly heroic in extra time and managed to make a save in the shootout. Unlucky to end up on the losing side.
Silvan Widmer (6/10) – Offered very little going forward. Defended well enough up against Sarabia and Olmo.
Nico Elvedi (7/10) – Managed the threat of Morata effectively. Coped with a lot of pressure in extra time.
Manuel Akanji (6/10) – Defended well throughout the night but missed his penalty in the shootout.
Ricardo Rodriguez (8/10) – Made an incredible block in extra time to deny Llorente. Held firm under extreme pressure.
Steven Zuber (7/10) – Energetic down the left and got himself into some good position. Had a second-half effort well saved.
Remo Freuler (5/10) – Worked hard and got himself an assist. Bit unlucky for the red card but an unnecessarily forceful challenge.
Denis Zakaria (5/10) – Bit of a weak attempt at a block for the own goal. Tried to make amends but didn’t do enough.
Xherdan Shaqiri (8/10) – Set-piece delivery was brilliant, and he took his chance when he got it.
Breel Embolo (6/10) – Went off after 20 minutes with a hamstring injury.
Haris Seferovic (5/10) – Didn’t have any chances of note, but caused very few problems for the Spain backline.
Ruben Vargas (5/10) – Looked bright on the odd occasion that Switzerland got forward. Fired his penalty over the crossbar, which ultimately proved decisive.
Djibril Sow (5/10)
Mario Gavranovic (5/10)
Christian Fassnacht (5/10)
Fabian Schar (5/10)
Kevin Mbabu (5/10)
Unai Simon (8/10) – Had little to do throughout the game. Made two saves in the shootout.
Cesar Azpilicueta (7/10) – Limited the Swiss attack and contributed going forward.
Pau Torres (5/10) – Rarely came under pressure but involved in a terrible mix up for Switzerland’s equaliser.
Aymeric Laporte (5/10) – Also made an error for Switzerland’s goal. Had little to do otherwise.
Jordi Alba (8/10) – Provided most of Spain’s attacking threat. Goal probably should have been awarded to him, and also should have had an assist for Moreno in extra time.
Sergio Busquets (7/10) – Controlled things in the middle of the park but hit the post with his penalty.
Koke (7/10) – Decent in possession and put in a couple of good set-pieces.
Pedri (7/10) – Always calm on the ball and constantly progressed his side.
Ferran Torres (5/10) – Didn’t look like getting a goal and failed to create anything. Can do far better.
Alvaro Morata (6/10) – Got involved and linked up well but posed no threat inside the box.
Pablo Sarabia (5/10) – Fairly quiet while on the pitch. Substituted at half time.
Dani Olmo (7/10)
Gerard Moreno (5/10)
Marcos Llorente (6/10)
Mikel Oyarzabal (7/10)
Thiago Alcantara (NA/10)