Thankfully wasn't called into action too often, as the Brazilian looked uneasy whenever the ball found its way near to him. Particularly shaky when claiming set pieces.
Made an awful mistake in the early stages of the game, but made up for his lapse in concentration through making a great last ditch challenge to deny Beciraj.
Strong presence and a steady game for the Senegalese defender.
Energetic performance from the former Santos man, who contributed going forward, as well as making some important interventions when tracking back.
Solid at the back for Porto, both at centre-half and at full back. Defused a potentially dangerous situation, after the carelessness of teammate Otamendi.
Energetic display in which the young winger was unfortunate not to grab a goal for himself.
Commanding performance, helped Moutinho to boss the midfield and found space well to give his side the all-important breakthrough goal.
Steady game for the Belgian, his pressure on Beciraj from Helton's spillage potentially prevented the Zagreb winger from tapping home an equaliser.
Two assists and a goal for the Portuguese maestro, who pulled the strings throughout the game. His free kick displayed great technique and his assist for Varela's goal was classy.
Always lively and a handful for the Zagreb back four, despite becoming isolated at times, he was involved in the majority of Porto's attacking exploits.
His powerful driving runs gave Porto a consistent outlet, and he finished well to firmly secure his side's three points.
Despite making two reasonable saves in the dying embers of the game, the Croatian looked uncomfortable throughout - and was liable to parry shots which looked tame enough to catch.
He was made to pay for his lack of legs, couldn't keep up with Porto's wingers and picked up a yellow card for his trouble.
Struggled against James Rodriguez, in what was a frustrating evening for the full-back.
The more commanding of the Zagreb defence before tiring, his powerful driving runs brought welcome relief to his besieged teammates.
Struggled to get tight to Varela, in what was a tough night for the youngster.
Cut an isolated figure against the physical presences of Mangala, Ba and Otamendi, but largely held his own and was unlucky not to give his team the lead.
Started the game well, and led the charge for Zagreb on the break, but was gradually less involved as he tired.
Chased shadows throughout, and picked up a yellow card after continuous fouling.
Similarly to Kovacic, he played a bigger role in the opening exchanges, before his tiredness caught up with him.
Lively performance, and was unlucky to not find the back of the net - thanks to pressure from Defour and a great last ditch challenge from Otamendi.
Enjoyed greater success on the counter attack in the first half, but as Zagreb dropped ever deeper, his opportunities to get on the ball and run at Danilo lessened.
Was poor in the final third, when called upon for deliveries, but made a good last ditch challenge to deny Zagreb an opportunity to grab a consolation goal.
Largely ineffective after coming on, but his pace was a constant threat against a flagging Zagreb defence.
Was a welcome pair of fresh legs in the centre of midfield, and helped his side to dominate and close out the game.
Thrown on to help his beleaguered teammates, never really managed to progress out of his own 18-yard-box.
Given what turned out to be a cameo appearance as a pair of fresh legs in centre midfield, but failed to really get close to the unplayable Moutinho.
Ineffective when brought on, failed to aid his side in any particular fashion.