Match ends, Morocco 1, Portugal 0.
Morocco became the first African nation to reach a World Cup semi-final and ended the hopes of Cristiano Ronaldo’s Portugal.
Striker Youssef En-Nesyri scored the winning goal in the first half, leaping highest to beat goalkeeper Diogo Costa to the ball and heading in to spark pandemonium at Al Thumama Stadium.
The north African side’s supporters populated most of the venue and joyously celebrated their breakthrough moment on the global stage.
Ronaldo came off the bench in the 50th minute to equal the men’s all-time appearance record of 196 in international matches, but he could not drag his side back into the contest.
Morocco, who will face England or France in the last four, were happy to play on the counter and grabbed the opener just before the break when En-Nesyri headed in from Yahya Attiyat-Allah’s cross.
Portugal skipper Bruno Fernandes came agonisingly close to levelling just minutes later but a brilliant individual effort struck the crossbar.
Decimated by injuries, Morocco sat back for the majority of the second half and Yassine Bounou brilliantly tipped over Joao Felix’s drive – the closest they came to an equaliser.
Morocco striker Walid Cheddira was sent off for a second yellow card in eight minutes of additional time but Portugal could not find the equaliser as their last-four hopes were dashed.
Magnificent Moroccans make history
Three African sides had previously reached this stage of the World Cup but none had progressed any further. Until now.
The marvellous Moroccan players and fans rejoiced as En-Nesyri’s header on 42 minutes proved to be the pivotal moment.
Fans whistled and jeered every pass the Portuguese players made and then the rowdiest section behind the goal seemed to suck the ball into the net.
Walid Regragui’s side were missing West Ham’s Nayef Aguerd, Bayern Munich’s Noussair Mazraoui and lost captain Romain Saiss to injury early in the second period.
But they defended resolutely and frustrated Portugal to keep their seventh clean sheet in eight games under their boss and have conceded just once in this tournament.
Morocco are a tough proposition and buoyed on by a partisan crowd in Doha, they will present a difficult challenge to whoever they face in the last four on Wednesday.
Goalkeeper Bounou, earning his 50th cap, pushed away a header from Felix early on and a deflected strike flew narrowly over.
Morocco had carved out the better opportunities on the break but En-Nesyri sent two free headers off target and Sofiane Boufal’s curler was straight at Costa.
In his desperation for an equaliser, Fernando Santos sent on Ronaldo early in the second half but the 37-year-old – who equalled Kuwait striker Bader Al-Mutawa’s international caps record – found it difficult to make any impact.
Having seen rival Lionel Messi reach the semi-finals on Friday, Ronaldo could not do the same with his side on what is likely to be his final World Cup appearance, trudging down the tunnel in tears at full-time as his dream was over.
Player of the match
Squad number19Player nameEn-NesyriAverage rating
Squad number4Player nameS AmrabatAverage rating
Squad number7Player nameZiyechAverage rating
Squad number17Player nameBoufalAverage rating
Squad number25Player nameAttiat-AllahAverage rating
Squad number2Player nameHakimiAverage rating
Squad number15Player nameAmallahAverage rating
Squad number1Player nameBonoAverage rating
Squad number8Player nameOunahiAverage rating
Squad number6Player nameSaïssAverage rating
Squad number18Player nameEl YamiqAverage rating
Squad number14Player nameAboukhlalAverage rating
Squad number20Player nameDariAverage rating
Squad number24Player nameBenounAverage rating
Squad number26Player nameJabraneAverage rating
Squad number21Player nameCheddiraAverage rating
Squad number8Player nameBruno FernandesAverage rating
Squad number15Player nameRafael LeãoAverage rating
Squad number11Player nameJoão FélixAverage rating
Squad number20Player nameJoão CanceloAverage rating
Squad number10Player nameBernardo SilvaAverage rating
Squad number4Player nameRúben DiasAverage rating
Squad number2Player nameDiogo DalotAverage rating
Squad number3Player namePepeAverage rating
Squad number18Player nameRúben NevesAverage rating
Squad number5Player nameRaphaël GuerreiroAverage rating
Squad number26Player nameGonçalo RamosAverage rating
Squad number22Player nameDiogo CostaAverage rating
Squad number25Player nameOtávioAverage rating
Squad number16Player nameVitinhaAverage rating
Squad number21Player nameRicardo HortaAverage rating
Squad number7Player nameCristiano RonaldoAverage rating
- 18El Yamiq
- 6SaïssSubstituted forDariat 57′minutesBooked at 70mins
- 4S Amrabat
- 15AmallahSubstituted forCheddiraat 65′minutesBooked at 90mins
- 7ZiyechSubstituted forAboukhlalat 82′minutes
- 19En-NesyriSubstituted forBenounat 65′minutes
- 17BoufalSubstituted forJabraneat 82′minutes
- 23El Khannouss
- 22Diogo Costa
- 2DalotSubstituted forRicardo Hortaat 79′minutes
- 4Rúben Dias
- 5GuerreiroSubstituted forCanceloat 51′minutes
- 10Bernardo Silva
- 18NevesSubstituted forCristiano Ronaldoat 51′minutes
- 25OtávioSubstituted forVitinhaat 69′minutesBooked at 87mins
- 8Bruno Fernandes
- 26Gonçalo RamosSubstituted forRafael Leãoat 69′minutes
- 11João Félix
- 1Rui Patrício
- 6João Palhinha
- 7Cristiano Ronaldo
- 9André Silva
- 14William Carvalho
- 15Rafael Leão
- 17João Mário
- 21Ricardo Horta
- 24António Silva
- Facundo Tello
Second Half ends, Morocco 1, Portugal 0.
Attempt missed. Pepe (Portugal) header from the right side of the six yard box is close, but misses to the right. Assisted by Rafael Leão with a cross.
Attempt saved. Zakaria Aboukhlal (Morocco) right footed shot from outside the box is saved in the centre of the goal. Assisted by Yahya Attiat-Allah.
Corner, Portugal. Conceded by Badr Benoun.
Second yellow card to Walid Cheddira (Morocco) for a bad foul.
João Félix (Portugal) wins a free kick in the defensive half.
Foul by Walid Cheddira (Morocco).
Walid Cheddira (Morocco) is shown the yellow card for a bad foul.
Pepe (Portugal) wins a free kick in the defensive half.
Foul by Walid Cheddira (Morocco).
Attempt saved. Cristiano Ronaldo (Portugal) right footed shot from outside the box is saved in the bottom right corner. Assisted by Bruno Fernandes with a through ball.
Offside, Morocco. Sofyan Amrabat tries a through ball, but Walid Cheddira is caught offside.
Vitinha (Portugal) is shown the yellow card for a bad foul.
Foul by Vitinha (Portugal).
Azzedine Ounahi (Morocco) wins a free kick in the defensive half.
Corner, Portugal. Conceded by Jawad El Yamiq.
Vitinha (Portugal) wins a free kick in the defensive half.
Foul by Achraf Hakimi (Morocco).
Foul by Ricardo Horta (Portugal).
Get the latest results and goal notifications for any team at the Fifa World Cup by downloading the BBC Sport app: Apple – Android – Amazon
Get your daily dose of Fifa World Cup reaction, debate & analysis with World Cup Daily on BBC Sounds