Manchester City failed to fire but still secured top spot in Champions League Group C after a goalless draw away with Porto on Tuesday.
Gabriel Jesus had a goal disallowed by VAR and Raheem Sterling had a shot cleared off the line but, with a place in the last 16 already assured, City lacked their usual intensity at the Estadio do Dragao.
With goalkeeper Agustin Marchesin firing, Porto proved stubborn opposition and held on for the point that also takes them through to the knockout stages alongside City.
It was very much a functional display from the visitors, despite a late flurry that almost snatched them a victory.
Manager Pep Guardiola had said he would not rotate his squad for the sake of it but the seven changes he did make suggested Saturday’s Premier League clash with Fulham was on his mind.
Jesus, Kevin De Bruyne, Riyad Mahrez and Kyle Walker were among the players who dropped to the bench following the 5-0 thrashing of Burnley and the tempo was notably slower.
Yet, that also had a lot to do with the approach of Porto, who were resilient to the end.
City enjoyed most of the possession but they created few clear-cut opportunities, particularly in the first half.
Sterling was their liveliest player and replays suggested he might have had an early penalty. On first glance, Malang Sarr looked to have cut out an attack but replays suggested the Porto defender may have caught Sterling in his follow-through. Yet there were no notable appeals at the time and play continued.
Porto did appeal for a spot kick after Otavio collided with Ederson but referee Bjorn Kuipers deemed that clash accidental.
City’s first real chance came on the counter-attack after 22 minutes. A Porto throw-in was flicked on in the City area but Ederson palmed it away and the visitors raced down to the other end.
Phil Foden played Ferran Torres through on goal but Marchesin deflected away as the Spaniard attempted to dink over him, although an offside flag may have cancelled out a goal anyway.
Sterling went close to giving City the lead in the 37th minute when he cut inside from the left and struck a ferocious shot but Zaidu Sanusi cleared off the line.
Porto were content to sit back but did threaten occasionally. Sergio Oliveira sliced a shot over from distance before the break and then fired at Ederson following the restart.
Sterling had another big chance just before the hour as he surged past Sarr to reach a Foden pass but Marchesin raced off his line to block. The rebound fell to Torres but his first touch was poor and Porto cleared.
City were again denied after 69 minutes as Sterling hooked the ball across goal. Ruben Dias looked certain to score as he slid in at the back post but miskicked and hooked the ball behind him.
Torres quickly followed up with an acrobatic volley but Marchesin reacted quickly to punch his effort off the line.
Bernardo Silva also tested Marchesin, who then saved from Eric Garcia at point-blank range.
City thought they had finally broken through with just over 10 minutes remaining but it was not to be as Jesus, just off the bench, struck but was denied by VAR.
The Brazilian headed against the crossbar from a Silva cross and then reacted quickly to tuck home the rebound, but his celebrations were cut short for an apparent offside in the buildup.