Porto sealed top spot in Champions League Group B with a 2-1 win over Atletico Madrid on Tuesday, with the Spanish side dumped out of Europe entirely as Bayer Leverkusen finished third.
Diego Simeone's team were hoping to reach the Europa League after their elimination was sealed last week, but they lost on a miserable night in Portugal for the 2014 and 2016 runners-up.
Bayer Leverkusen drew 0-0 with second-placed surprise package Club Brugge in the other game, moving level with Atletico on five points and finishing ahead of them on head-to-head, leaving the Spanish side bottom of a group which they expected to win.
The two prior times Atletico were knocked out in the group stage they went on to win the Europa League, in 2009-10 and 2017-18, but this limp defeat ensured they cannot find similar consolation this season.
Simeone handed Joao Felix a rare start, impressed by the Portuguese forward's impact even as Atletico lost 3-2 against Cadiz on Saturday.
However he, like the rest of Atletico's team, was thoroughly outplayed at the Estadio do Dragao, with only goalkeeper Jan Oblak stopping the hosts racking up a bigger first-half lead.
Mehdi Taremi struck after just five minutes, turning home Evanilson's pass from close range for his fifth goal of the group stage.
Porto could have doubled their advantage against a shaken Atletico when Taremi's clever reverse pass played in Galeno, but Oblak saved superbly with his feet.
With the visitors struggling to string together more than a few passes, it was no surprise when the second goal came, driven home by Canada international Stephen Eustaquio after being teed up by Galeno.
Porto should have grabbed a third when the excellent Taremi set up Evanilson, but the Brazilian forward slashed an effort over the crossbar.
Antoine Griezmann drove home for Atletico but the goal was ruled out for a foul in the build-up as Simeone's side started to show some belated signs of life.
The game turned into an end to end clash as Atletico's desperation increased, while Porto sought another goal to put the game beyond doubt.
Angel Correa forced a save from Porto goalkeeper Diogo Costa, who also denied Yannick Carrasco, while Evanilson missed another clear chance when he headed straight at Oblak.
The Slovenian goalkeeper was at his very best, unlike his colleagues, making further impressive saves to keep Porto at bay, as he was left exposed.
Porto conceded in stoppage time when Ivan Marcano headed a corner into his own net, but unlike last season, when two late goals earned Atletico passage to the last 16, they could not complete the comeback.
© Agence France-Presse