City through as group winners after feisty draw with Porto
City confirmed top spot in Group C after a largely bad-tempered goalless draw with Porto.
City had a number of good chances after the break and also saw a late goal ruled out by VAR as the hosts scrapped their way to the 0-0 draw they probably set out for.
The first-half ended goalless with Porto defending deep and dealing with most of City's threat well.
There was a possible shout for a penalty when Raheem Sterling was caught inside the box on nine minutes, but his lack of an appeal probably made the VAR's decision easier.
Sterling had the best effort of the opening period, collecting the ball on the left of the Porto box, skipping past the full-back before sending a low angled shot in that was cleared off the line by Zaidu Sanusi.
The game was becoming scrappy, with continued infringements and Porto players never wasting an opportunity to make the most of any challenges.
It felt like the Portuguese were intent on ensuring City never got into any rhythm, but the home side should have been punished when Phil Foden's clever pass saw Sterling edge past the last man but shoot straight at the keeper.
There was an extraordinary miss on 70 minutes when Fernandinho's cross found Ruben Dias a yard out but the former Benfica man effectively hooked the ball off the line and Ferran Torres' overhead kick was well saved by the body of the keeper.
City finally seemed to have broken the deadlock on 80 minutes - having just seen another gilt-edged opportunity spurned when Eric Garcia failed to connect cleanly when just a yard or so out and only the keeper to beat - but it was ruled out by VAR.
Bernardo's fine cross was headed against the underside of the bar by Gabriel Jesus and then the Brazilian tapped home from the rebound.
But a large slice of time had passed before it became clear the effort had been ruled out for an earlier offside against Jesus.
Porto keeper Marchesin was outstanding throughout and undoubtedly the only reason City didn't win this game.
All in all, not a classic but the result takes City through as group winners and Porto through as runners-up.
WHAT IT MEANS
City win Group C with a game to spare and will be handed a home second leg in the Round of 16.
City host Fulham in the Premier League - the second successive Saturday 3pm kick-off - at the Etihad Stadium.
City: Ederson, Cancelo, Zinchenko, Dias, Garcia, Rodrigo, Fernandinho (c), Foden, Bernardo, Torres (Jesus 73), Sterling
Porto: Marchesín, Manafá (Nanu 73), Mbemba, Sarr, Monteiro Pinto Leite, Sanusi, Corona (Diaz 62), Uribe, Oliveira, Otávio, Marega (Evanilson 73)
Referee: Björn Kuipers. Amonestados: Rodri (51’), Marega (68’)