UEFA Europa League holders FC Porto will defend their crown in the new year after FC Zenit St Petersburg's dogged defensive display put the visitors through to the UEFA Champions League knockout phase at their hosts' expense.
Vítor Pereira's men pressed gamely throughout for the Group G win they needed to qualify but found goalkeeper Vyacheslav Malafeev in brilliant form. Luciano Spalletti, twice a quarter-finalist with AS Roma, leads Zenit into the knockout stage for the first time.
Porto pushed from the start. João Moutinho's superb early pass split the Zenit defence to release Djalma, and only a superb one-handed save by Malafeev, down to his right, kept the low finish out. Hulk's header was also smothered by the keeper, who continued his busy night by beating away James Rodríguez's stinging shot at the near post.
Porto pushed relentlessly, penning the Russian team in their own half. Yet Zenit held tight, and midway through the first period a timely intervention by the covering Aleksandr Anyukov denied a rampaging Hulk. Shortly after, the Brazil forward mistimed a powerful volley after Álvaro Pereira's cross, before testing Malafeev with a free-kick from distance in a typically forceful showing.
Zenit defended in numbers, to good effect, cheered on by an impressive contingent of some 3,000 travelling supporters. And they needed to as Hulk threatened again, cutting in and firing a rasping strike straight at Malafeev.
Vítor Pereira switched to an even more offensive plan after the break, bringing on forward Kléber for injured midfielder Steven Defour – turning up the heat. Hulk beat defender Tomáš Hubočan to a James Rodríguez pass but hit his shot agonisingly wide of the far post with the outside of his left foot.
James Rodríguez, increasingly influential in a more withdrawn midfield role, was next to menace, spinning into space and directing an attempt narrowly off target from the edge of the area. Just before the hour, Moutinho had a good sight of goal after Djalma dummied superbly to create the space, yet he dragged his shot wide.
Then came James Rodríguez again, who thought he had at last got the better of Malafeev with time running out after another burst through the centre. The custodian spread himself bravely at the attacker's feet to block and ensure Zenit's place in next Friday's round of 16 draw. The UEFA Europa League awaits Porto – the Portuguese champions will wonder how.