Porto joined Manchester City in the UEFA Champions League knockout stages after a 0-0 draw where Gabriel Jesus was denied a winning goal by the VAR.
Pep Guardiola's side were already through to the last-16 and will now progress as group winners, although they will be frustrated to have lost their 100 per cent record in this season's competition having dominated for long periods at Estadio do Dragao.
Jesus scored on the rebound when Agustin Marchesin tipped his 80th-minute header onto the crossbar, although replays showed Joao Cancelo was fractionally offside before delivering his cross to the Brazil striker.
Marseille's win over Olympiacos rendered this match to be academic, with the other two teams in Group C on three points apiece.
City penned Porto into their own half for most of the opening exchanges, while each side had penalty claims ignored by referee Bjorn Kuipers - first when Malang Sarr slid in on Raheem Sterling, before Ederson robustly met fellow Brazilian Otavio in his area.
Ederson palmed Diogo Leite's 22nd-minute header out of his goalmouth, sparking a rapid break where opposite number Agustin Marchesin thwarted Ferran Torres.
Sarr made a vital clearance over his own crossbar when Sterling scampered in behind the Porto defence, with the England winger's shot from the resulting corner cleared off the line by Zaidu Sanusi.
Phil Foden's sumptuous 58th-minute through-ball found Sterling, although Marchesin was equal to the task and Torres' footing deserted him when the rebound fell his way.
In a remarkable 70th-minute sequence, a stretching Ruben Dias inadvertently hooked a Sterling attempt out of the Porto goalmouth, with Marchesin equal to Torres' overhead kick follow-up.
The home goalkeeper made another brilliant save from Dias' centre-back partner Eric Garcia, earning his VAR reprieve by the time he was finally beaten by Jesus.