Zenit forged the first opening of the game, as Alexander Anyukov did superbly down the right, but his cut-back was ballooned over the top from 15 yards by Pavel Pogrebnyak.
Midway through the first half Alejandro Dominguez curled in a superb free-kick from 25 yards which flew inches wide of the near post with Edwin van der sar struggling to cover.
Eight minutes before half-time Ivica Krizanac almost broke the deadlock from close range after United were caught cold from a free-kick in from the left flank.
Right on the interval Zenit finally hit the front as Danny's corner from the left was flicked on at the near post by Igor Denisov and Pogrebnyak headed home from right on the goal-line.
The Russian side brought on Arshavin at half-time and they started the second half brightly.
On the hour they doubled their lead as the impressive Danny broke superbly from midfield, charged past a couple of defenders and finished crisply past van der sar at his near post.
United almost got back into the game shortly afterwards as John O'Shea blasted a shot at Viacheslav Malofeev from 20 yards and the keeper had to react quickly to deny Ji-Sung Park from the rebound.
Seventeen minutes from time United pulled a goal back when Nani's corner was redirected to the far post by Wayne Rooney and Nemanja Vidic lashed the ball home from close range.
Danny almost made sure of Zenit's victory three minutes from time, but missed a good opening, before Paul Scholes was sent off right at the death for punching the ball into the net.
That proved to be the end of United's hopes, as Zenit held out for a deserved 2-1 victory.