Made a fine stop to deny Bojan an early opener but was utterly helpless to prevent Emanuelson breaking the deadlock on account of a wicked deflection. Was also left with no chance for El Shaarawy's strike. Very nearly fumbled a speculative effort from Boateng but, for the most part, he was a reliable presence in the Zenit goal and it was hard not to feel sorry for him given the nature of Milan's winner.
One of two Zenit men playing in a face mask, Criscito will be disappointed not to have made more of an impact against his compatriots. Did not do much wrong defensively, though he was lucky to escape a yellow after being rolled by Emanuelson, but he offered little going forward.
Was very forward when it came to coming out from the back with the ball at his feet. Indeed, he instigated one attack which resulted in Kerzhakov getting his first sight of goal. He also drew a save out of Abbiati with an awkward header, but Hubocan ultimately cost his side victory as his botched clearance with 15 minutes to go ended up in his own net.
Made a couple of timely interceptions but endured a difficult opening quarter to the game, during which he was beaten all ends up by El Shaarawy as the teenager surged through to score.
Always willing to get beyond his midfielders whenever the opportunity presented itself, he was involved in a few of the home side's best attacks in the first half, and also teed up Bystrov for a strike on goal and very nearly snatched a point for Zenit with a spectacular volley late on. He did struggle at times defensively, though, and was booked for a wild lunge on Bojan.
Certainly did not want for energy or endeavour, Bystrov was Zenit's liveliest forward in the first half. Always looking to take players on or have a crack at goal - albeit to little effect. Perhaps unsurprisingly, he eventually ran out of steam and was subbed with just under 20 minutes remaining.
A pretty tame performance from the Belgian in what was his first competitive start since his big-money move from Benfica. He was outshone by those around him in midfield and, in truth, he looked a little lost at times, failing to influence the game in any meaningful way.
It was he who deflected Emanuelson's free kick past Malakeev, but he made a fine job of making up for that fact. Indeed, the midfielder went agonisingly close to scoring with a header that Abbiati only just managed to prevent from going over the line before then producing the measured through-ball from which Hulk equalised. Shirokov then levelled the game with a far post header early in the second half.
Just like Shirokov, Faizulin was partially to blame for the opening goal, as he gave away the free kick - for which he was booked - that allowed Emanuelson to break the deadlock. However, he too improved thereafter and very nearly earned his side a penalty but the referee ruled that he had been bundled over by El Shaarawy outside the box.
Spent a large chunk of the first half hour on his backside, complaining to the referee about decisions that were not going his way, but he then set about dragging Zenit back into the game. Had already had two shots on target by the time he struck just before the break. His crossing was also sublime throughout and it was no surprise that the equaliser came from one of his corners. Did not deserve to be on the losing side.
For all Zenit's attacking threat, Kerzhakov never really got a clear sight of goal. He fired into the side netting from an acute angle midway through the first half, but he never actually looked like scoring.
Had nothing to do for about half an hour but he was then repeatedly called into action as Zenit began peppering his goal with shots. He pulled off a succession of fine reaction saves but was finally beaten by Hulk just before the break. Abbiati was by no means to blame for that effort, but he did lose the flight of the ball before Shirokov rose to head Zenit level. However, he more than made amends with a stunning stop right at the death from Anyukov's volley.
Dealt well with the energetic - if erratic - Bystrov but he did not get forward as much as he would have liked. Still, he did produce a terrific cut-back midway through the second half that Boateng really should have converted.
He was booked for bundling over Hulk during the second half, but that needless indiscretion aside, Bonera was the model of composure at the back. Indeed, he looked particularly comfortable on the ball, even if most of his best work came in his own box, dealing with crosses.
Outmuscled by Hulk at one point during the first half but, for the most part, the Colombian defended stoutly and made his presence count when Milan came under intense pressure from the half-hour mark onwards.
Had one major scare when he very nearly deflected a cross from Hulk into his own net, but he was pretty sound defensively throughout. Also linked well at times with El Shaarawy and produced a terrific cross that Emanuelson very nearly buried.
Another player who nearly put through his own net in attempting to deal with a cross from Hulk. However, it was difficult to fault the Italy international's work-rate. Still, while it was his cross that led to the winning goal, Montolivo disappointed overall, failing to exert any kind of control over the game.
Was heavily involved in the opening quarter, causing Criscito some problems before putting the visitors a goal to the good with a free kick that he won with a strong drive forward. He also went close to doubling Milan's advantage a moment later only to volley wide at full stretch. However, his influence waned dramatically thereafter and he was hauled off midway through the second half.
N. de Jong
A better showing from the Dutchman, who hasn't been at his best since arriving from Manchester City. Really put himself about, particularly when Milan were under the gun, and used the ball sensibly.
Deployed in a very advanced role early on, in support of Bojan, he did play a part in El Shaarawy's goal with a powerful initial surge. However, very little he tried thereafter came off and this has to be considered another sub-par showing from a player who has yet to recapture his best form this term.
S. El Shaarawy
Started wide on the left and had already set up a chance for Bojan with one rampaging run, when he skipped delightfully past two Zenit players before firing home. His enthusiasm got the better of him at times, and he was booked for a dangerous push on Faizulin on the edge of the area, but El Shaarawy once again showed just why he is considered such an outstanding young talent.
Began brightly enough, calling Malakeev into action inside the opening five minutes. His quick feet also drew a foul from Anyukov that earned the full-back a booking. However, he drifted out of the game in the second half and it was no surprise that he was the one to make way when Allegri opted to change things early in the second half.