Atletico created only one scoring opportunity in the first half, when Yuri Lodygin dived to his left to save Koke's half-volley one minute before the break.
Zenit kept up the pressure after the break, with Hulk forcing Courtois to block his low left-foot shot from just outside the box in the 47th.
Instead, the breakthrough came at the other end after Roman Shirokov failed to open the scoring with a weak shot in the box and Atletico launched a quick counter attack.
Raul Garcia put Lopez through and the striker eluded defender Tomas Hubocan before beating Lodygin in a one-on-one slipping the ball between the keeper's legs.
The home side was gifted an equalizer after Smolnikov broke down the right flank and Alderweireld's header beat Courtois as it flew into the top left corner.
Once level, the home side pushed for a winner in the final stages but never really came close, while Lodygin denied Garcia from close range.
"I think, we have played a good match against a strong opponent," Zenit coach Luciano Spalletti said.
"But we didn't create many chances because our opponents kept it tight and were well-organized in defense."
Atletico leads the group with 13 points. Zenit has six, two points more than Porto which was playing last-place Austria Vienna later on Tuesday.