Goalkeeper Ralf Fährmann was Schalke's man of the match, but even he couldn't stop a dangerous-looking Porto side for long enough. Before the game though, Schalke got the result they wanted from elsewhere.
Porto 3-1 Schalke
(Militao 52', Corona 55', Marega 90+4' - Bentaleb pen. 88')
Before a ball was even kicked in Portugal, Schalke secured the result they wanted. Galatasaray's defeat to Lokomotiv Moscow left the Turkish side four points behind Schalke with just one game to play, securing the Bundesliga club's spot in the Champions League last 16.
Domenico Tedesco made five changes to the starting line-up, but Schalke eventually succumbed to the better side.
Ralf Fährmann made a strong save at the end of a fairly even opening quarter of an hour, pushing away a powerful half-volley from Moussa Marega. Three minutes later, Fährmann stretched even further to claw out another special effort from Marega.
Schalke calmed things down and played out the first half, looking to consolidate their recent improvement rather than go for the group win.
Despite more saves from Fährmann after the restart, Porto eventually found a way through when Eder Militao headed superbly home from a corner. Three minutes later, Porto confirmed the win and top spot in the group. Jesus Manuel Corona cut Schalke in half with a great one-two and then finished neatly at the near post.
Nabil Bentaleb scored a late penalty, but any thoughts of a comeback ended when Marega finally got his goal deep in stoppage time. Tedesco and his side can look forward to European football in 2019. The last time they made the knockouts was back in the 2014/15 season, when they bowed out to Real Madrid despite a memorable 4-3 win in the second leg.
Champions League Results:
Atletico Madrid 2-0 Monaco
PSV 1-2 Barcelona
Tottenham 1-0 Inter Milan
PSG 2-1 Liverpool
Napoli 3-1 Red Star Belgrade
Lokomotiv Moscow 2-0 Galatasaray
Porto 3-1 Schalke