Scrambled to keep out Lombaerts' shot early on, and saved smartly from Witsel's effort early in the second half. Rarely troubled throughout.
Dealt with the negligible threat of Kerzhakov and Bystrov in the first half, and together with Kouyate, formed an impregnable partnership at the heart of the defence.
An accomplished performance at full-back, coping easily with the threat of Bystrov aside from one or two early forays from the Zenit winger.
A calming presence on the ball and a shrewd reader of the game, denying the likes of Denisov and Witsel the chance to affect the game early on. Showed commendable energy and a shrewd command of the play from the outset. A classy display.
The 18-year-old looked lively throughout the encounter as he pulled the strings playing off Mbokani and gave the Zenit back four a torrid time with his movement in between the lines. Left the field to tremendous applause as Kanu came on to replace him late on. Potentially a real star in the making.
A combative presence at the heart of midfield, and linked up superbly with Mbokani for the opening goal. A tireless worker alongside captain Biglia in midfield.
Nullified Kerzhakov to great effect alongside Nuytinck in the first half, and carried the ball out of defence consistently well. Denied the likes of Danny any real chance to influence the attack, consistently reading any danger well.
Another Anderlecht youngster who seemed unfazed by the grand stage. Made plenty of promising forays forward, keeping Criscito occupied on the right flank until he was replaced by Iakovenko.
A tireless runner all night, linking up well in attack whilst never shirking his defensive duties. A pain for Spalletti's side.
Seemed intent to pick up where he left off in the reverse fixture, forcing a fingertip save from Malafeev in the first half and proving a constant threat on the left. A lively creative threat, though, he failed somewhat towards the end.
Something of a surprise selection ahead of De Sutter, but justified his coach's faith early on when he chipped cleverly over Malafeev after a neat one-two with Kljestan. Held the ball up well all night, and was fearless in aerial battles despite wearing a mask to protect his broken nose.
Could do little to prevent Mbokani's goal and saved smartly from Jovanovic moments later. Got a crucial touch to Iakovenko's effort to turn the ball onto the crossbar.
Presented a half-chance to Mbokani in the opening minute with a missed clearance, and lost his man for the opening goal. Booked for a cynical block on the striker on the hour mark.
A useful outlet on the attack but struggled to contain Jovanovic early on. Had a half-hearted appeal for a penalty waved away, before being booked for accidentally handling the ball while on the ground.
Denied by Proto early on with Zenit's only meaningful attempt of the first half. Struggled to deal with the power of Mbokani for much of the first hour, and Spalletti's decision to replace him with Bruno Alves may well have had something to do with this.
Made one impressive block tackle to deny Bruno a clear run at goal. Was curtailed by the Anderlecht right flank all evening, denying him the chance to bomb forward as often as he likes.
Showed flashes of real flair early on but quickly faded from the action as Safari kept him subdued. Replaced for the final quarter by Kannunikov.
Fired over from close range early on after excellent work from Bystrov, and was unable to make an impact as Biglia and Kljestan dictated play in the middle. Hauled off at half-time for Danny.
At the heart of an intriguing struggle with Biglia for control of the middle, but came off second best for the most part as he struggled to dictate possession for Zenit.
Embodied Zenit's early frustrations when he was booked for a clumsy challenge on Kouyate. Became far livelier in the second half and was denied by a strong save Proto shortly before the hour mark. Still not justifying his hefty price tag over the summer.
Looked a lively presence on the ball on his Champions League return, but was too often hounded off the ball by the excellent Biglia. Looked a little shy of full match sharpness.
Barely got a kick in the first half as he was starved of all meaningful service, and fared little better in the second, even with the addition of Danny, as Anderlecht's back line held fast.
Denied by a superb reaction stop from Malafeev in the closing stages as Anderlecht threatened to double their lead.
Created a different kind of problem to Praet, almost providing a goal for Iakovenko with a clever flick-on before flashing a shot wide of the target. A physical threat towards the end.
Replaced Lombaerts in the second half, perhaps in a bid to counter the physical threat of Mbokani. Fared little better, in truth.
Replaced Semak at half-time, and almost provided the equaliser when Witsel was denied by Proto following his dangerous free-kick. A lively runner in behind the lines but was too often caught out by the hosts' effective offside trap.