Basel goalkeeper Yann Sommer saved a late penalty from Roman Shirokov and the hosts hit a post and missed an open goal as they threw all they had at their opponents, but a tie-levelling second goal eluded them.
Trailing 2-0 from the first leg, Zenit halved the deficit after half an hour through Axel Witsel and things looked to be going their way when Basel had Marcelo Diaz sent off for two yellow cards just before half-time.
But the Swiss champions defended superbly after the break, limiting Zenit to just a handful of clear-cut chances to progress 2-1 on aggregate.
The hosts struggled to get going on a terrible pitch which made flowing football close to impossible and Basel looked comfortable, even if they lost midfielder Valentin Stocker to injury in the 18th minute, Fabian Frei coming on.
But the opening goal which arrived in the 30th minute changed the complexion of the game.
Hulk's inswinging corner from the right was flicked on at the near post by Nicolas Lombaerts and his fellow Belgian, Witsel, arrived at the back post to stoop and head low into the net.
The Russians had their tails up and Hulk brought a fingertip save out of Sommer with an effort from 30 yards.
Shirokov was also starting to look more dangerous and the hosts received another boost on the stroke of half-time when their opponents were reduced to 10 men.
A poor first touch from Diaz allowed the ball to run away from him and, in trying to keep possession, he slid into Bruno Alves and was shown as second yellow card.
Basel had a golden chance to get an away goal just after the break but Mohamed El-Nenny opted to try and round the goalkeeper instead of flicking a shot past him and ran out of room.
Most of the action was coming at the other end, though, as Zenit looked for the goal which would level the tie.
Aleksandr Aniukov got in down the right of the area only to slice his shot wide of the near post, while Hulk blazed a long-range free-kick just over.
Igor Denisov had a goalbound shot deflected away.
They should have levelled in the 75th minute only for Danny to miss an open goal from two yards.
A ball across goal from the right reached him at the far post, but with the goal gaping the striker could only lift his shot inexplicably over the bar.
The bumpy pitch did not help Danny with the ball taking a bobble just before it reached him, but it was still a miss destined for the blooper reels.
Basel had another left-off in the 83rd minute as Vladimir Bystrov tried to guide a shot into the far corner with the outside of his right foot, but the ball came back off the post with Sommer well beaten.
Their luck appeared to be out four minutes from time, though, as Park Joo-ho tried to hook the ball away at the back post and only succeeded in kicking Bystrov, a penalty the result.
But Shirokov's spot-kick was weak and straight down the middle and the diving Sommer saved it with his feet.
And that was the hosts' last chance as they crashed out.