Roma crashed out of the Champions League play-off after Daniele De Rossi and Emerson Palmieri saw red in a 3-0 defeat to Porto.
The Giallorossi will enter the Europa League this season along with Inter, Fiorentina and perhaps Sassuolo.
Thomas Vermaelen was suspended after his red card just 41 minutes into the first leg, but that 1-1 draw meant the Giallorossi had the advantage on the away goals rule going in. Alessandro Florenzi and Vasilis Torosidis joined long-term absentees Mario Rui and Antonio Rudiger on the treatment table, so Daniele De Rossi was a surprise at centre-back, bringing in Bruno Peres and Leandro Paredes. Porto missed Bruno Martins Indi, Vincent Aboubakar, Nabil Ghilas and Yacine Brahimi.
It took Radja Nainggolan 90 seconds to force a save out of Iker Casillas with one of his scorchers from distance, while Andre Andre only scuffed his finish when clear on goal.
However, it was Felipe Augusto who opened the scoring with a free header at the back post on an Otavio set play, having scored the own goal in the first leg. He put Porto ahead on the night and crucially on aggregate too.
It also meant that Roma have conceded in 31 of their last 32 European games, keeping a clean sheet only in the 0-0 with BATE Borisov.
Jesus Corona’s shot was charged down after Kostas Manolas was caught in possession, Nainggolan nodded over the bar and Felipe was decisive at the other end to stop Manolas getting a free header.
Dzeko hit an angled drive straight at Iker Casillas, then seemed to lose his footing and failed to get to a splendid Bruno Peres cross.
On 35 minutes Dzeko knocked down a cross for Mohamed Salah, but Casillas stuck out a boot to parry from close range.
Just as Roma were building up the pressure, they again went down to 10 men as De Rossi dived into a studs-up challenge on Maxi Pereira’s shin and was shown a straight red card. It was De Rossi’s 14th career dismissal, 12 for Roma and two for Italy.
Luciano Spalletti took off Paredes to introduce Emerson Palmeiras at left-back, moving Juan Jesus to the centre, but the tension and sense of disbelief in the Olimpico was palpable. Maxi Pereira was stretchered off during the six minutes of injury time.
Nainggolan’s cross was about to be nodded in by Dzeko when Felipe managed to soar and get a crucial flick. Moments later Porto almost doubled their lead, as Manolas was caught out and Hector Herrera drilled just wide from the edge of the box.
Incredibly, after the restart Roma went down to nine men, as substitute Emerson Palmieri was sent off for a horrible leg-breaker challenge on Corona.
Otavio blasted off target, but Diego Perotti was about to tap in a great Bruno Peres cross from four yards when Miguel Layun got a decisive touch.
Nainggolan was the last to give in and two headers went wide, while Perotti couldn’t get to his cross-shot, but Szczesny gifted Porto their second goal when he tried to be a sweeper-keeper, allowing Layun to waltz round him and deposit into an empty net.
Moments later, Jesus Corona ran at Manolas and went past him easily, smashing the finish under the bar at the near post from a tight angle.
Nainggolan earned applause from the remaining fans when drilling wide, as he at least had the right attitude to the end.
Roma 0-3 Porto (1-4 agg)
Felipe 8 (P), Layun 73 (P), Corona 75 (P)
Roma: Szczesny; Bruno Peres, Manolas, De Rossi, Juan Jesus; Nainggolan, Paredes (Emerson 42), Strootman; Salah, Dzeko (Iturbe 59), Perotti (Gerson 85)
Porto: Casillas; Maxi Pereira (Layun 45+2), Felipe Augusto, Marcano, Alex Telles; Herrera, Danilo Pereira, André André; Otavio (Sergio Oliveira 56), André Silva (Adrian Lopez 66), Corona
Ref: Marciniak (POL)
Sent off: De Rossi 40 (R), Emerson 51 (R)